Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизМодальное окно прячется под немодальным Найти похожие ветки
← →
Циркуль (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.069 c