![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство Caption у компонента. [D7]
stone © (2002-12-11 16:20:00)Как узнать есть ли у компонента свойство Caption?
var
i : integer;
C : TComponent;
begin
for i := 0 to ComponentCount-1 do
begin
C := Components[i];
- как тут узнать, есть ли у данного TComponent свойство Caption
end;
end;
Юрий Зотов (2002-12-11 18:54:00) [1]> BlackTiger (11.12.02 17:13)
Загляните в исходники модуля TypInfo - еще не то найдете. И без всяких левых библиотек.
"Левых" - это потому, что в коде ошибка (не хватает скобки). А еще потому, что проверка Comp.Name здесь совершенно не нужна. И еще потому, что стандартная функция IsPublishedProp делает то же самое - причем, для любых объектов, а не только для компонентов.
Снова велосипеды на квадратных колесах... о, боже!
> stone
RTTI дает возможность проверить только published-свойства. В Вашем случае можно сделать более общую проверку, причем очень просто. Дело в том, что свойство Caption впервые появляется в классе TControl (только оно у него protected). Поэтому проверка элементарна:
if Components[i] is TControl then ... // свойство Caption есть
А для доступа к protected-свойству можно использовать приведение класса:
type
TFriendControl = class(TControl);
...
if Components[i] is TControl then
TFriendControl(Components[i]).Caption := "Vova";
BlackTiger (2002-12-11 17:13:00) [2]Я нашел код, который проверяет наличие какого либо свойства (проверял только для Caption) в библиотеке IniLang.
Если кому надо, то вот он
function HasProperty(comp:TComponent;prop:String):boolean;
begin
result:=(getPropInfo(comp.classInfo,prop)<>nil) and comp.name<>"");
end;
Используется так
if HasProperty(Button1, "Caption") then begin
// ...
end;
stone (2002-12-11 16:52:00) [3]Спасибо, разобрался
MBo (2002-12-11 16:25:00) [4]см. модуль typinfo.pas