Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Какая то фигня с модальными окнами  [new]
Janex
Member

Откуда: Латвия
Сообщений: 1095
Привет всем.
Есть главная MDI апликация, в неи форма, из форми откривается
другаю модальная, от туда откриваем SaveDialog и обана ... ета модальная
уходит ЗА главнои формои. Закриваем SaveDialog и она обратно на своё место ...

Пробовал чистыи демо проект сделать - там всё работает, а в моём проекте неа :(
И ето не только с SaveDialog-ом, есть и другие места, где откривая модальную форму
она вызиваюшую форму заганяет ЗА главнои формои ...
И появилось ето чудо как то тут недавно, но немогу понять изза чего ето оно так.
Кто то непападал в токую фигню ???

WBR
Janex
29 авг 19, 15:25    [21959937]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
ёёёёё
Member

Откуда:
Сообщений: 688
Janex,

вроде бы, начиная с D2007, у класса TCommonDialog (родителя Open/Save dlg's) в дополнение к
    function Execute: Boolean; overload; virtual; 

появилась
    function Execute(ParentWnd: HWND): Boolean; overload; virtual; abstract; 

Попробуй использовать второй вариант. Укажи хэндл окна формы, в которой диалог создаешь.
29 авг 19, 15:39    [21959952]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
Это глюки старых делфи. В последних XE-версиях этого бага быть не должно.
31 авг 19, 22:52    [21961341]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11152
Janex
есть и другие места, где откривая модальную форму
она вызиваюшую форму заганяет ЗА главнои формои ...
Не связано ли это с тем, что при открытии нового окна выполняется какая-то тяжелая операция?
2 сен 19, 12:53    [21961780]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
Zmeelov2
Member

Откуда:
Сообщений: 239
Давным-давно, когда D5 приложение разместили на свежеразвернутом сервере Win2008 (работала аппликуха в терминальном режиме), получили именно эту проблему. Вылечилось переустановкой сервера 2008. Просто в порядке информации.
2 сен 19, 13:46    [21961822]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3967
Zmeelov2
Вылечилось переустановкой сервера 2008.

"Переустанови винду" - хороший совет, до сих пор часто применяю. В шутку, конечно.

По теме. Я в VCL-ных программах после begin в dpr всегды вызывал эту процедуру:

// отключает в WinXP и выше механизм Window Ghosting
// тем самым решается проблема с модальными окнами под видимой формой и
// возможностью двигать и закрывать модальные окна не верхнего уровня.
// с другой стороны, если приложение действительно занято, то убивать его придется
// с помощью дистпетчера задач.
procedure DisableWindowsGhosting;
var
  User32: HMODULE;
  DisableProcessWindowsGhosting: procedure;
begin
  User32:=GetModuleHandle('USER32');
  if User32<>0 then begin
    DisableProcessWindowsGhosting:=GetProcAddress(User32,'DisableProcessWindowsGhosting');
    if assigned(DisableProcessWindowsGhosting) then
      DisableProcessWindowsGhosting;
  end;
end;

И таких проблем не имел.
2 сен 19, 15:28    [21961961]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30273

02.09.2019 15:28, YuRock пишет:
> Я в VCL-ных программах после begin в dpr всегды вызывал эту процедуру:

это не для ЭТОГО

Posted via ActualForum NNTP Server 1.5

2 сен 19, 15:55    [21961992]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3967
Мимопроходящий,

Возможно. Но мне помогало при этих симптомах.
2 сен 19, 16:05    [21962003]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3967
автор
Disables the window ghosting feature for the calling GUI process. Window ghosting is a Windows Manager feature that lets the user minimize, move, or close the main window of an application that is not responding.

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-disableprocesswindowsghosting

А делает винда это, фотографируя текущее окно. И когда апприкуха развисает, то, похоже, активирует его.
2 сен 19, 16:08    [21962004]     Ответить | Цитировать Сообщить модератору
 Re: Какая то фигня с модальными окнами  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6510
Janex
Есть главная MDI апликация, в неи форма, из форми откривается
другаю модальная, от туда откриваем SaveDialog и обана ... ета модальная
уходит ЗА главнои формои. Закриваем SaveDialog и она обратно на своё место ...


такое может быть, если вызов SaveDialog'а происходит из окна, которое имеет на панели задач (дополнительно к главному приложению) свою отдельную кнопку, т.е. это модальное окно было создано так как-то:

type
  TMyToolDialog = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TMyToolDialog.CreateParams(var Params: TCreateParams);
begin
   inherited CreateParams(Params);

   Params.ExStyle:=Params.ExStyle or WS_EX_APPWINDOW;
   Params.WndParent:=GetDesktopWindow();
end;
2 сен 19, 16:57    [21962050]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить