Как показать модальную форму поверх ее формы владельца (ее владелец установлен на fsStayOnTop или нет), как это делает TOpenDialog

Резюме:

См. Полезные комментарии ниже от Крейга и Сертака.

======== ==============================================

Как Как показано в следующем минимизированном коде, 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"
19
задан polarblau 22 March 2011 в 20:06
поделиться