Autor Beitrag
Ulrike
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: 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:
ausblenden 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

_________________
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#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 17:18 
Also, hier hab ich mal etwas Code gelistet(frmMain):

ausblenden 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):

ausblenden 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



BeitragVerfasst: 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.