Hallo zusammen,
folgende Situation: 3 Formulare, FMain, F1 und F2. F1 und F2 sollen nur bei Bedarf erzeugt werden, d.h sie werden nicht beim Start automatisch erzeugt.
F1 und F2 sollen Modal erzeugt werden, sobald im Hauptmenü in FMain auf den entsprechenden Eintrag geklickt wird:
[pre]
procedure MenueClick1(Sender:TObject);
begin
F1:=TF1.Create(Application);
F1.ShowModal;
F1.Release;
end;
[/pre]
Deklaration F1 (analog dazu F2!):
[pre]
type
TF1 = class(TForm)
Panel1: TPanel;
.
.//irgendwelche KOmponenten, Prozeduren und Funktionen
.
procedure GridBrowse;
end;
var
F1: TF1;
implementation
[/pre]
Das klappt auch alles einwandfrei. Nun soll auch aus F1 das Fenster F2 aufgerufen werden. Also in die Uses-Clause kommt dann die Unit UF2, und in die OnClick-Prozedur folgender Code:
[pre]
procedure buttonOnClick(Sender:TObject);
var frm:TF2;
begin
frm:=TF2.Create(ApplicatioN);
frm.ShowModal;
frm.Release;
end;
[/pre]
Wenn ich das Proggy so starte kommt es beim Aufruf von F2 aus F1 irgendwann zu einem EAccessViolation. Rufe ich das Fenster F2 von FMain auf, klappt alles einwandfrei!
Nun der große Trick: ändere ich den Aufruf von F2 aus F1 folgendermaßen ab:
[pre]
procedure buttonOnClick(Sender:TObject);
begin
F2:=TF2.Create(ApplicatioN); //die Variable F2 wird ja in der Unit UF2 deklariert!
F2.ShowModal;
F2.Release;
end;
[/pre]
Klappt auch der Aufruf aus F1 heraus OHNE den Zugriffsfehler. Warum denn?!?! Ich ändere doch lediglich den Namen einer Variable! Hab ich vielleicht was grunsätzliches noch nicht kapiert???
Grüße und vielen Dank für Hinweise und ein schönes WE wünscht
Wolfgang Lemmermeyer
folgende Situation: 3 Formulare, FMain, F1 und F2. F1 und F2 sollen nur bei Bedarf erzeugt werden, d.h sie werden nicht beim Start automatisch erzeugt.
F1 und F2 sollen Modal erzeugt werden, sobald im Hauptmenü in FMain auf den entsprechenden Eintrag geklickt wird:
[pre]
procedure MenueClick1(Sender:TObject);
begin
F1:=TF1.Create(Application);
F1.ShowModal;
F1.Release;
end;
[/pre]
Deklaration F1 (analog dazu F2!):
[pre]
type
TF1 = class(TForm)
Panel1: TPanel;
.
.//irgendwelche KOmponenten, Prozeduren und Funktionen
.
procedure GridBrowse;
end;
var
F1: TF1;
implementation
[/pre]
Das klappt auch alles einwandfrei. Nun soll auch aus F1 das Fenster F2 aufgerufen werden. Also in die Uses-Clause kommt dann die Unit UF2, und in die OnClick-Prozedur folgender Code:
[pre]
procedure buttonOnClick(Sender:TObject);
var frm:TF2;
begin
frm:=TF2.Create(ApplicatioN);
frm.ShowModal;
frm.Release;
end;
[/pre]
Wenn ich das Proggy so starte kommt es beim Aufruf von F2 aus F1 irgendwann zu einem EAccessViolation. Rufe ich das Fenster F2 von FMain auf, klappt alles einwandfrei!
Nun der große Trick: ändere ich den Aufruf von F2 aus F1 folgendermaßen ab:
[pre]
procedure buttonOnClick(Sender:TObject);
begin
F2:=TF2.Create(ApplicatioN); //die Variable F2 wird ja in der Unit UF2 deklariert!
F2.ShowModal;
F2.Release;
end;
[/pre]
Klappt auch der Aufruf aus F1 heraus OHNE den Zugriffsfehler. Warum denn?!?! Ich ändere doch lediglich den Namen einer Variable! Hab ich vielleicht was grunsätzliches noch nicht kapiert???
Grüße und vielen Dank für Hinweise und ein schönes WE wünscht
Wolfgang Lemmermeyer
Comment