Резюме:
См. Полезные комментарии ниже от Крейга и Сертака.
======== ==============================================
Как Как показано в следующем минимизированном коде, TForm10
устанавливается равным fsStayOnTop
. TForm10.btnTryDlgClick
вызывает dlgOpen1.Execute
, и показанное диалоговое окно соответствует ожиданиям. Однако, когда я вызываю TForm11.Create (Self) .ShowModal
внутри TForm10. btnTryFormClick
, форма скрыта за TForm10. Мне интересно, как понять это поведение и почему стандартный TOpenDialog может отображаться так, как ожидалось? Приветствуются любые комментарии!
PS: Одним из способов решения проблемы является переопределение процедуры CreateParams в TForm11 и установка Params.wndParent в 0. Но мне кажется, что с помощью этого обходного пути иерархия окон будет нарушена.
procedure TForm11.CreateParams(var Params: TCreateParams); // override;
begin
inherited;
params.wndParent := 0;
end;
PS: Другой обходной путь упоминается Реми на соответствующих страницах SO: установка свойства PopupParent модальной формы на форму StayOnTop
. Но в следующих комментариях Сертак упомянул, что этот обходной путь также нарушит иерархию окон.
PS: Возможно релевантные страницы SO: Самостоятельная ссылка в хеше Можно ли ссылаться на один элемент в хеше внутри другого элемента в том же хеше? # Псевдокод foo = {: world => "World",: hello => "Привет # {foo [: world]}"} foo [: hello] # => "Привет ...
Можно ли ссылаться на один элемент в хэше внутри другого элемента в том же хеш-коде?
# Pseudo code
foo = { :world => "World", :hello => "Hello #{foo[:world]}" }
foo[:hello] # => "Hello World"