Autor Beitrag
Travis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mi 25.09.02 18:41 
Hallo Leute,

ich bin absoluter Delphianfänger und habe folgendes Problem: Ich habe ein Hauptformular (frmMain oder Form1) und ein weiteres unter dem Namen frmItemAdd. Wie kann ich es anstellen, dass ich auf Variablen, welche ich in Form1 deklariert habe, in dem anderen Formular zugreifen kann? Wenn ich das versuche, kommt immer die Meldung "Undefinierter Bezeichner: 'Variable'". Ich benutze z. Z. Delphi 5.

Schon im Voraus danke!!

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 25.09.02 19:49 
also die Variable, die du in der anderen Unit/Form verwenden willst musst du global in dem Public-Bereich deklarieren. So zum Beispiel:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    MyVar: String;
    { Public-Deklarationen }
  end;


So, in der anderen Unit/Form musst du erst die Unit bzw. Form angeben und dann die Variable "aufrufen und das kannste so machen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
implementation

uses Unit1;  //WICHTIG: Hier musst du die Unit1 einbinden. Unit1 ist die Unit von Form1

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.MyVar := 'Hallo';
end;


Ich hoffe, ich konnte dir etwas helfen.

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mi 25.09.02 21:22 
Vielen Dank für deine Antwort!
Im Grunde genommen funktioniert es jetzt sogar, bis darauf, dass die Variable beim Auslesen aus einem anderen Formular immer leer ist. Aber Fehler vom Compiler kommen jetzt zum Glück nicht mehr.

Falls jemand noch eine Antwort weiß, kann er natürlich gerne Posten...

MfG

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 25.09.02 21:43 
kannst du etwas Code posten. Dann können wir dir auch helfen. :wink: (vielleicht)

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Mi 25.09.02 21:56 
Also: Ich habe zwei Formulare, auf die es eigentlich ankommt: Das Hauptformular heißt 'frmMain', das Andere 'frmItemAdd'. Ich habe momentan die Variable wie folgt im Code von 'frmItemAdd' deklariert:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  public
    bookfile: string;
    { Public-Deklarationen }
  end;

implementation

uses uDrive;

{$R *.DFM}


Aus der frmMain fülle ich dann die Variable wie folgt:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
      if cbFahrzeug.Text = aktdatensatz.display then
        begin
          frmItemAdd.bookfile := aktdatensatz.trvfile;  //<-- wird gefüllt
          btnRemCar.Enabled := True;
          btnPrint.Enabled := True;
         end;


Das komische ist ja, wenn ich die Variable im frmMain deklariere und auch dort wieder auslese, ist sie gefüllt. Wenn ich dann jedoch das zweite Formular öffne, ist sie dort leer.

Na ja, ich weiß nicht mehr weiter.

Danke für die Hilfe,

Travis
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 17:56 
Es scheint wohl doch ein größeres Problem zu sein, denn weder AUQ.de-User, noch mein Informatik-Lehrer in der Schule konnte mir bis jetzt helfen. Aber na ja, ich bin guter Dinge, dass irgendwann jemand die Antwort weiß.

Trotzdem nochmals Danke für die Hilfe,

Travis


PS: Habe gesehen, dass Ulrike aus der Rubrik 'Objekt Pascal' das selbe Problem zu haben scheint.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 27.09.02 18:19 
Hast du eine lokale Variable mit gleichen Namen in der Unit?

Oder schreib mal den Namen des Formulars vor die Variable in der anderen Unit.
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 19:33 
Beides funktioniert nicht. Was die Variablen angeht habe ich weder eine lokale, noch eine andere globale mit dem gleichen Namen. Daran kann es also schon mal nicht liegen.
Den Namen des Formulars hab ich ja sowieso in der anderen Unit (dort, wo die Variable nicht deklariert wurde) davorstehen.

Kann es aber vielleicht sein, dass ich die Prozedur, welche die Variable in der anderen Unit füllt, auch als public deklarieren muss? Das war jetzt gerade ein spontaner gedanke. Ich weiß weder wie das geht, noch ob das möglich ist.

Travis
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: Fr 27.09.02 21:02 
Hi!
Zitat:
Kann es aber vielleicht sein, dass ich die Prozedur, welche die Variable in der anderen Unit füllt, auch als public deklarieren muss? Das war jetzt gerade ein spontaner gedanke. Ich weiß weder wie das geht, noch ob das möglich ist.


Nein, es reicht wenn die Variable public ist.

Ansonsten musst du es machen wie DeCodeGuru gesagt hat, dann klappt das auch, oder du hast einen anderen Fehler eingebaut.

cu
waba
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 21:35 
Zitat:
Ansonsten musst du es machen wie DeCodeGuru gesagt hat, dann klappt das auch, oder du hast einen anderen Fehler eingebaut.


Genau das ist es ja: Ich habe es so gemacht wie 'DerCodeGuru' gesagt hat, und trotzdem funktioniert es nicht.
Selbst wenn ich nur ein ganz einfaches Beispiel konstruiere, mit zwei Units und zwei Formularen funktioniert das ganze nicht. Außerdem hat ja 'Ulrike' aus dem "Objekt Pascal"-Board genau die gleichen Probleme, nur das sie keine Strings, sondern Integer weiterreichen will.

MfG

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 22:00 
setzt einfach mal en par ShowMessage damit du den fehler eingrenzen kannst. Besonders wichtig: Ein ShowMessage nach dem Füllen der Variable, damit du auch ganz sicher weiss, dass sie gefüllt wurde.

_________________
Viele Grüße
Jakob
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: Fr 27.09.02 22:00 
Hi!

Dann zeig doch mal dein Beispiel.

cu
waba
[/quote]
aogwaba
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109



BeitragVerfasst: Fr 27.09.02 22:01 
wow!

schon wieder gleiche Zeit.
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 22:18 
ist irgendwie auffällig oder? :mrgreen:

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 22:20 
Ich bin jetzt nach langem Probieren endlich einen Schritt weiter gekommen: Die Variable ist gefüllt, aber nicht, wenn ein OnCreate-Ereignis aufgerufen wird!

Hier der gewünschte Quellcode:

Hier von Unit1:

ausblenden volle Höhe 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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    pubvar: string;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  pubvar := Edit1.Text; // Variable wird gefüllt!
  ShowMessage(pubvar); //Variable ist gefüllt!
  Form2.ShowModal;
end;

end.


Und hier von Unit2:

ausblenden volle Höhe 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:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.Button1Click(Sender: TObject);
begin
  ShowMessage(Form1.pubvar); //Variable ist gefüllt!!!
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Button1.Caption := (Form1.pubvar); //Variable ist leer!
end;

end.


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 22:22 
setz mal den Code von dem OnCreate-Ereignis in der zweiten Unit in das OnShow-Ereignis.

_________________
Viele Grüße
Jakob
Travis Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Fr 27.09.02 22:32 
Das ist des Rätsels Lösung! Und selbst die Informatik-Lehrer in der Schule hatten nicht durchgeblickt *g*.

Na ja, hauptsache es funktioniert!


Nochmals vielen Danke!!!

Travis
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 28.09.02 09:31 
des liegt wahrscheinlich daran, dass die Form2 vor dem Füllen der variable created wird -> der Zugriff findet auf die leere Variable statt.

_________________
Viele Grüße
Jakob