Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Variable die für 2 Forms gilt


error - Mo 17.02.03 12:08
Titel: Variable die für 2 Forms gilt
Hi,
ich möchte eine Variable haben die von 2 Forms gleichzeitig benutzt wird. Das heisst wenn die Variable in Form2 geändert wird, soll sie in Form1 auch geändert worden sein.

thx i a - error


foxy - Mo 17.02.03 12:10

einfach eine globale variable deklarieren. Natürlich in deiner Mainfrm....


error - Mo 17.02.03 12:11

Das hatte ich mir schon gedacht :)
Die Frage ist WIE ich sowas mache...


foxy - Mo 17.02.03 12:14

:lol:
kkk
also soweit ich mich noch erinnern kann ( da ich dieses nie benutze, wegen unübersichtlichkeit), musst du über der implementation also unter public diese Deklarieren


Quelltext
1:
2:
3:
Public
procedure xxx;
var variable1;


error - Mo 17.02.03 12:19

foxy hat folgendes geschrieben:
:lol:
kkk
also soweit ich mich noch erinnern kann ( da ich dieses nie benutze, wegen unübersichtlichkeit), musst du über der implementation also unter public diese Deklarieren


Quelltext
1:
2:
3:
Public
procedure xxx;
var variable1;


Entweder ich lass das 'var' weg, dann ist die Variable in der anderen Form nicht deklariert, oder ich schreibs mit hin, dann funktionierts gar net mehr...


Anonymous - Mo 17.02.03 12:23

Variable im Interface Teil vereinbaren und die Unit im zweiten Formular unter Uses anmelden.


foxy - Mo 17.02.03 12:33

Popov das ist noch der Interfaceteil oder etwa nicht??? der geht wohl bis zu Imple...
und das man die Unit1 in der anderen in die Uses setzten muss iss wohl klar :twisted:


Tino - Mo 17.02.03 13:07

foxy hat folgendes geschrieben:
musst du über der implementation also unter public diese Deklarieren

Im Implementationsteil gibt es keine Public-Sektion. So eine Sektion befindet sind zum Beispiel in der Form-Deklaration.

foxy hat folgendes geschrieben:
und das man die Unit1 in der anderen in die Uses setzten muss iss wohl klar

Warum ist das klar?

Gruß
TINO


Christian S. - Mo 17.02.03 13:30

@error:Ich wollte nur mal drauf hinweisen, dass zwölf Threads unter Deinem dieser [http://www.delphi-forum.de/viewtopic.php?t=7413] Beitrag zu finden ist!


BungeeBug - Mo 17.02.03 13:47

also so gehts jetzt genau ....

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:
26:
27:
28:
29:
30:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations } <- Hier muss die Variable eingebunden werden!!!
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.


foxy - Mo 17.02.03 13:52

BungeeBug hat folgendes geschrieben:
also so gehts jetzt genau ....
Code:


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:
26:
27:
28:
29:
30:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs; 

type 
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } <- Hier muss die Variable eingebunden werden!!! 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 

end; 

end.


hmmm ich denke nicht das dies geht ... das kannst du mit functionen oder proceduren machen aber nich mit variabeln


Quelltext
1:
2:
3:
4:
5:
Public
prcedure xx;
function xxx;
end;
var variable: DWORD;

sry habe oben das end; vergessen

und
@tino

Lesen Pls
ich habe geschrieben "über" d.h. das dies wohl nicht der Implement.teil ist aber egal :wink2:


Wolff68 - Mi 19.02.03 19:43

Mal ausführlich:
Unit1 mit Form1:

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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
...
type
  TForm1 = class(TForm)
    Edit1: TEdit;
  private
    { Private-Deklarationen }
    PrivatVariable : String; <= OHNE var, und VOR Prozeduren oder Funktionen.
    function PrivatFunktion : String;
  public
    { Public-Deklarationen }
    PublicVariable : String; <= OHNE var, und VOR Prozeduren oder Funktionen.
    function PublicFunktion : String;
  end;

function GlobalFunktion : String;

var
  Form1: TForm1;
  GlobalVariable : String;

implementation
{$R *.dfm}

function GlobalFunktion : String;
begin
  Result := 'Bla';
end;

{ TForm1 }
function TForm1.PrivatFunktion : String;
begin
  Result := 'Bla';
end;

function TForm1.PublicFunktion : String;
begin
  Result := 'Bla';
end;
...

Unit2 mit Form2

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
...
implementation

uses Unit1; // Notwendig !!!

{$R *.dfm}

procedure TForm2.FormActivate(Sender: TObject);
begin
  Label1.Caption := Form1.Edit1.Text;
  Label2.Caption := Form1.PublicVariable;
  Label3.Caption := Form1.PublicFunktion;
  Label4.Caption := GlobalVariable;
  Label5.Caption := GlobalFunktion;
  // Zugriff auf PrivatVariable nicht möglich
  // Zugriff auf PrivatFunktion nicht möglich
end;
...

Man beachte, daß PrivateVariable/Funktion und PublicVariable/Function Unterelemente von Form1 sind. GlobalVariable/Function ist ohne Form1. anzusprechen. Auch sind die Komponenten unter Form1 quasi Public, und somit ebenfalls von 'aussen' ansprechbar (Edit1)