Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Variable in eine andere Variable packen
ebber - So 05.10.08 00:57
Titel: Variable in eine andere Variable packen
Hallo,
ich stehe gerade irgendwie ein bisschen auf dem Schlauch. Ich komm einfach nicht mehr dahinter was es damit auf sich hatte.
Ich habe eine Variable z.B. Port1 ein Boolean. Kann ich auf true... setzten. Ich möchte jetzt aber sowas eingeben wie LED1 := true, aber dass dann eben Port1 auf true gesetzt wird. LED1 soll nur so ein Platzhalter sein so irgendwie. Ich bin irgendwie gerade verwirrt. Kann mir jemand helfen?
MfG
BenBE - So 05.10.08 01:58
Gleicher Speicher:
Delphi-Quelltext
1: 2: 3: 4:
| var Port: Boolean; LED1: Boolean absolute Port; LED2: Boolean absolute Port; |
Ansonsten als Bitset:
Delphi-Quelltext
1: 2:
| type TLED = (led0, led1, led2, led3, led4, led5, led6, led7); var Port: set of TLED; |
ebber - So 05.10.08 11:25
Danke erstmal. Also im normalen Delphi funktionierts. Für dieses Projekt muss ich aber einen anderen Compiler benutzen. Der nimmt beides nicht. Ich würde jetzt ja noch nach einer anderen Möglichkeit fragen, aber ich glaube kaum, dass er das dann nimmt. Muss ich eben einen umständlicheren Weg gehen.
MfG
jaenicke - So 05.10.08 11:29
Dann sag doch mal welchen Compiler du benutzt :roll: .
Grundsätzlich hört sich das für mich so an als könntest du auch einen Pointer auf deine erste Variable benutzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Port: Boolean; PointerToPort: ^Boolean; begin PointerToPort := @Port; PointerToPort^ := True; |
ebber - So 05.10.08 18:26
Das funktioniert auch nicht.
Der Compiler ist vom Programm mikroPascal. Damit kann man Mikrocontroller programmieren. Deshalb ist das auch eine stark vereinfachte Sache das ganze. Ich schätze mal so Spielereien funktionieren damit einfach nicht. Trotzdem Danke.
MfG
Hidden - So 05.10.08 18:38
Hi,
Eventuell so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| private FPort: Boolean; public property LED1: Boolean read FPort write Port; property Port1: Boolean read FPort write FPort; |
mfG,
Yogu - So 05.10.08 18:42
Wozu soll denn das gut sein? Warum kannst du nicht einfach Port1 schreiben? Wozu braucht man so etwas? :gruebel:
ebber - So 05.10.08 20:05
Hallo,
@Hidden Danke, hat aber überhaupt nicht funktioniert. Er kennt kein private, public, property, read, write. :( Ich habe so das Gefühl das einzige was das überhaupt mit Delphi zu tun hat ist begin und end;
@Yogu Ja theoretisch kann ich das, ist aber ein bisschen umständlich weil sich nicht so direkt Led1 hinter Port1 befindet sondern mehr so Port1 Led8, Port2 Led4.... Das verwirrt dann ein wenig und vorallem kann sich das mal ändern und dann muss ich im ganzen Code alle nochmal ändern.
Yogu - So 05.10.08 20:14
ebber hat folgendes geschrieben : |
@Yogu Ja theoretisch kann ich das, ist aber ein bisschen umständlich weil sich nicht so direkt Led1 hinter Port1 befindet sondern mehr so Port1 Led8, Port2 Led4.... Das verwirrt dann ein wenig und vorallem kann sich das mal ändern und dann muss ich im ganzen Code alle nochmal ändern. |
Und warum verwendest du dann nicht
nur LEDx, und änderst eben beim Einlesen in die Variable entsprechend den Port?
Hidden - So 05.10.08 20:18
Okay, dann ein letzter, verzweifelter Versuch :)
probier' mal, ob er #define kennt. dürfte er zwar nicht, aber..
Kenne leider das Pascal-Äquivalent nicht(das es, fällt mir gerade ein, imho nicht geben dürfte, da so etwas aus Pascal-Sicht grob unsauber wäre: Pascal will klar definierte Typen und keine Präprozessor-Code-Schnipsel).
Ansonsten: Schreib' dir ein Programm, das du vor dem letztendlcihen compillieren einmal drüberlaufen lässt - kleine Tabelle mit Begriffen und dann einfach StringReplace :(
E: Mist, zu spät :) Yogu's Vorschlag hat 'was^^
mfG,
ebber - Mo 06.10.08 10:25
Wenn der Vorschlag was hat finde ich es toll. Ich verstehe ihn bloß leider nicht. Könntest du ihn vielleicht bitte nochmal in 2 Sätzen schreiben statt in einem :)
Hidden - Mo 06.10.08 10:27
Ich hab' ihn auch drei Mal lesen müssen^^
Yogu - Mo 06.10.08 18:58
Yogu hat folgendes geschrieben : |
Und warum verwendest du dann nicht nur LEDx, und änderst eben beim Einlesen in die Variable entsprechend den Port? |
- Definiere eine Variable LED1.
- Definiere eine Variable LED2.
- Definiere weitere, falls du weitere brauchst.
- Anstatt in deine ursprüngliche Variable Port1 zu schreiben, machst du folgendes:
- Schreibe in Variable LED1.
- Schreibe in Variable LED2 das, was du vorher in Port2 geschrieben hast..
- Schreibe in weitere Variablen, falls du weitere brauchst.
- Falls sich die Verknüpfung (Port1 - LED1) ändert, machst du folgendes:
- Du schreibst statt in LED1 (noch früher hieß es Port1) in LED2
- Du kannst auch in LED3 schreiben, falls sich die Verknüpfung so ändert.
Read - Compile - Execute :mrgreen:
ebber - Mo 06.10.08 19:05
Also entweder ich bin heute schwer von Begriff und versteh dich immer noch nicht oder ich habe dir eine wichtige Information vorenthalten. Port1... ist vordefiniert, daran kann ich nichts ändern, das muss so heißen.
MfG
Yogu - Mo 06.10.08 19:09
ebber hat folgendes geschrieben : |
Also entweder ich bin heute schwer von Begriff und versteh dich immer noch nicht oder ich habe dir eine wichtige Information vorenthalten. Port1... ist vordefiniert, daran kann ich nichts ändern, das muss so heißen. |
Da hast du mir tatsächlich eine wichtige Information vorenthalten. Dass
Port1 konstant ist, wusste ich nicht. :)
Tut mir leid - wenn dein Compiler keine Pointer kennt, kann ich dir auch nicht weiterhelfen. :nixweiss:
Hidden - Mo 06.10.08 19:13
bleibt nur: Quelltext kopieren, Schlüsselwörter ersetzen, compillieren, kopierte Version wegschmeißen :(
ebber - Mo 06.10.08 20:18
Ja das scheint mir auch so.
Trotzdem Danke.
MfG
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!