Текущий архив: 2004.04.18;
Скачать: CL | DM;
ВнизКак скрыть все визуальные компоненты в зависимости от параметра ? Найти похожие ветки
← →
ORMADA © (2004-03-31 09:39) [0]Не пойму чё-то как написать универсальный код который будет скрывать все ВИЗУЛЬНЫЕ компонеты
сейчас это делаю так что есть не совсем верно так как при добавлении нового типа компонентов надо лезть сюда и править ?
Пример:
For i := 0 To ComponentCount - 1 Do
If Components[ i ].Tag = -1 Then
If Components[ i ] Is TMenuItem Then TMenuItem(Components[ i ]).Visible := ParamCount > 0
Else
If Components[ i ] Is TPanel Then TPanel(Components[ i ]).Visible := ParamCount > 0
и .т.д.
Как узнать что компонент ВИЗУЛЬНОГО класса ?
← →
Serge © (2004-03-31 09:42) [1]Проверять объекты на наличие свойства Visible
← →
ORMADA © (2004-03-31 09:43) [2]2 Serge
как ????
← →
Serge © (2004-03-31 09:45) [3]Я делал так, мобыть мастера покажут что-то оптимальнее и правильнее.
p : pointer;
...
p := TypInfo.GetPropInfo(TWinControl(Sender).Controls[i].ClassInfo, "Visible");
If (p <> Nil) Then TypInfo.SetOrdProp(TWinControl(Sender).Controls[i], p, longint(state));
...
← →
Sun bittern © (2004-03-31 09:45) [4]If Components[ i ] Is TPanel
на
If Components[ i ] Is TControl, TWinControl
← →
ЮЮ © (2004-03-31 09:46) [5]Для всех наследников TControl достаточно одной строчки
If Components[i] Is TСontrol Then TСontrol(Components[i]).Visible := ParamCount > 0
ну для TMenuItem (и ему подобным) придётся оставить свои проверки
← →
Serge © (2004-03-31 09:47) [6]state (boolean) u menia bil parametrom functzii
← →
ORMADA © (2004-03-31 09:48) [7]:))))))) ПАСИБА
← →
Sun bittern © (2004-03-31 09:49) [8]Любимая RTTI :)
В uses TypInfo;
// Если некое свойство у некого объекта
Function HasProperty(AComponent: TObject; APropertyName: String): Boolean;
var PropInfo: PPropInfo;
Begin
PropInfo := GetPropInfo(AComponent.ClassInfo, APropertyName);
Result := PropInfo <> Nil;
End;
← →
ORMADA © (2004-03-31 10:01) [9]Sun bittern © а отключать потом визибл как ?
← →
Sun bittern © (2004-03-31 10:07) [10]Также из технологии RTTI
SetPropValue(объект, имя свойства, значение);
← →
ORMADA © (2004-03-31 10:09) [11]2 Sun bittern © Рулёз СПАСИБА :)
← →
Mike_Goblin © (2004-03-31 10:34) [12]Использовать наличие свойства Visible как критерий принадлежности компонента к визуальным, это простое, удобное и неправильное решение данной проблемы. (Пример из VCL: класс TField, пример из жизни: никто не мешает мне написать наследника TComponent и объявить там свойство Visible).
Кусок из хелпа:
The TControl branch consists of components that descend from TControl but not TWinControl (TWidgetControl in CLX applications). Classes in this branch are controls: visual objects that the user can see and manipulate at runtime.
Придерживаясь данного определения: визуальный компонент - это наследник TControl.
← →
Sun bittern © (2004-03-31 11:04) [13]Mike_Goblin © (31.03.04 10:34) [12]
Да удобно, но с граблями (упустил из виду).
Надежнее отслеживать TControl.
Так же нет гарантии что в
Sun bittern © (31.03.04 09:49) [8]
Visible действительно типа Boolean - еще одна грабля
← →
Sun bittern © (2004-03-31 11:26) [14]Mike_Goblin ©
посмотрел ветку еще раз
ЮЮ © (31.03.04 09:46) [5] - TMenuItem (Невизуальный)
С RTTI похоже удобней (но надо быть внимательней) и не попасть в сиуацию Mike_Goblin © (31.03.04 10:34) [12], особенно если Visible может оказаться не Boolean - это если разработчик уверен на 100%, что он не будет использовать классы с такими property в своем проекте. Так что похоже на свой страх и риск.
Страницы: 1 вся ветка
Текущий архив: 2004.04.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.032 c