Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить значение заданных полей через RTTI [D7]


pasha_golub ©   (2007-05-22 15:11:00) 

Имеем код:


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:27:00) [1]

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

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


pasha_golub   (2007-05-22 15:17:00) [2]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо