Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.036 c
4-1076413001
Bestden
2004-02-10 14:36
2004.04.18
Не компилится AdJustTokenPrivileges ...


14-1079972900
Обитатель
2004-03-22 19:28
2004.04.18
Что с моей виндой-2000 ?


1-1080341683
ceval
2004-03-27 01:54
2004.04.18
Подскажите как программно в RadioGroup написать название


3-1079348562
AlexLine
2004-03-15 14:02
2004.04.18
Поиск по полю memo в БД Paradox


8-1073294869
dash78
2004-01-05 12:27
2004.04.18
Автодозвон из БД