Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: RTTI: Verschachtelte Klassen auslesen

  Alt 29. Aug 2011, 18:59
Ich weiß, ein schöner Test sieht anders aus, aber das gewünschte Ergebnis ist vorhanden
Delphi-Quellcode:
type
  TTest = class
  strict private type TStrict = class end;
  strict private _Strict : TStrict;

  private type TOne = class end;
  private One : TOne;

  protected type TTwo = class end;
  protected Two : TTwo;

  public type TThree = class end;
  public Three : TThree;

  public type
    TNested = class
    public type TNestedNested = class end;
    public Nested : TNestedNested;
    end;

  public Nested : TNested;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  RC : TRttiContext;
  RT : TRttiType;
  T : TTest;
begin
  mmoLog.Clear();
  for RT in RC.GetTypes() do
    if (Pos(TTest.ClassName, RT.QualifiedName) > 0) then
      mmoLog.Lines.Add(RT.QualifiedName);

  T := TTest.Create();
  T.Free();
end;

// liefert:

Unit1.TTest.TStrict
Unit1.TTest.TOne
Unit1.TTest.TTwo
Unit1.TTest.TThree
Unit1.TTest.TNested.TNestedNested
Unit1.TTest.TNested
Unit1.TTest
Das Problem hierbei ist aber noch herauszufinden, welcher Teil von z.B. Unit1.TTest.TStrict ein Typ ist und welcher zur Unit gehört. Idee hierzu: den String nach und nach kürzen und via TRttiContext.FindType testen, ob der Typ gefunden wurde und ob dessen QualifiedName-Eigenschaft gleich dem übergebenen String-Parameter entspricht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat