Hallo,
zunächst schon mal herzlichen Dank für Eure Hilfe!
Ich habe auch mal versucht diesen Fehler an einem einfachen Beispiel zu simulieren:
In einer MDI-Anwendung gibt es zwei Formulare:
- Eines welches als "fsNormal" und
- eines welches als "fsMDIChild" erzeugt wird
Auf beiden Formularen gibt es einen Button. Nach der Erzeugung der Formulare frage ich aus dem "fsMDIForm" den caption des Buttons durch eine procedure innerhalb des Formulars ab:
1) Erzeugung von fsMDIChild:
Delphi-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:
| procedure TFMainForm.CreateMDIChild(frm: TFormClass); var i : Integer; bCreated: Boolean; fForm : TForm; Child: TFTest1;
begin bCreated:=False; for i := 0 to FMainForm.MDIChildCount - 1 do begin if FMainForm.MDIChildren[i] is frm then begin fForm:=FMainForm.MDIChildren[i] as frm; bCreated:=True; Break; end; end; if not bCreated then begin frm.Create(Application) end else begin FForm.ActiveMDIChild; FForm.Show; end; end; |
2) Erzeugung von fsNormal:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TFMainForm.Formular21Click(Sender: TObject); begin Application.CreateForm(TFTest2, FTest2); FTest2.Show; end; |
3) Abfrage im MDIChild:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TFTest1.KomponenteTest1; begin ShowMessage(Button1.Caption); end; |
--> Zugriffsverletzung bei Adresse 004728D1 in Modul "MDIAPP.exe". Lesen von Adresse 00000360.
4) Abfrage im "Normalen" Fenster:
--> Funzt!
Die Zugriffsverletzung in meinem eigentlichen Projekt lautet:
Zugriffsverletzung bei Adresse 008534A2 in Modul "MDIAPP.exe". Lesen von Adresse 00000394.
Dieses VcPlan ist eine ActiveX-Komponente. Ich habe versucht an dieser Stelle nur mal die caption eines Buttons abzufragen:
.....
ShowMessage(TBExit.Caption);
--> Kracht genau so!!!!
iNode:=VcPlan.GetNodeByID(IntToStr(iMachine) + '|' + IntToStr(iOrder));
.....
Zugriffsverletzung bei Adresse 00853465 in Modul "CkPlan.exe". Lesen von Adresse 0000036C.
Es scheint mir so als ob ich auf die einzelnen Objekte meines Child-Formulars keinen Zugriff haben wenn ich dieser Zugriff von außen kommt. Bei einem "normalen" Formular klappt das einwandfrei!
Viele Grüße
Chrissi