Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: 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 вся ветка

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
15-1183132718
ProgRAMmer Dimonych
2007-06-29 19:58
2007.07.29
Ещё один вопрос, призывающий к межклассовой борьбе


3-1177250760
Антон Шестаков
2007-04-22 18:06
2007.07.29
Удаление из таблиц


15-1182924454
NailMan
2007-06-27 10:07
2007.07.29
Время наработки на отказ?


15-1183440362
de.
2007-07-03 09:26
2007.07.29
Функция SQL


15-1183128555
TIF
2007-06-29 18:49
2007.07.29
Регистрация программы