Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klassennamen in String => Instanz erstellen (https://www.delphipraxis.net/71740-klassennamen-string-%3D-instanz-erstellen.html)

DevilsCamp 20. Jun 2006 13:38


Klassennamen in String => Instanz erstellen
 
Gibt es eine Möglichkeit Instanzen von Klassen zu erstellen, deren Namen (also den Klassennamen) ich in irgendeiner Liste (TStringList, z.B.) habe?


Beispiel:
Ich habe folgende Liste:
Code:
TEdit
TEdit
TEdit
TLabel
TLabel
TListBox
TForm2
Diese würde ich dann gerne in meinem Code erstellen.

Also etwa so:
Delphi-Quellcode:
for i := Low(Liste) to High(Liste) do
begin
  irgendeineVariable := Liste[i].Create(Self);
end;

3_of_8 20. Jun 2006 13:39

Re: Klassennamen in String => Instanz erstellen
 
So wie ich die RTTI kenne, gibts da bestimmt irgendne Möglichkeit. Aber ich weiß leider nicht genau, welche.

Lemmy1 20. Jun 2006 14:01

Re: Klassennamen in String => Instanz erstellen
 
Habs noch nicht selbst ausprobiert aber ein Googlesuche ergab folgendes:

zu erst müssen alle in Frage kommenden Klassen via "RegisterClass" registriert werden. Anschließend kann man die via FindClass wieder auffinden.


Grüße

markusl 20. Jun 2006 18:16

Re: Klassennamen in String => Instanz erstellen
 
Hallo zusammen,

hier mal ein Codeschnipsel unter der Annahme das in der Liste die Klassennamen enthalten sind und TControl eine gemeinsame Basisklasse ist.

Delphi-Quellcode:
// Definition der gemeinsamen Klasse
TControlClass = class of TControl;
...

procedure TForm1.xyz;
var
  ctrl : TControl;
begin
  for i := Low(Liste) to High(Liste) do
  begin
    ctrl := TControlClass(GetClass(Liste[i])).Create(self);
    with ctrl do
    begin
      // gemeinsame Aktionen etc.
      // ...
    end;
  end
end;

...

initialization
   // einmaliges Registrieren der potentiellen Klassen
   RegisterClasses([TEdit,TListBox,TLabel]);

HTH

Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz