![]() |
Probleme mit TForm bzw. TFormClass innerhalb von Komponenten
Hallo ich habe in einer Komponente (TCollection) Informationen über Formulare (TForm) gespeichert, hinterlegt sind die FormClass (TFormClass) sowie das Form (TForm) selbst.
Ich kann über den Objektinspektor auf die Eigenschaften zugreifen, sind auch alle da! nur ich kann weder das Formular erstellen, anzeigen, oder gar die Formclass registriesen! Ich möchte gern - innerhalb der Komponente - alle Forms die speichert sind mit RegisterClass registrieren, damit ich damit weiterarbeiten kann. Nur ich bekomme immer eine Fehlermeldung. Auch wenn ich die Komponente innerhalb einer Anwendung benutze und von dort auf die FormClass zugreife um diese zu registrieren bekomme ich auch eine Fehlermeldung. Ich dann die Formulare anzeigen, wenn diese automatisch geladen wurden. Ich möchte die Formulare gern dynamisch innerhalb der Komponente erzeugen. Ich möchte auch vermeiden, auf jedem Formulare RegisterClass aufzurufen, das wäre doch unsinng, da alle Informaionen in der Komponente hinterlegt sind. Darf man das TFormObjekt grundsätzlich nicht in Komponenten verwenden oder was mache ich falsch??? :wall: Für Informaitonen, Hilfe und vielleicht ein Beispiel wäre ich sehr dankbar! :witch: |
Re: Probleme mit TForm bzw. TFormClass innerhalb von Kompone
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich habe ein kleines beispiel Programm geschrieben, dass ich später noch genauer erkläre. Zitat:
Zitat:
In der Delphi 7 Onlinehilfe steht Mit RegisterClass kann eine Klasse beim Streaming-System registriert werden. In einer Formulardeklaration enthaltene Formular- und Komponentenklassen (Instanzvariablen) werden automatisch registriert. Alle anderen in einer Anwendung verwendeten Klassen müssen mit RegisterClass explizit registriert werden, wenn Instanzen gespeichert werden sollen. Abgesehen davon kannst Du ja prüfen ob eine Klasse registriert worden ist: In der Delphi 7 Onlinehilfe steht IdentToInt gibt nil (Delphi) bzw. NULL (C++) zurück, wenn die angegebene Klasse noch nicht registriert ist. So nun zu meinem kleinen Beispiel: Es gliedert sich in drei Units:
Der Quellcode erklärt sich eigentlich selbst ;) Du kannst nun ein
Delphi-Quellcode:
definieren und dann Forms reinschieben.
mc : TCollection;
Delphi-Quellcode:
Eine Liste der Forms bekommt man ganz leicht mit:
procedure TfrmMain.btnAddFormClick(Sender: TObject);
var f: TLinkedForm; begin f := mc.Add as TLinkedForm; // obwohl Form readonly ist, kann man trotzdem seine Eigenschaften setzen f.Form.Position := poDefaultPosOnly; // Damit es nicht (0,0) erscheint f.show; FillListBox(Sender); end;
Delphi-Quellcode:
Eine FormClass kann man auch ganz einfach zuweisen:
procedure TfrmMain.FillListBox(Sender: TObject);
var i : Integer; begin // Zeigt die Liste der enthaltenen Forms in der Listbox an ListBox1.Items.Clear; for i := 0 to mc.Count - 1 do begin ListBox1.Items.Add( mc.Items[i].DisplayName + ': ' + (mc.Items[i] as TLinkedForm).Form.ClassName ) end; end;
Delphi-Quellcode:
In demBeispiel wird ja die FForm direkt instanziert, somit kann das Form auch direkt mit Show; angezeigt werden.
procedure TfrmMain.btnAddFrmDialogClick(Sender: TObject);
var f: TLinkedForm; begin f := mc.Add as TLinkedForm; f.FormClass := TfrmDialog; f.show; FillListBox(Sender); end; Ich hoffe das Beispiel hilft Dir etwas weiter. |
Re: Probleme mit TForm bzw. TFormClass innerhalb von Kompone
Ich Danke alle die sich an der Diskussion beteiligt haben, das Problem ist gelöst!
|
Re: Probleme mit TForm bzw. TFormClass innerhalb von Kompone
Zitat:
Ach ja, hab ich ganz vergessen: Herzlich willkommen in der DP :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr. |
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