Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Tabsheet aus dll erzeugen (https://www.delphipraxis.net/32275-tabsheet-aus-dll-erzeugen.html)

Dt2158 21. Okt 2004 10:08


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:
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.
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.
Aber wie kann ich das realiseren?

Dt2158

mirage228 21. Okt 2004 10:11

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

Dt2158 21. Okt 2004 11:08

Re: Tabsheet aus dll erzeugen
 
also hab mal so meine dll gemacht!
Delphi-Quellcode:
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.
das hauptprogramm:
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:

bla bla Converterror: "Tfont kann nicht tfont zugewiesen werden" blabla
logisch! :lol:

aber was nun?

Treffnix 21. Okt 2004 11:23

Re: Tabsheet aus dll erzeugen
 
Setz mal bei der DLL in den Projektoptionen unterm Reiter "Packages" den Haken "mit Laufzeitpackages aktualisieren"

Dt2158 21. Okt 2004 11:45

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!

Stevie 21. Okt 2004 12:19

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!!!

Treffnix 21. Okt 2004 12:19

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?

Stevie 21. Okt 2004 12:22

Re: Tabsheet aus dll erzeugen
 
Zitat:

Zitat von Treffnix
: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?

Sauber! Klappt... (hab die Vcl und die Rtl drin)

Dt2158 22. Okt 2004 08:45

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?

Dt2158 22. Okt 2004 10:17

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.
Seite 1 von 2  1 2      

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