Hallo,
ich versuche einen set-typ anhand eines strings zu setzen...hier mal ein bisschen code:
Delphi-Quellcode:
function GetSetValue(setInfo:pTypeInfo;valueStr:string):Integer;
var ti:pTypeInfo;
td:pTypedata;
s:string;
p:integer;
begin
result:=0;
ti:=nil;
if assigned(setInfo) then
begin
td:=GetTypeData(setinfo);
if assigned(td) then ti:=td.CompType^;
if assigned(ti) then
begin
s:=copy(valueStr,2,length(ValueStr)-2);
p:=pos(',',s);
while p>0 do
begin
inc(result,getEnumValue(ti,copy(s,1,p-1)));
delete(s,1,p);
p:=pos(',',s);
end;
inc(result,getEnumValue(ti,copy(s,1,length(s))));
end;
end;
end;
procedure TForm_DFMMain.Button1Click(Sender: TObject);
var ti:pTypeInfo;
pi:pPropInfo;
val:integer;
begin
ti:=FindTypeInfo(edit1.text);
if ti.Kind=tkSet then
begin
val:=getsetValue(ti,edit2.text);
showmessage(intToStr(val));
ti:=findTypeInfo('TFont');
pi:=getPropInfo(ti,'Style');
if assigned(pi) then
setOrdProp(button1,pi,val);
end;
end;
das Problem besteht in der setOrdProp, die mir eine Zugriffsverletzung an den Kopf wirft, ich weis nur nicht warum.
Die FindTypeInfo-Funktion ist von Hagen Reddmann siehe
hier
meine test-werte:
Delphi-Quellcode:
edit1.text:='TFontStyles';
edit2.text:='[fsBold,fsItalic,fsUnderline]';
Weis jemand eine Lösung?
Gruß Frank