Belanur - Di 24.05.05 10:54
Titel: Dynamisch aus Package geladene Frames freigeben
Hallo zusammen,
ich mache wohl derzeit bei der Einbindung meiner Frames aus Laufzeitpackages einen Denkfehler... Folgendes Szenario:
Ich habe ein Laufzeitpackage import_vcom, in dem sich zwei Frames (interface_import_vcom, interface_test) und eine Unit (import_vcom) befinden. Zunächst wird das Package zur Laufzeit vom Programm geladen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| AClass := GetClass('Tf_'+modulname); if AClass <> nil then begin with TComponentClass(AClass).Create(Application) as TCustomForm do begin Show; Free; end; end; |
Beim Laden des Packages werden Menüeinträge etc. im Hauptprogramm erstellt. Im OnClick Ereignis eines Menüeintrages wird der dazugehörige Frame mit der MainForm als Parent geladen, objekt ist dabei eine globale Variable vom Typ TCustomFrame:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure Tf_import_vcom.btn_import_vcom_click(Sender: TObject); begin if objekt <> nil then FreeAndNil(objekt); objekt := interface_import_vcom.Tframe_import_vcom.Create(Application) as TCustomFrame; with objekt do begin parent := Application.MainForm.FindComponent('Notebook1') as TNotebook; end; end; |
Das Laden an sich klappt auch, aber beim FreeAndNil(objekt) gibt es eine Zugriffsverletzung. Kurioserweise funktionier genau das gleiche Vorgehen bei dem zweiten Frame (import_test) aber ohne Probleme. Die Prozeduren sind identisch:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure Tf_import_vcom.btn_import_vcom2_click(Sender: TObject); begin if objekt <> nil then FreeAndNil(objekt); objekt := interface_test.Tframe_test.Create(Application) as TCustomFrame; with objekt do begin parent := Application.MainForm.FindComponent('Notebook1') as TNotebook; end; end; |
Gehe ich hier den falschen Weg?
Danke,
Sebastian