AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Korrekt Variablen definieren

Ein Thema von Praktikant · begonnen am 16. Dez 2003 · letzter Beitrag vom 16. Dez 2003
Antwort Antwort
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#1

Korrekt Variablen definieren

  Alt 16. Dez 2003, 11:26
Mal ein n00b Frage

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

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:
  Mit Zitat antworten Zitat
WtF

Registriert seit: 24. Nov 2003
Ort: Nähe München
72 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Korrekt Variablen definieren

  Alt 16. Dez 2003, 11:35
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
Steffen
Was meinst du als unbeteiligter eigentlich zum Thema Intelligenz ? Keep it real, Respect!
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Korrekt Variablen definieren

  Alt 16. Dez 2003, 11:37
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.
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Korrekt Variablen definieren

  Alt 16. Dez 2003, 11:46
ok, das mit meinem EA wäre geklärt, weshalb er bei neuem Aufruf nicht mehr den Status weiß

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??
  Mit Zitat antworten Zitat
Benutzerbild von Smokey
Smokey

Registriert seit: 10. Nov 2003
Ort: Puerto de la Cruz
158 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Korrekt Variablen definieren

  Alt 16. Dez 2003, 12:02
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
Greif dir ein gutes Stück Fleisch auf deinem Weg nach draussen !!!
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Korrekt Variablen definieren

  Alt 16. Dez 2003, 12:50
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:53 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