Zitat:
Mal abgesehen, dass immer noch das eine oder andere zu klären ist, funktioniert die Sache schon ganz gut, der anliegende Screenshot zeigt ein
DFM-Formular im "
Design-Time" Modus, mit direkten Zugriff auf die Events der angezeigten Komponenten.
Harry!
Habe keinen Hilfsreichen Beitrag für dich aber..
gruss
Danke!
Ich habe mir überlegt, um die unbekannten Klassen der User-Komponenten einbinden zu können, ein Plugin-System zu entwickeln.
Dabei müsste eine PlugIn-
DLL lediglich die Klassen registrieren, die sie zur Verfügung stellt und eine Export-Funktion "GetWinControlFromClass", die so aussieht:
Delphi-Quellcode:
procedure ReadComponent (MyComponent: TComponent; InStream: TMemoryStream);
var
outstream: TMemoryStream;
begin
Instream.Position := 0;
OutStream := TMemoryStream.Create;
try
ObjectTextToBinary(InStream, outstream);
OutStream.Position := 0;
OutStream.ReadComponent(MyComponent);
finally
OutStream.Free;
end;
end;
function GetWinControlFromClass (ClassName: ShortString; InStream: TMemoryStream; AnOwner: TControl): TControl; stdcall;
var
CRef : TPersistentClass;
begin
CRef := GetClass(String (ClassName));
if CRef<>nil then
begin
Result := TControl(TControlClass(CRef).Create(AnOwner));
ReadComponent (Result, Instream);
end;
end;
exports
GetWinControlFromClass;
begin
RegisterClass (TSpeedButton); {slClasses.Add('TSpeedButton');}
end.
Mein Dateimanager-Programm übergibt der Funktion den Klassennamen des zu erzeugenden Controls und den Textstream der Komponente aus der
DFM-Datei.
Die Funktion liefert dann das Control zurück und ich kann die fehlende Klasse in Form des erhaltenen Controls in das Formular einbauen, verkürzt hier mal so dargestellt:
Delphi-Quellcode:
if DLLhandle <> 0 then begin
co := DFMPlugIn.GetWinControlFromClass ('TSpeedButton', ms, self);
if co <> NIL then begin
showmessage (co.Name); //OK, geht, Name stimmt auch
co.Parent := self; // Fehler:--> TFont kann nicht zu TFont zugewiesen werden
co.Left := 100;
co.Top := 100;
co.Visible := True;
end;
end;
Leider liefert die Zuweisung zum Parent immer den Fehler "TFont kann nicht zu TFont zugewiesen werden".
Jemand eine Idee, warum das hier nicht geht, bzw. was man ändern muss, so dass es geht?