Mega Code Archive

 
Categories / Delphi / Examples
 

Lightweight Object Browser

Title: Lightweight Object Browser Question: How to display object properties in a string grid Answer: procedure ObjectToStringGrid(obj:TObject; sg:TStringGrid); var prop_count: Integer; // Anzahl der published properties PropInfos: PPropList; i: Integer; Value : Variant; PropTypeName : string; method : TMethod; begin Assert(Assigned(sg)); Assert(Assigned(obj)); sg.ColCount := 3; sg.FixedCols := 1; sg.FixedRows := 1; sg.Cells[0, 0] := 'Property'; sg.Cells[1, 0] := 'Value'; sg.Cells[2, 0] := 'Prop Type'; // tkAny // tkProperties prop_count := GetPropList(obj.ClassInfo, tkAny, nil); sg.RowCount := prop_count + 1; GetMem(PropInfos, prop_count * SizeOf(PPropInfo)); try GetPropList(obj.ClassInfo, tkProperties, PropInfos); for i := 0 to prop_count - 1 do begin sg.Cells[0, i+1] := PropInfos^[i].Name; PropTypeName := PropInfos^[i].PropType^.Name; Value := GetPropValue(obj, PropInfos^[i].Name, True); if PropInfos^[i].PropType^.Kind = tkMethod then begin method := GetMethodProp(obj, PropInfos^[i].Name); if Assigned(method.Code) then sg.Cells[1, i+1] := TObject(method.Data).ClassName+ '.'+ TObject(method.Data).MethodName(method.Code) else sg.Cells[1, i+1] := 'nil'; end else if PropTypeName = 'TDateTime' then sg.Cells[1, i+1] := DateTimeToStr(Value) else sg.Cells[1, i+1] := string(Value); sg.Cells[2, i+1] := PropTypeName; if not IsStoredProp(obj, PropInfos^[i]) then sg.Cells[2, i+1] := sg.Cells[2, i+1]+': not stored'; end; finally FreeMem(PropInfos); end; end; Please report your suggestions to a_j_schmidt@rocketmail.com