Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Как скрыть все визуальные компоненты в зависимости от параметра ?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.032 c
1-1080828860
Franzy
2004-04-01 18:14
2004.04.18
Прерывание работы цикла по тпользователя


14-1080219114
Layner
2004-03-25 15:51
2004.04.18
На работе у нас дурдом! (Отдел ИТ крупной компании)


3-1079678927
Dark Man
2004-03-19 09:48
2004.04.18
SQL Server 2000 with Delphi


3-1080155965
John Doe
2004-03-24 22:19
2004.04.18
Русские буквы


14-1079637216
RealRascal
2004-03-18 22:13
2004.04.18
Опять про моргание мониторов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский