![]() |
Advanced RTTI und Set's
Moinmoin,
ich hoffe mal, mir kann jemand helfen :) Ich habe verschiedene Set's, die ich via RTTI aufdrösel: Beispiel SET:
Delphi-Quellcode:
Aufgedröselt wird das ganze in eine kleine Zeigerkette:
TMyEnum = (meElement1,meElement2,meElement3,meElement4);
TMySet = Set of TMyEnum;
Delphi-Quellcode:
Was grob sowas ergibt:
PMYTYPE = ^TMYTYPE;
TMYTYPE = Record Display : String; //Bezeichnung Value : TValue; //Wert : : FirstChild : PMYTYPE; Next : PMyType; end; MySetType | -- Element1 : boolean -- Element2 : boolean; : Soweit funktioniert das ganze auch wunderbar. Problem ist nun, wenn ein Element auf True oder False gesetzt wird (bei den Aufgedröselten) muss das entsprechende Element auch im Set gesetzt bzw. gelöscht werden. Da ich den konkreten Type des Sets bzw. Enums nicht hab, muss ich das ganze auch wieder über die RTTI machen, allerdings fehlt mir hier grad ein wenig der Ansatz, wie ich das machen muss. Weiß hier jemand Rat ? |
AW: Advanced RTTI und Set's
Gelöst:
Zuerst aus den gesetzten Teilen einen String im Format '[Wertname1,Wertname2]'.
Delphi-Quellcode:
Wichtig dabei ist das TValue.Make, ansonsten wird nämlich der Typ von TValue auf tkInteger gesetzt und auch als Integer behandelt, statt als Set :)
function SetStrToValue(SetTypeName:string;value:string):TValue;
var ctx : TRttiContext; t : TRttiType; begin t := ctx.FindType(SetTypeName); if (t <> NIL) then result := TValue.Make(StringToSet(t.handle,value),t.handle,result) else Raise Exception.create('Settype not found !'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:43 Uhr. |
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