Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 11. Aug 2011 11:46


TList generische Liste Fehler beim deklarieren RTTI
 
Moin zusammen,

ich komm einfach nich drauf was ich falsch mache.

Hintergrund: ich habe ein Array of Record, dieses möchte ich gern in einer procedure durchlaufen also

myRec[0].eigenschaft1
myRec[0].eigenschaft2
...

Nun bin ich durch längere Suche auf die generischen Tlist gestoßen.

Allerdings bekomm ich einen Compilerfehler :/

Delphi-Quellcode:
uses Classes;
...
type
  TZuordnung = record
  Zuorndungsname     :string;
  trennzeichen       :string;
  Zuordnungsdatei    :string;
  distributor        :string;
  ...
end;
type Tar_Zuordnung = array of Tzuordnung;
type TlstZuordnung = Tlist<TZuordnung>; //compiler wirft Fehler raus: "undeklarierter Bezeichner 'Tlist' '1' in Zeile..."

end;
Was mach ich also falsch ?!

verwende Delphi2010

VIELEN dank ;) hab ich bei der suche nirgens gefunden =)

Ralf Kaiser 11. Aug 2011 11:49

AW: TList generische Liste Fehler beim deklarieren
 
Zitat:

Zitat von H3llsing (Beitrag 1116216)
Delphi-Quellcode:
uses Classes;
...
Was mach ich also falsch ?!

verwende Delphi2010

Das hier:

Delphi-Quellcode:
uses
Generics.Collections, Generics.Defaults;

Stevie 11. Aug 2011 12:12

AW: TList generische Liste Fehler beim deklarieren
 
Wenn du eh schon ein array hast, warum das nicht an die Prozedur übergeben?

H3llsing 11. Aug 2011 12:45

AW: TList generische Liste Fehler beim deklarieren
 
ich frage mich grade ob das überhaupt möglich ist mit der Tlist was ich vorhabe.

Zitat:

Hintergrund: ich habe ein Array of Record, dieses möchte ich gern in einer procedure durchlaufen also

myRec[0].eigenschaft1
myRec[0].eigenschaft2
kann ich mir alle eigenschaften von myRec[0] anzeigen lassen ?

sowas in der art:
Delphi-Quellcode:
//PSEUDO-Code
for i:=0 to myRec[0].countPropertys -1 do
property := Myrec[0][i]; // gibt eigenschaft 1 dann 2 dann 3 etc aus
ist das mit dem Array oder mit der Tlist erreichbar ?

Stevie 11. Aug 2011 13:56

AW: TList generische Liste Fehler beim deklarieren
 
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;

H3llsing 11. Aug 2011 14:18

AW: TList generische Liste Fehler beim deklarieren
 
Vielen Dank @Stevie

Genau sowas habe ich Gesucht!
Funktioniert einwandfrei =)

shmia 11. Aug 2011 15:44

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Wieso macht du eigentlich aus TZuordnung keine Klasse?
Du hast ja wahrscheinlich Prozeduren/Funktionen, die mit den Inhalten von TZuordnung arbeiten.
Grundlage von OOP ist ja, dass Daten und Programmcode der mit diesen Daten arbeitet zu einem "Paket" zusammengeschnürt werden und das ist eben eine Klasse.

Uwe Raabe 11. Aug 2011 23:17

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von shmia (Beitrag 1116286)
Wieso macht du eigentlich aus TZuordnung keine Klasse?
Du hast ja wahrscheinlich Prozeduren/Funktionen, die mit den Inhalten von TZuordnung arbeiten.
Grundlage von OOP ist ja, dass Daten und Programmcode der mit diesen Daten arbeitet zu einem "Paket" zusammengeschnürt werden und das ist eben eine Klasse.

Das geht in vielen Fällen genausogut mit Records und man spart sich das Erzeugen und Freigeben. Ich glaube allerdings noch nicht mit Delphi 5...

H3llsing 12. Aug 2011 08:19

AW: TList generische Liste Fehler beim deklarieren RTTI
 
OOP ist mir schon geläufig aber genau wie Uwe es schon gesagt hat, geht es in meinem Fall nur mit dem Record besser =)

shmia 12. Aug 2011 09:33

AW: TList generische Liste Fehler beim deklarieren RTTI
 
Zitat:

Zitat von H3llsing (Beitrag 1116363)
...geht es in meinem Fall nur mit dem Record besser =)

Bist du sicher?
Die drei Punkte in deinem Record deuten ja an, dass es dort noch mehr Daten gibt.
Bei sehr kleinen Records, z.B. nur x,y,z-Koordinaten, hat ein Record absolut seine Berechtigung.
Wenn es aber mehr Daten werden, dann muss es zwangläufig auch mehr Code geben, der mit den Daten arbeitet.
Das verlangt dann nach einer Klasse.
Ich muss nur immer wieder feststellen dass selbst altgediente Hasen manchmal nicht beweglich genug sind vom Record auf eine Klasse zu wechseln.
Sehr häufig wird auch der Fehler begangen, dass der Record quasi identisch ist mit der Struktur, mit der Daten geladen & gespeichert werden.
Damit wird aber die Veränderung der Software stark behindert.
Bei einer Klasse gäbe es dagegen die Methoden LoadFromStream() und SaveToStream().
So kann die interne Repräsentation der Daten effektiv von der externen Repräsentaion auf einem Speichermedium entkoppelt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
Seite 1 von 4  1 23     Letzte »    

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