Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frames zur Laufzeit zufügen (aus DLL) (https://www.delphipraxis.net/8817-frames-zur-laufzeit-zufuegen-aus-dll.html)

weltaran 12. Sep 2003 14:03


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:
procedure TForm1.FormCreate(Sender: TObject);
begin
    frame:= TFrame1.Create(self);
    frame.Parent:= self;
end;
Ich habe das Frame vorher schon in ein von einer 'normalen' Application aufgerufenes Formular eingebunden, da funktionierte es.

??

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]

weltaran 12. Sep 2003 14:06

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

Tpercon 12. Sep 2003 14:09

Re: Frames zur Laufzeit zufügen (aus DLL)
 
Dann gib doch dem Frame nicht self sondern die entsprechende Form als Parent?!

negaH 12. Sep 2003 14:10

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

mirage228 12. Sep 2003 18:37

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

weltaran 15. Sep 2003 08:58

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

gmc616 16. Jun 2016 16:40

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 16:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz