Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TList generische Liste Fehler beim deklarieren RTTI (https://www.delphipraxis.net/162188-tlist-generische-liste-fehler-beim-deklarieren-rtti.html)

H3llsing 12. Aug 2011 16:43

AW: TList generische Liste Fehler beim deklarieren RTTI
 
hmm warum meckert eigentlich die Umgebung bei

Delphi-Quellcode:
var
  Zuordnung: TZuordnung;
begin
  Zuordnung := TZuordnung.Create('ALSO');
  FListe.Add(Zuordnung);

  JvComboBox_zuordnung.Clear;
  JvComboBox_zuordnung.Items.Add(Fliste.Items[0].zuordnungsname); // zuordnungsname ist nicht deklarierter bezeichner
end;
Aber funktionieren tuts trotzdem!

DeddyH 12. Aug 2011 16:48

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Und wenn Du das Items weglässt?
Delphi-Quellcode:
FListe[0].Zuordnungsname
Ansonsten einfach ignorieren, das wird wohl mal wieder Error Insight sein. Evtl. ist der Effekt weg, wenn Du das Projekt anschließend schließt und neu öffnest.

Stevie 12. Aug 2011 16:56

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von H3llsing (Beitrag 1116481)
hmm warum meckert eigentlich die Umgebung bei

Delphi-Quellcode:
var
  Zuordnung: TZuordnung;
begin
  Zuordnung := TZuordnung.Create('ALSO');
  FListe.Add(Zuordnung);

  JvComboBox_zuordnung.Clear;
  JvComboBox_zuordnung.Items.Add(Fliste.Items[0].zuordnungsname); // zuordnungsname ist nicht deklarierter bezeichner
end;
Aber funktionieren tuts trotzdem!

Error Insight hat arge Probleme, was Generics angeht und unterkringelt da allerhand Blödsinn. Einfach ignorieren (oder wie ich ausschalten).

H3llsing 15. Aug 2011 10:03

AW: TList generische Liste Fehler beim deklarieren
 
Ein Problem hab ich nun noch mit der klasse.
Wie bekomme ich denn so wie beim Array mit RTTI alle Feldnamen?
Also bei meiner Klasse die ganzen Properties?

Zitat:

Zitat von Stevie (Beitrag 1116258)
Ja, mit RTTI:
Delphi-Quellcode:
uses
  Rtti, TypInfo;

procedure PrintStuff(const Item: TMyRecord);
var
  ctx: TRttiContext;
  t: TRttiType;
  f: TRttiField;
  p: TRttiProperty;
begin
  t := ctx.GetType(TypeInfo(TMyRecord));
  if Assigned(t) then
  begin
    for f in t.GetFields do
    begin
      if f.Visibility in [mvPublic..mvPublished] then
        Writeln(f.Name + ' = ' + f.GetValue(@Item).ToString);
    end;

    for p in t.GetProperties do
    begin
      if p.Visibility in [mvPublic..mvPublished] then
        Writeln(p.Name + ' = ' + p.GetValue(@Item).ToString);
    end;
  end;
end;

Also welchen Pointer gibt man bei
Delphi-Quellcode:
p.GetValue(@Item).ToString
an ?

mit p.name komm ich zwar an die Propertienamen, jedoch nich an den Wert.
nagut p.name tuts auch schon =)

DeddyH 15. Aug 2011 10:26

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Es steht ja beinahe schon da. Trotzdem hier noch ein Beispiel mit einer Klasse statt eines Records (Code von Stevie weitestgehend übernommen, ein Button und ein Memo auf dem Formular):
Delphi-Quellcode:
uses RTTI, TypInfo;

type
  TTestClass = class
  private
    FSomeString: string;
    FSomeInteger: integer;
    FSomeDouble: double;
  public
    property SomeString: string read FSomeString write FSomeString;
    property SomeInteger: integer read FSomeInteger write FSomeInteger;
    property SomeDouble: double read FSomeDouble write FSomeDouble;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Test: TTestClass;
  ctx: TRttiContext;
  t: TRttiType;
  p: TRttiProperty;
begin
  Test := TTestClass.Create;
  try
    Test.SomeString := 'Hallo Welt';
    Test.SomeInteger := 42;
    Test.SomeDouble := Pi;
    t := ctx.GetType(TypeInfo(TTestClass));
    if Assigned(t) then
      for p in t.GetProperties do
        begin
          if p.Visibility in [mvPublic..mvPublished] then
            Memo1.Lines.Add(p.Name + ' = ' + p.GetValue(Test).ToString);
        end;
  finally
    Test.Free;
  end;
end;

H3llsing 15. Aug 2011 10:32

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Vielen dank,
ich hab die klammern falsch gesetzt :(
Delphi-Quellcode:
p.GetValue(Tzuordnung.ToString)

DeddyH 15. Aug 2011 10:34

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Ist das eine class property? Sonst wäre TZuordnung vermutlich falsch, sondern es muss Zuordnung heißen, der Wert steht ja in der Eigenschaft der Instanz und nicht der Klasse.

H3llsing 15. Aug 2011 10:40

AW: TList generische Liste Fehler beim deklarieren RTTI
 
nein ist keine Klassen-Property also Instanz.
Aber das ganze ist eine Procedure der Klasse Tzuordnung und ich möchte auf die momentane Instanz zugreifen.

mit Tzuordnung krachts beim 2ten durchlauf und bei Zuordnung sagt er undefinierter bezeichner

Hier die Procedure
Sie fügt die bereits gesetzten Verbidungen aus der DB in die Tvs als Unterknoten ein.
Delphi-Quellcode:
procedure TZuordnung.ladeVerbindungen(TV_ZO,TV_DB:ttreeview);
var
  MyIterator : TStringDivideIterator;
  i: Integer;
  ctx: TRttiContext;
  t: TRttiType;
  f: TRttiField;
  p: TRttiProperty;
  ParentNode : Ttreenode;
  CNode : Ttreenode;

  ndx     :integer;
begin
  ndx := 0;
  ParentNode := TV_DB.Items.GetFirstNode;
  t := ctx.GetType(TypeInfo(Tzuordnung));
  if Assigned(t) then
  begin
    for p in t.GetProperties do
    begin
      if p.Visibility in [mvPublic..mvPublished] then
      begin
        MyIterator := TStringDivideIterator.Create;
        try
          MyIterator.Pattern := ';';
          MyIterator.Text := p.GetValue(Tzuordnung).ToString;

          While MyIterator.MoveNext do
          begin
            if(ndx > 3)then
            begin
              CNode := TV_DB.Items.AddChildObject(ParentNode,MyIterator.CurrentStr,nil);
              CNode.ImageIndex   := -1;
              CNode.SelectedIndex := -1;
              //hier noch andern baum adden
              for i:=0 to TV_ZO.items.count-1 do
              if TV_ZO.Items.Item[i].Text=MyIterator.CurrentStr then
              begin
                CNode := TV_ZO.Items.AddChildObject(TV_ZO.Items.Item[i],ParentNode.Text,nil);
                CNode.ImageIndex:=-1;
                CNode.SelectedIndex := -1;
                CNode.Parent.ImageIndex := 1;
              end;

              ParentNode.ImageIndex := 1;
              ParentNode.SelectedIndex := 2;
            end;
          end;
          if(ndx > 3)then
          ParentNode := ParentNode.getNextSibling;

        finally
          MyIterator.Free;
        end;
        inc(ndx);
      end;
    end;
  end;
  TV_ZO.FullExpand;
  TV_db.FullExpand;
end;

DeddyH 15. Aug 2011 10:47

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Hast Du es mal mit self versucht?

H3llsing 15. Aug 2011 10:52

AW: TList generische Liste Fehler beim deklarieren RTTI
 
:wall:
ja danke.. ich glaub es ist manchmal besser wenn man sich nur auf 1 Projekt konzentriert.
Dann versucht mans nicht mit THIS und wundert sich warums nich geht in delphi ;D


Vielen Dank nochmal an euch beide! Habt mir sehr geholfen mit dem Umgang von Klassen in Delphi!
Das zeigt wiedermal was für nette Comunity das hier doch ist =D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
Seite 3 von 4     123 4      

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 by Thomas Breitkreuz