Autor |
Beitrag |
Ulrike
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 19.09.02 21:33
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
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: 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.
_________________ Viele Grüße
Jakob
|
|
Ulrike
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
Zufall001
Hält's aus hier
Beiträge: 10
Windows, Linux
Delphi 7, C#
|
Verfasst: 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
Beiträge: 48
|
Verfasst: 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
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: 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.
_________________ Viele Grüße
Jakob
|
|
Travis
Beiträge: 48
|
Verfasst: 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.
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: 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.
|
|