Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Variablenübergabe bei mehreren units
Ulrike - Do 19.09.02 21:33
Titel: Variablenübergabe bei mehreren units
Das ist wahrscheinlich eine Anfängerfrage, aber trotzdem:
Mein Problem ist das Übernehmen einer Zählervariablen in eine andere unit. Ich schaffe es, eine Variable aus der formcreate zu übernehmen, aber eine Variable aus einer anderen procedure ist nicht möglich.
Vielleicht kann mir ja jemand helfen( auch wenn die Frage einfach ist!!!)
DeCodeGuru - Do 19.09.02 21:59
ich habe jetzt zwar nicht 100%-ig verstanden, was du willst, aber wenn du eine Variable "unitübergreifend" nutzen willst, musst du sie Global und öffentlcih deklarieren. In dem Fall also im Publicteil. Dann musste halt nur die Units miteinander verknüpfen und kannst auf die Variablen zugreifen.
Ich hoffe, ich konnte dir wenigstens etwas helfen.
Ulrike - Do 19.09.02 23:04
Danke für die Hilfe.
Die Sache ist nur die,dass ich die Variable(ist ein Zähler) übergeben kann.
Aber am Anfang setze ich diese 0. Erst in einer anderen procedure erhöht sich diese Variable.
Nun ist das Problem, dass ich immer nur die 0 in der anderen unit habe, aber nicht den Zähler.
Ich weiß nicht warum die Varaible nicht "hochzählt"???
LCS - Fr 20.09.02 07:29
Hi
es könnte sein, das du eine Variable mit dem gleichen Namen nochmal lokal deklariert hast. Dann würdest du innerhalb dieser Prozedur immer nur diese lokale Variable sehen. Ungefähr so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Eins; begin i := 5; //Das ist die globale Variable end;
procedure Zwei; var i : integer; begin Wenn du hier auf i zugreifst, kriegst du alles aber nicht 5 end; |
Durchsuch einfach mal deinen Quelltext nach dem Variablen-Namen. Passiert am Anfang relativ häufig und man sucht sich dusselig. :shock:
Gruss Lothar
Zufall001 - Fr 20.09.02 11:26
Hi,
damit der Programmcode schön übersichtlich bleibt, lege ich die Deklaration und Initialisierung aller globalen Variablen in eine Unit namens "global.pas". Mit "global.variable" läßt sich prima darauf zugreifen.
Gruß
Rainer
Travis - Fr 27.09.02 16:19
Hallo Leute,
genau das gleiche Problem habe ich auch und weiß leider bis heute noch nicht, woran es liegt. Da mein Quelltext noch ziemlich überschaubar ist, bin ich mir sicher, dass ich jede Variable unter einem anderen, eindeutigen Namen deklariert habe.
Travis
DeCodeGuru - Fr 27.09.02 17:03
laß dir doch mal mit ShowMessage immer den aktuellen Wert geben, wenn etwas verändert wurde. Dann kannst du den Bug wenigstens eingrenzen. Oder gibt es mal ein bisschen Code, damit wir nachvollziehen können, was mit der variable geschieht.
Travis - Fr 27.09.02 17:18
Also, hier hab ich mal etwas Code gelistet(frmMain):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if cbFahrzeug.Text = aktdatensatz.display then begin frmItemAdd.bookfile := aktdatensatz.trvfile; //hier wird die Variable gefüllt btnRemCar.Enabled := True; btnPrint.Enabled := True; btnItemAdd.Enabled := True; btnItemInfo.Enabled := True; end; |
Und hier der Code des anderen Formulars (frmItemAdd):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| public { Public-Deklarationen } bookfile: string; end;
var frmItemAdd: TfrmItemAdd;
implementation
uses uDrive;
{$R *.DFM}
var fail: Boolean = false;
const buffersize = 32;
procedure TfrmItemAdd.FormCreate(Sender: TObject); begin lblDateDep.Caption := bookfile; // Testweise Auslesen der Variable AssignFile(TravelFile, bookfile); if FileExists(bookfile) then ReSet(TravelFile) else ReWrite(TravelFile); end; |
Ich habe soweit alle uses-Einträge richitg und auch aufgepasst, dass jede Variable nur einmal vergeben ist und trotzdem will es nicht funktionieren. Die Variable ist im zweiten Formular einfach leer! Der Compiler meckert ja auch nicht.
Anonymous - Sa 28.09.02 17:47
Titel: Ist das Korrekt?
[quote]ich habe jetzt zwar nicht 100%-ig verstanden, was du willst, aber wenn du eine Variable "unitübergreifend" nutzen willst, musst du sie Global und öffentlcih deklarieren. In dem Fall also im Publicteil. Dann musste halt nur die Units miteinander verknüpfen und kannst auf die Variablen zugreifen.[quote]
Hmm...
Was ich mich schon immer gefragt habe: ist daß die richtige Antwort? Oder ist es so, daß es zufällig nicht ganz falsch ist. Also eigentlich hab ich da nicht die große Ahnung, aber der Publicteil gehört eigentlich nur zu dem Objekt Form1 (Name kann variieren). Somit ist er Public in der Unit1 und somit auch global für andere Units. Also nur zufällig für andere Units vorhanden. Aber ich sagte schon mal: ich las mich überzeugen. Es gibt Leute die mehr Ahnung als ich haben.
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!