![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет!!!
Столкнулся с такой проблемой, нужно получить свойства объекта. Смысл в том что на форме располагаются объекты (какие не известно создаются в RUN TIME ) и при нажатии на них нужно получить их свойства Name,caption,font,итд (ну в общем инспектор объектов). я делаю так StringGrid1.Cells[1,0]:=Tcontrol(FindComponent(name)).Name; для name это работает StringGrid1.Cells[1,4]:=IntToStr(Tcontrol(FindComponent(name)).left); это работает для left, top итд, а как получить caption, color, font??? помогите пожалуйста |
|
#2
|
||||
|
||||
|
Вот это работает нормально:
Код:
ShowMessage((
TCustomLabel(FindComponent('Label1')).Caption
));посмотри на этот код внимательно, и еще, почитай про свойство Caption объекта TControl в справке, сразу скажу что слово Protected там не спроста ![]() |
|
#3
|
||||
|
||||
|
Есть модуль TypInfo. В нем куча процедур и функций по определению свойств компонентов. Вот пример какой-то у себя нашёл:
Код:
procedure ListProperties(AInstance: TPersistent; AList: TStrings);
var
i: integer;
pInfo: PTypeInfo;
pType: PTypeData;
propList: PPropList;
propCnt: integer;
tmpStr: string;
begin
pInfo := AInstance.ClassInfo;
if (pInfo = nil) or (pInfo^.Kind <> tkClass) then
raise Exception.Create('Invalid type information');
pType := GetTypeData(pInfo); {Pointer to TTypeData}
AList.Add('Class name: ' + pInfo^.Name);
{If any properties, add them to the list}
propCnt := pType^.PropCount;
if propCnt > 0 then
begin
AList.Add(EmptyStr);
tmpStr := IntToStr(propCnt) + ' Propert';
if propCnt > 1 then
tmpStr := tmpStr + 'ies'
else
tmpStr := tmpStr + 'y';
AList.Add(tmpStr);
FillChar(tmpStr[1], Length(tmpStr), '-');
AList.Add(tmpStr);
{Get memory for the property list}
GetMem(propList, sizeOf(PPropInfo) * propCnt);
try
{Fill in the property list}
GetPropInfos(pInfo, propList);
{Fill in info for each property}
for i := 0 to propCnt - 1 do
AList.Add(propList[i].Name + ': ' + propList[i].PropType^.Name);
finally
FreeMem(propList, sizeOf(PPropInfo) * propCnt);
end;
end;
end; |