Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: RTTI: GetPropValue(TTimeSpan)

  Alt 27. Jun 2019, 11:40
Guten Tag,

ich habe gerade das Problem, dass ich in TypInfo/RTTI den Wert von einer TTimeSpan so holen muesste
Delphi-Quellcode:
function RetrieveValue(AConcreteItem: TPersistent; APropIndex: Integer): Variant;
var
  LPropCount: Integer;
  LPropList: PPropList;
  LType: TClass;
begin
  LType := AConcreteItem.ClassType;
  LPropCount := GetTypeData(LType.ClassInfo)^.PropCount;
  GetMem(LPropList, LPropCount * SizeOf(Pointer));
  GetPropInfos(LType.ClassInfo, LPropList);
  if LPropList[APropIndex].PropType^.Name = 'TTimeSpanthen
    Result := GetStrProp(AConcreteItem, LPropList[APropIndex]) // <<-- Result = ''
  else
    Result := GetPropValue(AConcreteItem, LPropList[APropIndex], False);
end;
So geht das natuerlich nicht. TTimeSpan ist ein Record, darauf ist GetPropValue nicht vorbereitet.
Ich muesste eigentlich eine Ebene tiefer in GetPropValue einen cast String(TTimeSpan) durchfuehren, dann waere alles OK.

Wie kann ich das elegant beheben?
Sie Dir mal in System.Typinfo.pas den Typ TPropSet<T> an (ich hoffe Seattle hatte den schon). Leider ist er nur innerhalb der Implementierung der Unit sichtbar, aber wie er GetProc implementiert sollte Dir ein paar Hinweise auf eine mögliche Lösung für dein Problem geben.
Peter Below
  Mit Zitat antworten Zitat