Hallo,
ich hab mir letztens mal überlegt, ob es möglich wäre, eine
DLL zu erstellen, in der eine Procedure ein Control erstellt, dass dann über Übergabe-Variablen an ein Control der MainForm übergeben werden kann.
Meine
DLL schaut so aus (testweise):
Delphi-Quellcode:
library Project2;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss 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
SysUtils,
Classes,
StdCtrls,
Controls;
{$R *.res}
procedure DoEdit(Komponente: TWinControl; Links, Oben: Integer);
stdcall;
var
neues_Edit: TEdit;
begin
neues_Edit := TEdit.Create(
nil);
with neues_Edit
do
begin
Parent := Komponente;
Left := Links;
Top := Oben;
Width := 250;
// Height :=
Enabled := true;
Visible := true;
end;
end;
exports
DoEdit;
begin
end.
Meine MainForm so:
Delphi-Quellcode:
//DLL: Functions und Procedures
procedure DoEdit(Komponente: TWinControl; Links, Oben: Integer);
stdcall;
external '
Project2.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
DoEdit(Panel1, 10, 10);
end;
Nur wenn ich auf den Button klicke, bekomm ich folgenden Fehler:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Project1.exe ist eine
Exception der Klasse EConvertError aufgetreten. Meldung: 'TFont kann nicht zu TFont zugewiesen werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Weiss jemand warum?
OK, ich gib mich geschlagen, etwas quickAndDirty.