![]() |
Frames aus DLLs..? TFont <> TFont!?
Hi!
Das Problem dürfte allseits bekannt sein: Wenn ich ein Frame aus einer DLL importieren will, bekomme ich beim Erzeugen des selbigen (Parent ist ein TForm aus der EXE) die Fehlermeldung "Cannot assign TFont to TFont". Des Pudels Kern scheint ja zu sein, dass für EXEs und DLLs verschiedene Packages verwendet werden (das zumindest stand in einigen Groups). Die Lösung wäre also folglich, die DLL mit den Packages der EXE zu kompilieren. Nur: Wie geht das? Die Fehlermeldung kommt unabhängig ob ich "Build with runtime packages" in den Projektoptionen angewählt habe oder nicht (trotz Rebuild). Kann mir jemand konkrete Lösungsvorschläge anbieten? Danke im Voraus Ganymed |
Re: Frames aus DLLs..? TFont <> TFont!?
Beides, EXE und DLL müssen mit Packages kompiliert werden. In deinem Falle muß also bei "Required Packages" -> "benötigte Packages" in den Projektoptionen der EXE und DLL auch das Packages "VCL" enthalten sein.
Gruß hagen |
Re: Frames aus DLLs..? TFont <> TFont!?
Die Packeges in den Projektoptionen der EXE und der DLL sind identisch.
Aber ich versteh' nicht so ganz, was du jetzt genau meinst... |
Re: Frames aus DLLs..? TFont <> TFont!?
Gut, und bei beiden Projekten, sprich der EXE und DLL, ist in den Projektoptionen die Checkbox angehakt das man Packages benutzen will ?
Wenn so, dann kompiliere beides komplett neu. Danach sollte alles funktionieren. Gruß Hagen |
Re: Frames aus DLLs..? TFont <> TFont!?
Hm, :( , ich hab jetzt bei beiden Projekten unter "Build with runtime packages" das Package "vcl" angegeben... Dass jetzt alles funktionieren sollte, sollte man annehmen. Leider alles graue Theorie.
Denn jetzt bekomme ich einen Klassenkonflikt: "A class named TGIFFrame already exists"... Alles Sch*** :evil: Wieso lässt sich das denn nicht mit den Design-Time-Packages machen??? |
Re: Frames aus DLLs..? TFont <> TFont!?
Dann benutzen EXE und DLL ebenfalls die TGifImage Komponente. Da diese sich mit RegisterClass() im VCL Package registriert und BEIDE die EXE und DLL diese Komponente NICHT aus einem Package heraus benutzen, kommt es zu diesem Fehler. Das liegt daran das du versucht's ein "Misch-Package-Nicht-Package" System zu bauen. Ich vertrete die Auffassung, entweder ALLES mit Packages oder GARNICHT's.
Also, in den "Required Packages" alle Packages aufführen die Klassen enthalten die von der EXE und den DLL's gemeinsam benutzt werden. Zitat:
Gruß Hagen |
Re: Frames aus DLLs..? TFont <> TFont!?
Zitat:
Von den "Required Packages" die du erwähnst, sehe ich keine Spur. In meinen Projektoptionen kann ich nur die Packages einstellen, die mit kompiliert werden sollen ("Project | Options", Register "Packages"). Das können entweder "Designtime Packages" (das ist eine lange Liste mit Check-Boxen), oder "Runtime packages" (das ist unten das kleine Text-Edit) sein. Bestenfalls gibt ein ein "Requires"-Teil, wenn ich das ganze als Package machen wollte. (Es gibt die Möglichkeit, Quellcode u.ä. in Laufzeit-Packages auszulagen und zur Laufzeit dynamisch einzubinden - was ist aber nicht will)... :( Ganymed |
Re: Frames aus DLLs..? TFont <> TFont!?
Genau das Edit ist "required Packages", dort solten alle Packages stehen deren Komponenten gemeinsam benutzt werden.
Gruß Hagen |
Re: Frames aus DLLs..? TFont <> TFont!?
Liste der Anhänge anzeigen (Anzahl: 1)
Ist zwar ein alter Thread, doch bin ich durch ein anderes Forum auf Deine Methode gestossen.
Ich habe das Problem, dass ich die EXE nicht so erstellen kann, wie Du das hier beschreibst: ![]()
Delphi-Quellcode:
Wie erstelle ich mir denn solch eine EXE? Eine Form enthält sie ja nicht, da die "MainForm" in das Package "Main.bpl" ausgelagert ist. Ich bin über "File -> New Application" gegangen und habe "Unit1" aus dem Projekt gelöscht, dann im Projekt-Manager auf "Project1.exe" und "View Source" - aber wie weiter?
// hier das Project für die EXE
// diese MUSS mit Laufzeitpackages compiliert werden und muß in der // required Packages Option das package MAIN.bpl enthalten program project1; ...... begin Application.Initialize; // Mainform aus Package Main.bpl wird statisch geladen Applciation.CreateForm(TMainForm, MainForm); Application.Run; end. Auch habe ich offensichtlich ein ähnliches Problem, wie mein Vorposter, denn das mit dem "requires" funktioniert doch nur bei Packages selbst, oder? Anbei ein Screenshot von meinen Projekt-Optionen. Da mich Dein Ansatz sehr interessiert, würde ich das auch gerne mal testen wollen ;-) |
Re: Frames aus DLLs..? TFont <> TFont!?
Ok nochmal Step by Step:
1.) erzeuge ein neues Formular mit Klassennamen TMainForm. 2.) speicher das unter Unit "FormMain.pas" ab. 3.) erzeuge nun ein neues Package mit Namen "Main", als RunTime package 4.) füge in dieses Package Unit "FormMain.pas" hinzu 5.) kompiliere es 6.) erzeuge neue Anwendung, und lösche Unit1.pas raus 7.) in Projektoptionen "mit packages" kompilieren, und Main in benötigte packages eintragen 8.) Füge "FormMain.pas" in Formulare hinzu 9.) kompiliere EXE Die EXE benötigt nun alle Packages wie VCL, DB usw. und eben auch das neue Package MAIN. In diesem Package ist das Hauptformular in Unit FormMain.pas. Alles was damit zu tun hat sprich Code/Resource usw. wird also in dieses package gespeichert statt in der EXE. Die EXE selber wird höchsten 17 Kb groß sein. gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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