Я нашел обходной путь к этому.
Когда вы создаете форму с владельцем, FireMonkey должен передать владельца в функцию Windows CreateWindowEx
, но это не так.
В единице FMX.Platform.Win
, в функции CreateWindow()
измените это:
Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
GetDesktopWindow, 0, hInstance, nil);
К этому:
// If there's an owner, and it's a form, then create the window as a child
if (AForm <> nil) and (AForm.Owner <> nil) and (AForm.Owner is TForm) then
begin
// Child window
Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
HandleToHWND(TForm(AForm.Owner).Handle), 0, hInstance, nil);
end
else
begin
// Desktop window
Wnd := CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(AForm.Caption), Style,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),
GetDesktopWindow, 0, hInstance, nil);
end;
Итак, если вы собираетесь создать дочернюю, особенно модальную форму, убедитесь, что вы назначаете родительскую форму в качестве владельца, когда создаете ее следующим образом:
MyModalForm := TMyModalForm.Create(MyParentForm);
MyModalForm.ShowModal;
Тогда все будет работать, как и ожидалось, после исправления.
Не забудьте удалить дочернюю форму из списка автоматически создаваемых форм в настройках вашего проекта.