![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить значение заданных полей через 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? :)