powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Уплытие окна OpenDialog
14 сообщений из 14, страница 1 из 1
Уплытие окна OpenDialog
    #39972004
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в окне регистрации БД открыть какой-нибудь OpenDialog (любой - диалог выбора БД, выбор клиентской библиотеки, выбор файла бэкапа...), потом заставить процесс IBExpert потерять фокус (банально кликнуть по таск-бару Windows), а потом кликнуть обратно в IBExpert, то OpenDialog проваливается под окно регистрации БД.

А т.к. модальность он не теряет, то IBExpert перестает реагировать на действия пользователя. Esc, Alt-Tab не помогают

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972131
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это известная проблема. Но как ее лечить - неизвестно.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972370
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Это известная проблема. Но как ее лечить - неизвестно.
А как она достигается? Это же обычный TOpenDialog? С обычным OpenDialog1.Execute?
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972507
nofate2009
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert
Это известная проблема. Но как ее лечить - неизвестно.

Поддерживаю. Тоже сталкивался в своих приложениях. Правда мне Esc помогал. Штука действительно неприятная. Как отловить её - отдельная история требующая творческого подхода и большого количества свободного времени.

И дело не в TOpenDialog. Такой баг возможен с любым модальным диалоговым окном.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972512
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А как она достигается?


Понятия не имею. В моем лице никто нарочно даже не пытается этого достичь. Разумеется, там самый обычный OpenDialog.Execute безо всяких подлянок.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972524
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nofate2009
Такой баг возможен с любым модальным диалоговым окном.
То, о чем вы говорите связано с долгой инициализацией модального окна и проявляется в момент открытия окна. Тут же наблюдается уплытие уже открытого диалога
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972616
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
То, о чем вы говорите связано с долгой инициализацией модального окна и проявляется в момент открытия окна. Тут же наблюдается уплытие уже открытого диалога


Да не, он все правильно написал. Такое и с ShowMessage случается, например. А Esc помогает в том смысле, что уехавшее назад модальное окно его отрабатывает, закрывается, и приложение снова "оживает".
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972708
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Корни проблемы уходят в архитектуру VCL с невидимым окном приложения. Если бы диалог в качестве Parent использовал не его, а окно из которого открывается, проблема не возникала бы.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972730
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Если бы диалог в качестве Parent использовал не его, а окно из которого открывается, проблема не возникала бы.
Т.е. достаточно вызвать
Код: sql
1.
OpenDialog1.Execute(Self.Handle)

?
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972750
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Корни проблемы уходят в архитектуру VCL с невидимым окном приложения. Если бы диалог в качестве Parent использовал не его, а окно из которого открывается, проблема не возникала бы.


Если это так, то это легко исправить, наверное. Хотя придется Dialogs.pas рихтовать.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972758
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
придется Dialogs.pas рихтовать.
В новых версиях делфи вот так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  TCommonDialog = class(TComponent)
    ..........
    function Execute: Boolean; overload; virtual;
    function Execute(ParentWnd: HWND): Boolean; overload; virtual; abstract;
   ...............
  end;

function TCommonDialog.Execute: Boolean;
var
  ParentWnd: HWND;
begin
  if Application.ModalPopupMode <> pmNone then
  begin
    ParentWnd := Application.ActiveFormHandle;
    if ParentWnd = 0 then
      ParentWnd := ApplicationMainHandle;
  end
  else
    ParentWnd := ApplicationMainHandle;
  Result := Execute(ParentWnd);
end;

В какой версии появилось - не знаю
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972761
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
В новых версиях делфи вот так


В пятерке такого еще нет, там тупо Application.Handle берется.
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39972769
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, замена Application.Handle на Screen.ActiveForm.Handle решает проблему...
...
Рейтинг: 0 / 0
Уплытие окна OpenDialog
    #39973163
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, это всё равно не мешает диалогу скрываться под другой формой вместе с родительской, так что проблема Z-order тут каскадная.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Уплытие окна OpenDialog
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]