Главная страница
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.024 c
14-1079953463
Style
2004-03-22 14:04
2004.04.18
У нас на сайте парнишка придумал такую вещь


14-1078404328
Fredericco
2004-03-04 15:45
2004.04.18
МКР. Mastak Kirovograd Party.


6-1076854734
Vladimir Bolotin
2004-02-15 17:18
2004.04.18
Работа с открытими спамерскими базами (типа ORDB)


1-1080718517
}|{yk
2004-03-31 11:35
2004.04.18
Скопировать диапазон значений в Excel


4-1076139499
}{enon
2004-02-07 10:38
2004.04.18
Как найти обновляемый регон?