|
|
Регистрация | << Правила форума >> | 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
Есть модуль 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; |