Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Модальное окно прячется под немодальным   Найти похожие ветки 

 
Циркуль   (2011-03-30 18:07) [0]

Dephi7,  Win7x64
Воспроизводится только на Win7, а из разработчиков Win7 стоит только у меня, поэтому мне этот баг и достался. :)

Есть форма. Не модальная, не "topmost". Назовем ее "главная форма" (ГФ).
Из нее открывается другая форма, тоже не модальная не "topmost". Назовем ее "вторая форма" (Ф2).
Между этими двумя формами можно свободно переключаться. Порядок форм (ZOrder) в этот момент:

1) Ф2  (на самом верху)
2) ГФ  (скрыта под Ф2)

На второй форме жмем кнопку "сохранить что-то там...", вызывается TSaveDialog.Execute, открывается окно диалога. Назовем его "окно диалога" (ОД). Окно, естесственно модальное. Порядок форм в этот момент:

1) ОД
2) Ф2
3) ГФ

Пока все замечательно. Но если теперь в окне диалога попытаться войти в папку, на которую нет прав даже на чтение, диалог показывает окно с сообщением об ошибке: "Сетевая ошибка. Виндовс не может получить доступ к <путь>". Назовем его "окно с сообщением" (ОСС). Это окно модально по отношению к окну диалога. Но порядок форм в этот момент оказывается такой:

1) ГФ
2) Ф2
3) ОСС
4) ОД

Т.е. сообщение об ошибке и окно диалога оказываются скрытыми под "обычными" окнами приложения (некликабельными в данный момент) и переключиться на них никак не получается.

Справедливости ради должен отметить, что ГФ и Ф2 - не прямые потомки TForm, и даже не внучки-правнучки. Попытка воспроизвести в тестовом приложении ничего не дала, в такой же ситуации все формы остаются в правильном порядке. Собственно вопрос - что могли в них или их предках (или еще где) понаписать, что приводит к такому "перемешиванию" окон? Где искать, куда копать, что пытаться отловить?

Брекпойнты на всяких SendToBack, BringToFront, SetZOrder эффекта не дают. Пытался отловить сообщения, получаемые окнами в момент показа сообщения об ошибке. WinSpy++ отказался их мониторить (видимо, потому что приложение 32-битное). WinSight32 сказал, что в этот момент формам приходят WM_WINDOWPOSCHANGING и WM_WINDOWPOSCHANGED... Но точно такие же приходят и окнам тестового приложения, в котором все работает нормально.


 
Циркуль   (2011-03-30 18:14) [1]

поправка: "topmost" читать как "StayOnTop" :)


 
KSergey ©   (2011-04-04 14:50) [2]

Возможно, переопределены обработчики каких-то сообщений.


 
Циркуль   (2011-04-04 15:37) [3]

Можно пойти "от противного", т.е. решить задачу "напишите дурацкое приложение, в котором форма при вызове окна диалога сохранения файла оказывается над этим окном, оставаясь при этом неактивной".

Что посоветуете? :)


 
_Юрий   (2011-04-04 18:28) [4]


> Собственно вопрос - что могли в них или их предках (или
> еще где) понаписать, что приводит к такому "перемешиванию"
> окон? Где искать, куда копать, что пытаться отловить?


если найдете, сообщайте. Пока вроде никому не удавалось


 
Макс Черных   (2011-04-06 01:43) [5]


> Пока вроде никому не удавалось

Ну почему сразу никому ?

1. Это проявляется не только в 7, но и в висте иногда.
2. А копать надо в сторону свойства popupmode у TForm, обязательно ставить MainFormOnTaskBar=True, и забыть носовсем про всякие там stayontop. И все будет работать как надо, проверено.


 
Германн ©   (2011-04-06 01:49) [6]


> Макс Черных   (06.04.11 01:43) [5]
>
>
> > Пока вроде никому не удавалось
>
> Ну почему сразу никому ?
>
> 1. Это проявляется не только в 7, но и в висте иногда.
>

Это проявляется иногда и в ХР и проявлялось иногда в 98-м и во всех прочих ОС Windows. И до сих пор не понятно когда и почему? И я не уверен, что Дельфи тому причиной.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
15-1354134606
Юрий
2012-11-29 00:30
2013.03.22
С днем рождения ! 29 ноября 2012 четверг


2-1337342744
NieL
2012-05-18 16:05
2013.03.22
функцию, которая проверяет попадание точки в прямоугольник


15-1341989915
AV
2012-07-11 10:58
2013.03.22
никто по SSH не соединялся? В частности, через cryptlib


15-1332013809
V_a_d
2012-03-17 23:50
2013.03.22
PopupMenu


15-1346963402
Юрий
2012-09-07 00:30
2013.03.22
С днем рождения ! 7 сентября 2012 пятница