-
Есть некоторый объект TBase, в котором описан тип Type TFigure = (Rect,Elipse,RoundRect); published property TypeFigure : TFigure read fTypeFigure write SetTypeFigure ; Теперь я хочу прочитать это свойство и занести в ValueListEditor, это я делаю. Но мне нужно еще прочитать и значения типа TFigure и занести их в выпадающий список. Помогите как это сделать.
Type TFigure = (Rect,Elipse,RoundRect);
published
property TypeFigure : TFigure read fTypeFigure write SetTypeFigure ;
---------------------------------------------------------------------------------------------------------
Procedure TfMain.WriteVLE(VLE : TValueListEditor; NumObjList : Integer);
Var
I,J,N,Z,M: Integer; TypeData,D : PTypeData; List,L : PPropList; Obj : TBase; Key,Value : String; Ti : PTypeInfo;
Begin Obj:=TBase(fEdit.List[NumObjList]); TypeData := GetTypeData(Obj.ClassInfo); N := TypeData.PropCount;
If N < 0 then Exit;
GetMem(List,SizeOf(PPropInfo)*N);
try
GetPropInfos(Obj.ClassInfo,List);
For I:=0 to N-1 do
Begin
Key := List[i]^.Name;
Case List[I].PropType^.Kind of
tkInteger :
Begin
Value:= IntToStr(GetOrdProp(Obj,List[i]));
VLE.InsertRow(Key,Value,True);
End;
tkEnumeration : Begin
Value:= IntToStr(GetOrdProp(Obj,List[i]));
VLE.InsertRow(Key,Value,True); VLE.ItemProps[VLE.RowCount-2].EditStyle:=esPickList;
VLE.ItemProps[VLE.RowCount-2].PickList.Add('1');
VLE.ItemProps[VLE.RowCount-2].PickList.Add('2');
End;
End; End;
finally
FreeMem(List,SizeOf(PPropInfo)*N);
end;
End;
-
Плохо отформатировано, так лучше: Type TFigure = (Rect,Elipse,RoundRect); published property TypeFigure:TFigure
read fTypeFigure write SetTypeFigure ; ------------------------------------
Procedure TfMain.WriteVLE(VLE : TValueListEditor; NumObjList : Integer); Var I,J
,N,Z,M: Integer; TypeData,D : PTypeData; List,L:PPropList;Obj:TBase;Key, Value :
String;Ti: PTypeInfo; Begin Obj:= TBase (fEdit.List[ NumObjList]); TypeData :=
GetTypeData(Obj.ClassInfo); N:=TypeData.PropCount; If N<0 then Exit; GetMem(List
,SizeOf( PPropInfo)* N); try GetPropInfos(Obj.ClassInfo,List);For I:=0 to N-1 do
Begin Key := List[i]^.Name; Case List[I].PropType^.Kind of tkInteger: Begin Value :=
IntToStr(GetOrdProp(Obj,List[i])); VLE.InsertRow(Key,Value,True); End;
tkEnumeration : Begin Value:= IntToStr(GetOrdProp(Obj,List[i])); VLE.InsertRow (
Key,Value,True);
VLE.ItemProps[VLE.RowCount-2].EditStyle:=esPickList;
VLE.ItemProps[VLE.RowCount-2].PickList.Add('1'); VLE.ItemProps[VLE.RowCount-2 ].
PickList.Add('2'); End; End; End; finally FreeMem(List,SizeOf(PPropInfo)*N); end;
End;
|