![]() |
Controls über Klassenname erstellen?
Hallo,
ist es in Delphi möglich Steuerelemente zur Laufzeit über ihren Klassennamen zu erstellen? Beispielsweise gebe ich in ein Edit "TButton" ein und es wird ein Button erzeugt. Dies soll mit jedem beliebigen Klassennamen eines Steuerelementes funktionieren. |
Re: Controls über Klassenname erstellen?
Ein Mini Beispiel:
Delphi-Quellcode:
if edit.Text ='tbutton' then
begin (TButton.Create(self)).parent := self; end; |
Re: Controls über Klassenname erstellen?
Das meine ich nicht. Es geht mir darum, dass man das mit jedem beliebigen Steuerelement machen kann. z.B auch mit TLabel, TEdit, TMemo... und ich möchte diese ungern alle per case abfragen und dann erstellen.
Ich bräuchte etwas wie
Delphi-Quellcode:
das funktioniert aber nicht.
control:=TControl(getclass(edit1.text)).Create(self);
control.Parent:=self; |
Re: Controls über Klassenname erstellen?
Dafür müßten die Klassen irgendwo in einer Liste registriert sein, was sie nicht sind.
Im Falle von GetClass müßtes du die Klasse vorher bei Classes.RegGroups registrieren. |
Re: Controls über Klassenname erstellen?
Kann man sich alle Componenten von Delphi auflisten lassen und diese dann registrieren?
|
Re: Controls über Klassenname erstellen?
So sollte es gehen:
Delphi-Quellcode:
Die harte Typumwandlung mit TConrolClass ist etwas gefährlich - hier könnte man besser mit "as" arbeiten
control:=TControlClass(FindClass(edit1.text)).Create(self);
// hier zuerst Left,Top, Height und Width setzen (bzw. SetBounds() aufrufen), bevor Parent gesetzt wird // das verhindert unnötige Methodenaufrufe control.Top := ... control.Parent:=self; (aber ich kann's grad nicht ausprobieren)
Delphi-Quellcode:
control:=(FindClass(edit1.text) as TControlClass).Create(self);
control.Parent:=self; |
Re: Controls über Klassenname erstellen?
FindClass ist "GetClass() <> nil", bringt also eher noch weniger. (TControlClass(False))?
Eine passende Liste gibt es zur Laufzeit einfach nicht. Selber erstellen, oder bleiben lassen. MfG, Dirk |
Re: Controls über Klassenname erstellen?
Ich denke im Rahmen der RTTI müsste sich u.U noch einiges verstecken. Denn Delphi-Apps müssen ihre Formulare auch aus der Exe streamen und die IDE erkennt ja auch wenn DFM-Klassenangaben nicht mit den der Pas-Datei übereinstimmen.
|
Re: Controls über Klassenname erstellen?
Das ist richtig. Klassen, die mit M+ kompiliert wurden, speichern für jedes als published deklarierte Feld den Namen und den Typen. Aus dem Typen lässt sich mittels ClassName leicht der Name erhalten.
Das Problem ist bei Verwendung dieser Informationen allerdings, dass sich auf diese Weise eben nicht der Typ TEdit erhalten lässt, wenn kein Edit auf dem Formular liegt, was aber anscheinend im Sinn des Threaderstellers liegt. |
Re: Controls über Klassenname erstellen?
Zitat:
Das ist ist hier ein erwünschtes Verhalten. Zitat:
Die Informationen sind da; blos die VCL verbirgt sie vor dem Programmierer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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