Sparse Enums To String

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Bergmann89
Beiträge: 98
Registriert: Di 15. Nov 2011, 11:36

Sparse Enums To String

Beitrag von Bergmann89 »

Hey Leute,

ich suche nach einer Möglichkeit alle Werte und die entsprechenden Strings eines sparse Enums zu ermitteln. Hintergrund: Ich lese über die RTTI die published Properties einer Klasse aus und möchte dann die Typen und Werte anzeigen (ähnlich wie das der ObjectInspector auch macht). Bei sparse Enums hab ich aber das Problem das GetEnumName nicht funktioniert. Ich dachte mir vlt kann man die Implementierung von ReadStr und WriteStr irgendwie dafür nutzen. Also hab ich mich auf die Suche danach gemacht. Ich find aber keine Source-Files für die beiden Methoden. Weiß jmd wo ich mir die mal ansehen kann, oder hat vlt eine andere Lösung für mein Problem?

MfG Bergmann.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Sparse Enums To String

Beitrag von Michl »

Evtl. hilft das dir weiter? Allgemein geht es leider nicht, da für ein Sparse Enum kein TypeInfo() anwendbar ist:

Code: Alles auswählen

program Project1;
 
type
  TSparseEnum = (a = 1, b = 4, c = 9);
 
function GetSparseEnumName(SparseEnum: TSparseEnum): String;
begin
  WriteStr(Result, SparseEnum);
end;
 
var
  aSparseEnum: TSparseEnum; 
begin
  aSparseEnum := b;
  WriteLn(GetSparseEnumName(aSparseEnum), ' is ', Ord(aSparseEnum));
end

[Edit]
Bergmann89 hat geschrieben:Ich dachte mir vlt kann man die Implementierung von ReadStr und WriteStr irgendwie dafür nutzen. Also hab ich mich auf die Suche danach gemacht. Ich find aber keine Source-Files für die beiden Methoden.
Da es eine Compiler-Routine ist, wird es vermutlich nichts helfen. Ausgewertet wird WriteStr (Compiler-Internal-Function: in_writestr_x) in pexpr.pas.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Bergmann89
Beiträge: 98
Registriert: Di 15. Nov 2011, 11:36

Re: Sparse Enums To String

Beitrag von Bergmann89 »

Hey,

ich muss das Thema nochmal ausgraben. Die Lösung von Michl geht so leider nicht, da ich ja nur die TypeInfo von meinem Enum habe, aber nicht das Enum selbst. Ich suche also eine Möglichkeit die korrekten String <> Integer Werte für ein Sparse Enum mit Hilfe seiner TypeInfo zu ermitteln.

MfG Bergmann

Antworten