Entwickler-Ecke

Sonstiges (Delphi) - Formübergreifende Variablen erstellen


1Stein - Sa 15.02.03 23:12
Titel: Formübergreifende Variablen erstellen
Hi leutz naja bin nen absoluter newb in Delphi hab heut erst angefangen hab schon n paarprogs geschrieben und hab mich jetzt an nen kleines Quiz gesetzt auf jeden fall weiß ich net wie man Formübergreifende Variablen erstellt wenn mir da jemand helfen kann wäre das schön und wo ich gerade mal beim schreiben bin ich würd auch gern mal wissen wie man ein Bild einbinded (Delphi 7)

Sorry ich glaub das is für die meisten ein Witz aber wie gesagt ich hab heut erst angefangen

Moderiert von user profile iconTino: Titel geändert.


Christian S. - Sa 15.02.03 23:29

Beispiel: du möchtest die Variable "my_var", welche Du in Form1 verwendest, auch in Form2 verwenden.

Der Kopf von Unit1 (in der Form1 enthalten ist), sieht dann so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
{...}
type TForm1 = ...
{...}
var
  Form1: TForm1;
  my_var : STRING;
{...}


Um my_var nun auch in der für Form2 zuständigen Unit "Unit2" zu verwenden, schreibst Du Unit1 (in der die Variable ja deklariert wurde) in die USES-Klausel der Unit2. So:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, unit1;  //<<<---- DA STEHT's

type
  TForm2 = class(TForm)
  {...}


Auf die Variable my_var kannst in Unit2 jetzt ganz normal zugreifen.

MfG,
Peter


1Stein - Sa 15.02.03 23:32

:eyecrazy: sieht alles n bissl kompliziert aus :mrgreen: aber ich tests mal fehlt mir nurnoch das bild


1Stein - Sa 15.02.03 23:45

jetzt habischs kapiert :) das mit dem bild habsch jetzt auch :roll:
wie kann ich das ganze jetzt in nem Label wieder ausgeben?


Tino - So 16.02.03 13:37

1Stein hat folgendes geschrieben:
wie kann ich das ganze jetzt in nem Label wieder ausgeben?

Was willst du in einem Label wieder ausgeben? Vielleicht hilft das hier:
Label1.Caption := 'Delphi-Forum.de!'; :-)

Gruß
TINO

PS: Bitte in Zukuft für jede neue Frage ein neues Topic erstellen!


1Stein - So 16.02.03 13:50

jaja soweit weiß ich das auch aber mein problem liegt darin das ich die variable aus Form2 ausgeben will der das aber net will er schreibt immer Form3 statt dem Namen der in Form2 eingegeben wurde


Tino - So 16.02.03 14:00

1Stein hat folgendes geschrieben:
jaja soweit weiß ich das auch

Wo her sollte ich das wissen?

1Stein hat folgendes geschrieben:
aber mein problem liegt darin das ich die variable aus Form2 ausgeben will


Quelltext
1:
Label1.Caption := Form2.Variable;                    


Gruß
TINO


1Stein - So 16.02.03 14:07

kA vieleicht weil das thema um Formübergreifende Varis geht? naja egal thx erstmal

... Jetzt schreibt er Form2 in das leben (ein Fortschritt :evil: :evil:)


Christian S. - So 16.02.03 14:28

Wenn Du Dein Problem klarer beschreiben würdest, könnten wir Dir auch viel besser helfen. Wie wäre es denn, wenn Du mal den Code, den Du bisher hast, hier postest?


1Stein - So 16.02.03 14:38

Also wenn du das willst hier erstmal der von Form2


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:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    MainMenu1: TMainMenu;
    Programm1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Ansicht1: TMenuItem;
    Optionen1: TMenuItem;
    N2: TMenuItem;
    Hilfe1: TMenuItem;
    N3: TMenuItem;
    Credits1: TMenuItem;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Hilfe1Click(Sender: TObject);
    procedure Credits1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  Name: STRING;
implementation

uses Unit1, Unit3, Unit4, Unit5;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
Name := Edit1.Text;
Form3.showModal;
close;
end;

procedure TForm2.Hilfe1Click(Sender: TObject);
begin
Form4.show
end;

procedure TForm2.Credits1Click(Sender: TObject);
begin
Form5.show
end;

procedure TForm2.Exit1Click(Sender: TObject);
begin
close;
end;

end.


und hier der von Form3


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:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit3;

interface

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

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    MainMenu1: TMainMenu;
    Programm1: TMenuItem;
    NeuesSpiel1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    Ansicht1: TMenuItem;
    Optionen1: TMenuItem;
    N2: TMenuItem;
    Hilfe1: TMenuItem;
    N3: TMenuItem;
    Credits1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Hilfe1Click(Sender: TObject);
    procedure Credits1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
implementation

uses Unit4, Unit5;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
label2.caption := Form2.Name;

end;

procedure TForm3.Hilfe1Click(Sender: TObject);
begin
Form4.show
end;

procedure TForm3.Credits1Click(Sender: TObject);
begin
Form5.show
end;

procedure TForm3.Exit1Click(Sender: TObject);
begin
close;
end;

end.


Nur so neben Bei das soll nen Kleines Quiz werden und derjenige soll begrüßt werden deshalb die Formübergreifende Variable naja


Christian S. - So 16.02.03 15:00

Form2.Name ist nicht die Variable, die Du ansprechen willst. Das ist der Name der Form und nicht die von Dir deklarierte Variable. Versuch es mal mit Unit2.Name statt Form2.Name.


Aya - So 16.02.03 15:13

Hi,

schreib mal deine Variable "Name" in den public Bereich:


Quelltext
1:
2:
3:
4:
public
  { Public-Deklarationen } 
  Name: STRING;
end;


dann kannst du sie in jedem anderen Form einfach per

Quelltext
1:
Form2.Name;                    


abrufen.. auch wenn das normalerweise der Name von Form2 währe.. wird halt überschrieben die Variable.

Au'revoir,
Aya


1Stein - So 16.02.03 15:21

Naja jetzt schreibt er garnix mehr :mrgreen: bin ich schonmal weiter als vorher :mrgreen:


Aya - So 16.02.03 15:25

Hi,

na ja... wenn er garnix schreibt heißt das einfach das in der Variable kein inhalt ist... :)

Ruf deine Zeile:

Quelltext
1:
label2.caption := Form2.Name;                    


mal im OnShow auf, nicht im OnCreate!

Au'revoir,
Aya


1Stein - So 16.02.03 15:34

:mrgreen: thx jetzt funztz


Christian S. - So 16.02.03 15:37

Ich finde es unschön, die Variable "Name" zu überschreiben. Lass sie doch einfach dort, wo sie bei Dir stand und rufe sie mit Unit2.Name auf. Dann kommt es auch zu keiner Kollision mit Eigenschaften der Form.


1Stein - So 16.02.03 16:42

Naja in 2 Jahren interessiert mich sowas vieleich aber im moment bin ich zufrieden sobalt es funktioniert aber trotzdem danke