AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Klassen auflisten und Eigenschaften auslesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen auflisten und Eigenschaften auslesen?

Ein Thema von moelski · begonnen am 17. Sep 2010 · letzter Beitrag vom 17. Sep 2010
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 03:29
Delphi-Version: 2010
Moin !

Angenommen ich habe 3 Klassen in meiner Anwendung:
TProject
TProject_Text
TProject_RTF

TProject_Text & TProject_RTF sind von TProject abgeleitet.

Nun würde ich gerne dynamisch eine Liste aufbauen können und zwar mit allen Klassen die von TProject abgeleitet sind.

Der User würde dann eine Auswahl bekommen was er für ein Projekt erstellen mag.

Da aber TProject_Text & TProject_RTF für einen User belanglose Namen sind wäre es gut wenn man Klasseneigenschaften definieren könnte. Als Beispiel ein einfacher String der für den User aussagekräftiger ist wie z.B. TProject_Text > "Projekt Eintrag für normalen Text".

Ich habe es mal mit RegisterClass und FindClass versucht. Leider klappt das RegisterClass schon nicht.
"[DCC Fehler] DeviceRoot.pas(152): E2010 Inkompatible Typen: 'TPersistentClass' und 'Class reference'"

Müsste ich dann alle Klassen von TPersistent ableiten?
Also anstatt
type TInputDevice = class das
type TInputDevice = class(TPersistent) Ich habe hier http://delphi.about.com/library/weekly/aa080905a.htm was gefunden was in etwa in die Richtung geht. Allerdings werden dort die Klassen nicht ermittelt sondern sind fest in eine ListBox eingetragen.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010

Geändert von moelski (17. Sep 2010 um 03:46 Uhr)
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 06:56
Moin !

Ich glaube ich beantwrote mir das mal selber.

Delphi hat ja neue RTTI Funktionen die nun auch Attribute enthalten können.

Beispiel:
Delphi-Quellcode:
[Table('CONTACTS')]
TContact = class(TStorable)
private
[FieldName('NAME')]
FName: string;
...
Ich glaube das macht genau das was ich suche
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 07:25
Hier habe ich mal ein Beispiel gezeigt, wie man alle Form-Klassen auflisten kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 08:21
Hallo Uwe,

herzlichsten Dank !
Das war noch die Methdode zum Glück

Nun kann ich alle Klassen auflisten die von einer Basisklasse abgeleitet sind,
kann die Klasse komplett zerlegen dank RTTI und
kann auch noch die Klasse mit Attributen versehen was für mich recht wichtig ist.

An dieser Stelle auch noch ein Danke an Daniel für sein super RTTI 2010 Video !!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 09:42
@Uwe:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  aClass : TClass;
  context : TRttiContext;
  types : TArray<TRttiType>;
  aType : TRttiType;
  Test : TUser;
begin
  context := TRttiContext.Create;
  types := context.GetTypes;
  for aType in types do begin
    if aType.TypeKind = tkClass then begin
      aClass := aType.AsInstance.MetaclassType;
      if aClass.InheritsFrom(TUser) then begin
        Memo.Lines.Add(aClass.ClassName);

        Test := aClass.????
      end;
    end;
  end;
end;
Eine Frage habe ich doch noch ... Wenn ich nun die Klasse gefunden habe, wie kann ich dann eine Instanz davon erzeugen?

Also in dem Beispiel ... Test := aClass.!??!?!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 10:24
Hmm über einen TypeCast gehts nicht. Das führt zu einem Zugriffsfehler:

Inst : TUser;

Inst := TUser(aClass).Create;

Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 10:51
Eine Frage habe ich doch noch ... Wenn ich nun die Klasse gefunden habe, wie kann ich dann eine Instanz davon erzeugen?

Also in dem Beispiel ... Test := aClass.!??!?!
Mit Standard Constructor: Test := aType.GetMethod('Create').Invoke(aClass, []).AsObject as TUser;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 10:58
Aha so geht das.

Ich danke
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 13:38
Ich glaube in dem hier beschriebenen Fall ist es ungünstig die RTTI zu verwenden. Denn letztendlich will man in den wenigsten Fällen das alle verfügbaren Eigenschaften etc. dem Endanwender zur Verfügung stehen. Und spätestens wenn es mehrsprachig werden soll ist es nicht mit einem einzigen Property getan sondern man kommt besser die Klasse gleich richtig zu implementieren so das sich jeder Nachfahre (wie bei TGraphic und TImage) selbst registriert und somit auch ausgelesen werden kann was verfügbar ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Klassen auflisten und Eigenschaften auslesen?

  Alt 17. Sep 2010, 15:41
Moin !

Zitat:
dem Endanwender zur Verfügung stehen
Habe mich da vermutlich faslch ausgedrückt ... Der Endanwender kliegt davon nichts zu sehen.

Es geht nur um das Handling "intern".
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 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