![]() |
Tabsheet aus dll erzeugen
Habe in meinem Programm ein Pagecontrol mit namen "PageControlTool" auf diesem will ich mittels .dll ein Tabsheet erzeugen.
Hier der Code der libary:
Delphi-Quellcode:
nur bei compilieren meckert er, das findcomponent ein undefinert bezeichner ist, was ja auch irgendwie logisch ist, ich habe gelesen es liegt am fehlenden Form, dessen Methode "FindComponent" nunmal ist.
library pl_html;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß sich in der ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt- Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL. Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String- Informationen als PChar- oder ShortString-Parameter übergeben. } uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ExtCtrls, TabNotBk, ImgList; var TabSheetTest: TTabSheet; {$R *.res} procedure Test; begin TabSheetTest := TTabSheet.Create((FindComponent('PageControlTool') as TPageControl).Name); TabSheetTest.PageControl := (FindComponent('PageControlTool') as TPageControl).Name; TabsheetTest.Caption := 'Test'; TabsheetTest.Name := 'TabSheetTool1'; end; exports Test; begin end. Aber wie kann ich das realiseren? Dt2158 |
Re: Tabsheet aus dll erzeugen
Hi,
du exportiest eine Prozedur, die einen Parameter vom Typ TPageControl hat. Das PageControl benutzt Du dann als Parent für Dein Tabsheet. Dein Hauptprogramm übergibt dann das Ziel-PageControl der DLL beim Aufruf. Aber vorsicht: Die DLL und Dein Programm sollten dann möglichst mit der selben Delphi-Version kompiliert werden, da die TPageControl Klassen sich sonst möglicherweise unterscheiden (das führt dann zu Fehlern). mfG mirage228 |
Re: Tabsheet aus dll erzeugen
also hab mal so meine dll gemacht!
Delphi-Quellcode:
das hauptprogramm:
library pl_html;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß sich in der ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt- Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL. Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String- Informationen als PChar- oder ShortString-Parameter übergeben. } uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ExtCtrls, TabNotBk, ImgList; var TabSheetTest: TTabSheet; {$R *.res} procedure Test(pTool: TPageControl); begin TabSheetTest := TTabSheet.Create(pTool); TabSheetTest.PageControl := pTool; TabsheetTest.Caption := 'Test'; TabsheetTest.Name := 'TabSheetTool1'; end; exports Test; begin end.
Delphi-Quellcode:
interface
... procedure Test(pTool: TPageControl); implementation procedure Test(pTool: TPageControl); external 'pl_html.dll'; ... ... ... procedure TMainForm.Button1Click(Sender: TObject); begin test(pagecontrol_tools); end; fehlermeldung Zitat:
aber was nun? |
Re: Tabsheet aus dll erzeugen
Setz mal bei der DLL in den Projektoptionen unterm Reiter "Packages" den Haken "mit Laufzeitpackages aktualisieren"
|
Re: Tabsheet aus dll erzeugen
ja also postiv ist, das dadurch die dll von 356 kb auf 12kb geschrumpft ist,
negativ ist das die meldung weiterhin kommt! |
Re: Tabsheet aus dll erzeugen
Frag mich nicht warum, aber wenn du vor der PageControl-Zuweisung TabSheetTest.ParentFont := False; schreibst, funktioniert es.
P.S. Achtung: Bei "mit Laufzeitpackages aktualisieren" müssen die Vcl-Bpls bei Weitergabe des Programms mitgegeben werden!!! |
Re: Tabsheet aus dll erzeugen
:gruebel:
Versuch mal bei der Exe das gleiche. Ich bin mir ziemlich sicher, dass das Problem damit zu tun hatte. Welche Packages stehen denn bei dir in dem Edit unter dem Haken? |
Re: Tabsheet aus dll erzeugen
Zitat:
|
Re: Tabsheet aus dll erzeugen
jo geht
danke aber was heißt die einstellung überhaupt? die exe ist jetzt statt 800 kb nur noch 79 kb groß, läuft die auch auf jedem anderen system?? (Laufzeitpackage?) Ich frage mich wenn alle projekte so um den faktor 10 verkleinert werden können, warum regen sich dann alle über die großen ausgabedateien auf, da muss doch ein hacken sein? |
Re: Tabsheet aus dll erzeugen
also hab mich kundig gemacht, das mit laufzeitpackages kommt für mich nicht in frage, da ich gerne nur eine exe weitergeben möchte und nicht erst noch runtime files mitliefern muss!
das mit dem Parentfont funktioniert zwar, liefert aber beim beenden eine fehlermeldung |
Re: Tabsheet aus dll erzeugen
Ja, das is unschön. Das Problem hatten schon viele, aber meines Wissens gibt es nach wie vor keine Lösung dafür. Höchstens Workarounds. :(
|
Re: Tabsheet aus dll erzeugen
wie soll das heißen, borland produziert ein buglastiges produkt, dafür muss es doch ein lösung geben
|
Re: Tabsheet aus dll erzeugen
Wenn du eine findest, wär ich für nen Hinweis dankbar.
|
Re: Tabsheet aus dll erzeugen
Zitat:
Allerdings wird die Dll entladen, bevor du die erstellten Objekte wieder freigegeben hast! Eine einfache Lösung gegen die Fehlermeldung beim Schließen sähe so aus:
Delphi-Quellcode:
Besser wäre aber, in der dll selber beim Entladen alle von ihr erstellten Objekte sauber freizugeben! Guck dir dazu am besten das
procedure TForm1.FormDestroy(Sender: TObject);
begin while PageControl1.ActivePage <> nil do PageControl1.ActivePage.Free; end; ![]() Du könntest es auch mal mit dynamischem Laden der Dll ausprobieren und schauen, ob's dann vernünftig funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 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