![]() |
Frames zur Laufzeit zufügen (aus DLL)
Hallo!
Ich schreibe gerade eine DLL (inlusive ActiveX). Eine Methode daraus soll ein Formular erzeugen auf dem dann zur Laufzeit ein Frame platziert werden soll. Erzeugen tue ich das Formular mit ...:= Form1.Create(Application); Im OnCreate-Event will ich nun ein Frame mit
Delphi-Quellcode:
Ich habe das Frame vorher schon in ein von einer 'normalen' Application aufgerufenes Formular eingebunden, da funktionierte es.
procedure TForm1.FormCreate(Sender: TObject);
begin frame:= TFrame1.Create(self); frame.Parent:= self; end; ?? Danke schonmal weltaran PS. Ich muss wohl nicht dazusagen, dass ich ziemlicher Anfänger in Delphi bin? [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
Re: Frames zur Laufzeit zufügen (aus DLL)
Vielleicht sollte ich die Fehlermeldung noch anführen!!
Sobald dann die Form erzeugt wird erscheint die Fehlermeldung: Frame1 has no parent! Irgendwelche Adoptionsvorschläge? :-) weltaran |
Re: Frames zur Laufzeit zufügen (aus DLL)
Dann gib doch dem Frame nicht self sondern die entsprechende Form als Parent?!
|
Re: Frames zur Laufzeit zufügen (aus DLL)
TFrame1.CreateParented(Self.Handle);
OHNE Frame.Parent := Self. Dein Problem ist es das du versuchst VCL Objecte aus einer DLL mit denen in der EXE zu verwenden. Im Grunde kann dies nur funktionieren wenn die DLL und die EXE+DLL die Grundlagenpackages wie VCL??.bpl gemeinsam benutzen. Ich weiß man hört immer wieder das DLL's kein Problem sind, und das doch alles mit Forms/Klassen in DLL's absolut sauber funktioniert. Diese Aussagen sind schlichtweg falsch, verallgemeinert, und zeugen vom fehlenden Wissen darüber wie DLL's + VCL arbeiten. Grundsätzlich kann man sagen: Eine DLL-Funktion die die VCL benutzt ist immer dann SICHER wenn sie bevor sie zurückkehrt zum Aufrufer alle VCL Fourmlare die sie erzeugt hat wieder zerstört. D.h. ganz konkret das NUR Modale Dialoge die VCL-basiert sind in DLL's korrekt funktionieren. Da hilft auch kein Rumbiegen und Tricksen mit dem Application Object, oder mit Application.Handle. Die VCL und das Klassenkonzept von Delphi ist nicht DLL konform. Erst, und nur dann, wenn die DLL die gleichen Packages wie die EXE benutzten, und die gemeinsam genutzten Klassen sind in DIESEN Packages, wird es sicher. Denn nun exitieren im Prozess und den DLL's die gemeinsammen Klassen nur EINMAL und nicht wie bei deinem Problem ZWEIMAL. Gruß Hagen |
Re: Frames zur Laufzeit zufügen (aus DLL)
ich hab irgendwo gelesen, dass wenn Klassen in "DLLs" haben will, dann sollte man COM+ nehmen, stimmt das?
mfG mirage228 |
Re: Frames zur Laufzeit zufügen (aus DLL)
Hi!
Ich muss vielleicht dazusagen, dass ich die DLL nicht von einem Delphi Programm aus nutze. Bis jetzt brachte auch ...CreateParented(... keinen Erfolg. Hmmm... weltaran |
AW: Frames zur Laufzeit zufügen (aus DLL)
Auch wenns schon über 12 Jahre her ist. Hier die Lösung:
Wenn man TFrame's ins DLLs nutzen will, sollte man das Application.Handle der DLL auf das MainForm-Handle der Hauptanwendnung (der EXE) setzen. Dann funtkionierts auch mit den Frames. Ob das gut ist, weiß ich nicht. Bis jetze gehts... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz