![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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