Вниз
Скачать: CL | DM;

Получить значение заданных полей через RTTI   Найти похожие ветки 

 
pasha_golub ©   (2007-05-22 15:11) [0]

Имеем код:


function Enum(AObject: TObject; APropName: string; ASubPropName: string = ""): string;
var
 I: Integer;
 FList: PPropList;
 FCount, FSize: Integer;
begin
 //FList := nil;
 if AObject = nil then Exit;
 if APropName = "" then Exit;
 if AObject.ClassInfo <> nil then
 begin
   FCount := GetPropList(AObject.ClassInfo, tkProperties, nil);
   FSize := FCount * SizeOf(Pointer);
   GetMem(FList, FSize);
   try
     GetPropList(AObject.ClassInfo, tkProperties, FList);
     if FCount > 0 then
       for I := 0 to FCount - 1 do
         If FList^[I].Name = APropName then
          begin
           case FList^[I].PropType^.Kind of
             tkString, tkLString, tkWString, tkInteger, tkChar, tkFloat:
               If ASubPropName = "" then
                 Result := VarAsType(GetPropValue(AObject, FList^[I].Name), varString);
             tkClass:
               Result := Enum(GetObjectProp(AObject, FList^[I].Name),ASubPropName);
           end;
           Break;
          end;

   finally
     FreeMem(FList);
   end;
 end;
end;


Задача, например, получить значения свойств Memo1: TMemo :


Memo2.Lines.Text := Enum(Memo1,"Name",""); //в случае простого поля - работает
Memo2.Lines.Text := Enum(Memo1,"Lines","Text"); //в случае непростого поля - не работает
Memo2.Lines.Text := Enum(Memo1,"Font","Name"); //в случае непростого поля - работает



В чем разница между TFont & TStrings? Не могу понять.


 
pasha_golub ©   (2007-05-22 15:17) [1]

Неужели в том, что она public? :)


 
pasha_golub ©   (2007-05-22 15:27) [2]

Таки да... Lines не имеет published свойств посему для нее такой путь не приемлем.

Можно закрывать. Всем спасибо



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
2-1183654535
Romm
2007-07-05 20:55
2007.07.29
Из страницы в приложение


15-1183125482
Piter
2007-06-29 17:58
2007.07.29
Регулярные выражения


15-1183313519
BaryVetaL
2007-07-01 22:11
2007.07.29
Аналоги 1С


11-1163403161
Kirill
2006-11-13 10:32
2007.07.29
Недоступный сервер MsSQL и KolEdb


15-1183358273
Бакук
2007-07-02 10:37
2007.07.29
Кросс-таблицы, Pivot




   Наверх