Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Korrekt Variablen definieren (https://www.delphipraxis.net/13327-korrekt-variablen-definieren.html)

Praktikant 16. Dez 2003 11:26


Korrekt Variablen definieren
 
Mal ein n00b Frage :oops:

Und zwar muß ich in meinem Prog viele Variablen in versch. proceduren und auch in andere Formulare (Units) übergeben.

Nun funktioniert das auch, nur ab und an geht da wohl bei der Übergabe sporadisch etwas schief - ist aber nicht reproduzierbar :wall:

Nun gibt es ja am Anfang immer folgene Grundstruktur:
Delphi-Quellcode:
    procedure ...
    procedure ...
  private
    { Private-Deklarationen }
    Var1:string;                      //In Formular/Unit vorh. Var?!
    Var2, Var3 : integer;
  public
    { Public-Deklarationen }
    Var4 : string;                    //Globale in allen Units vorh. Var?!
  end;

var
  Form2: TForm2;
  Var5 : BOOL;                         //für mich dasselbe wie 'private'...

implementation

uses Unit1, Unit2, Unit3;

...
Wo definiere ich nun welche Variable? Habe unitübergreifende Var in 'public' und dann verwendet
Wenn in einzelner unit verwendet dann in 'private'
unter 'var' eigentlich nie groß was.

Und wenn ich folgendes habe:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var EA : Bool; //wenn hier deklariert wird EA nie geändert, wenn dagegen EA:Bool in var an Formularanfang deklariert dann funktioniert's :gruebel:
begin
  if EA=FALSE THEN
  begin
    Form4.logtab;                          //procedure welche eine neue tabelle erzeugt
    Form4.Timer1.enabled:=True;
    EA:=True;
    label1.caption:='Ein';
  end
  else
  begin
    Form4.Timer1.enabled:=False;
    EA:=False;
    label1.caption:='Aus';
  end;
end;
Das Prog schaltet bei button click einen timer einmal ein und beim nächsten click wieder aus.

So, meine Frage: :wiejetzt:

WtF 16. Dez 2003 11:35

Re: Korrekt Variablen definieren
 
Setz mal alle die du Global haben willst zu der Deklaration

Code:
var
  Form2: TForm2;
  Var5 : BOOL;                         //für mich dasselbe wie 'private'...

implementation

uses Unit1, Unit2, Unit3;
Dürfte eigentlich gehen
Mfg

Smokey 16. Dez 2003 11:37

Re: Korrekt Variablen definieren
 
Naja deine Ausführung welche Variable wo gilt war nicht ganz richtig.

Private : Nur in der Formularunit direkt ansprechbar

Public : Überall ansprechbar, aber nur über TForm1.Variable

Im Var-Teil nach Private/public und vor Implementation:
Richtige Globale Variable. Überall direkt ansprechbar über Variablennamen

In Funktion deklariert (wie dein EA):
Nur in Funktion gültig und ansprechbar.
Wird nach der Abhandlung der Funktion wieder 'gelöscht', ist also nicht mehr da.

Praktikant 16. Dez 2003 11:46

Re: Korrekt Variablen definieren
 
ok, das mit meinem EA wäre geklärt, weshalb er bei neuem Aufruf nicht mehr den Status weiß :roll:

Aber zu den globalen Var: Also wenn ich in den var teil vor implementation eine definiere ist diese überall ohne formularname davorgesetzt verfügbar und wenn in public muss der formularname mitgetippt werden.

Bsp:
Delphi-Quellcode:
variable:='global'        //in var vor implementation definiert
Form1.variable:='global'  //in public definiert
Und das ist der ganze Unterschied??

Smokey 16. Dez 2003 12:02

Re: Korrekt Variablen definieren
 
Der Unterschied ist, dass deine im Public-Teil deklarierte Variable zu deiner Klasse TForm1 gehört.

Das heisst zum Beispiel :

Wenn in deiner Project-Unit (Project1 standardmässig) zum Beispiel zuerst form1 dann form 2 aufgerufen wird also so:

Code:
Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TForm2, Form2);
und im Create-event deiner Form1 auf eine Public deklarierte Variable zugegriffen wird (zB. ShowMessage(Form2.variable)), wird es unweigerlich zu einer Zugriffsverletzung kommen.

Warum? eben weil Form2 noch nicht existiert und somit auch nicht die Public Variablen.

Ist die Variable aber in deiner zweiten Unit Global deklariert und du machst Showmessage(variable), geht alles, weil globale Variablen zum Start des Programmes initialisiert werden.

Will heissen : Sobald Formx := nil oder nicht existent ist, ist die public Variable auch nicht existent.

Hoffe man verstehts ;)

mfg smk

woki 16. Dez 2003 12:50

Re: Korrekt Variablen definieren
 
desweiteren, wenn du 2 Instanzen von Tform1 erstellst, hat jede ihre eigene TForm1.variable, aber alle gemeinsam teilen sich eine globale variable. So als Merkregel für den Moment: verwende sowenig wie möglich globale Variable.

Grüsse
Woki


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz