Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1345804953
Wadimka
2012-08-24 14:42
2013.03.22
Подскажите можно ли с консольным приложением..


2-1336748580
Chahlik
2012-05-11 19:03
2013.03.22
Интерполяция. Помогите!!!


2-1332353988
Pcrepair
2012-03-21 22:19
2013.03.22
Тип переменной для СТЕКа в Delphi. что выбрать?


2-1348029995
Dibed
2012-09-19 08:46
2013.03.22
Преобразование даты и времени


6-1266224883
keymaster
2010-02-15 12:08
2013.03.22
Трабл с IDHTTP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский