Hallo,
hab in Anlehnung an Assarbads Tutorial eine
DLL erstellt, die ein Form mit einigen Komponenten enthält. Die einzige enthaltene und exportiere Funktion lautet:
Delphi-Quellcode:
function ShowForm: Pointer; stdcall;
begin
frmListe := TfrmListe.Create(nil);
frmListe.Show;
Result := frmListe;
end;
Im Haupprogramm binde ich die
DLL dynamisch ein und erzeuge das Formular.
Delphi-Quellcode:
var
frmListe: TForm;
...
frmListe := ShowForm;
Ein Zugriff auf Die Komponenten des Formular gelingt problemlos durch
Delphi-Quellcode:
For i := 0 to frmListe.ComponentCount - 1 do
If frmListe.Components[i].Name = 'btnOk' then
TButton(frmListe.Components[i]).OnClick := btnOkClick;
Es scheitern aber Dinge wie
Delphi-Quellcode:
If frmListe.Components[i].ClassType = TButton then // ClassType hat keinen sinnvollen Wert
If frmListe.Components[i] is TButton then // Geht ebensowenig
(frmListe.Components[i] as TButton).OnClick := btnOkClick; // ungültiger Typecast
Kann mir dieses Verhalten bitte jemand erklären und ggf. Lösungswege aufzeigen?
Ich weiß, dass das alles keine sauber
OOP ist und ich böse viele Sachen tue. Im meinem Anwendungsfall macht es aber Sinn.
Kurz zur Erläuterung:
Ich möchte die DLLs als einfache dumme Container für ein Formular verwenden. Ich habe ein Hauptprogramm, dass als Parameter den Namen der
DLL erhält. Nach dem Start zeigt es das Formular aus der
DLL an. Nach dem Klick auf dem Ok-Button auf diesem Formular liest das Hauptprogramm die Eingaben aus den einzelnen Controls aus und übergibt sie an einen in Crystal Reports erstellte Datenbankauswertung. Dabei wird die Zuornung zwischen Parameter der Datenbankauswertung und dem Control über Namen und Typ des Controls hergestellt.
Die gesamte "Intelligenz" soll im Hauptprogramm stecken, so daß zu jeder Datenbankauswertung nur eine
DLL mit einem Formular erstellt werden muß und fertig.
Ich hoffe, das war jetzt einigermaßen verständlich.
Liebe Grüße,
Stephan