Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Определить видна ли форма


Автор: Akella 2.11.2011, 17:58
Может глупость сейчас спрошу, но я немного в недоумении.
Self.Showing возвращает True, хотя форма на экране не видна!

Как однозначно определить, видна ли форма или нет?

Автор: bems 2.11.2011, 18:18
Visible это не то часом? smile

Автор: Akella 2.11.2011, 23:50
нет, тоже возвращает True, но форма не видна, а вообще, свойство visible предназначено ведь для управления видимостью

Автор: bems 3.11.2011, 01:11
что значит не видна? закрыта другими окнами?

Автор: CROTishka 3.11.2011, 09:09
вам сюда:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx#zorder
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633527(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633519(v=vs.85).aspx


только определить 100% видны ли ваша форма из-под других невозможно, т.к. они могут быть неправильной формой, и/или прозрачными.
ещё учтите, что мониторов несколько может быть  smile 
узнать разрешение:
http://msdn.microsoft.com/en-us/library/dd144877(v=vs.85).aspx

Автор: Akella 3.11.2011, 11:12
Цитата(bems @ 3.11.2011,  01:11)
что значит не видна? закрыта другими окнами?

Не видна, значит нет её вообще на экране. Она создана, но ещё не успела отобразиться.

При создании формы некая компонента (от EhLib) восстанавливает настройки чекбоксов. На один из чекбоксов (TcxCheckEdit) повешен код на событие OnChange.
В коде выполняется открытие набора данных. Перед открытием я проверяю видимость формы, т.к. нет смысла открывать НД, у формы которая скрыта.
Короче это мелочи. Вопрос-то в другом smile

Добавлено через 10 минут и 53 секунды
Цитата(CROTishka @  3.11.2011,  09:09 Найти цитируемый пост)
только определить 100% видны ли ваша форма из-под других невозможно, 

А это и не нужно. Нужно знать, форма вообще есть на экране или нет? Пусть даже закрыта другим окном.

Автор: bems 3.11.2011, 17:11
Цитата(Akella @  3.11.2011,  11:12 Найти цитируемый пост)
Нужно знать, форма вообще есть на экране или нет?
это Visible. 
Выкладывай тестовый проект

Автор: v258 5.11.2011, 20:15
Цитата(Akella @  3.11.2011,  11:12 Найти цитируемый пост)
При создании формы некая компонента (от EhLib) восстанавливает настройки чекбоксов. На один из чекбоксов (TcxCheckEdit) повешен код на событие OnChange.В коде выполняется открытие набора данных. Перед открытием я проверяю видимость формы, т.к. нет смысла открывать НД, у формы которая скрыта.

А не проще задать Form.Visible=False перед восстановлением настроек чекбоксов, а после выставить Visible=True?

Автор: Akella 6.11.2011, 01:01
Цитата(v258 @  5.11.2011,  20:15 Найти цитируемый пост)
А не проще задать Form.Visible=False перед восстановлением настроек чекбоксов, а после выставить Visible=True? 

Обрати внимание на то, какое значение Visible форма имеет в дизайне smile

Автор: Delvish 7.11.2011, 13:53
Application.MainForm.Visible разве не дает нужный результат?

можно еще обойтись булевым флагом, установленным изначально в false, впоследствии переведенном в true при первом же изменении и проверять по нему делать открытие НД или нет

Автор: v258 7.11.2011, 14:51
Цитата(Akella @  6.11.2011,  01:01 Найти цитируемый пост)
Обрати внимание на то, какое значение Visible форма имеет в дизайне

Ну и что? Стоит задача не допустить запуска обработчика при создании формы? Вот и не допускай, не хочешь Visible формы использовать, задай свой флаг, как Delvish советует. Или восстанавливай настройки не в onCreate, а в onShow формы  smile  

Автор: Akella 7.11.2011, 15:06
Цитата(v258 @  7.11.2011,  14:51 Найти цитируемый пост)
Или восстанавливай настройки не в onCreate, а в onShow формы  

Нельзя, а вдруг получится так, что onShow сработает 2 раза.

Автор: Delvish 7.11.2011, 18:14
а в onCreate форма еще не создалась (насколько я знаю, это событие как раз "за миг" до создания формы) и там проверять Visible-свойство и не требуется. я бы решил проблему через использование флага, который однозначно позволит (не)сработать событию только 1 раз (в зависимости от потребностей)

Автор: v258 7.11.2011, 18:15
Цитата(Akella @  7.11.2011,  15:06 Найти цитируемый пост)
а вдруг получится так, что onShow сработает 2 раза.

Ну тогда только флагами  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)