Einzelnen Beitrag anzeigen

TPok

Registriert seit: 19. Jul 2004
Ort: Eisenach
25 Beiträge
 
Delphi 2005 Professional
 
#1

Zugriff auf Komponenten auf einer Form in einer DLL

  Alt 28. Sep 2005, 16:12
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 = 'btnOkthen
    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
Stephan Fietzek
  Mit Zitat antworten Zitat