要約:
CraigとSertacからの以下の役立つコメントをご覧ください。
================================================== ====
次の最小化されたコードに示すように、TForm10
はに設定されますfsStayOnTop
。TForm10.btnTryDlgClick
を呼び出すdlgOpen1.Execute
と、表示されるダイアログは期待どおりです。ただし、TForm11.Create(Self).ShowModal
内部を呼び出すTForm10.btnTryFormClick
と、フォームはTForm10の背後に隠れています。この動作をどのように理解するのか、そしてなぜ標準のTOpenDialogが期待どおりに表示されるのか疑問に思っています。コメントは大歓迎です!
PS:1つの回避策は、TForm11のCreateParamsプロシージャをオーバーライドし、Params.wndParentを0に設定することです。しかし、この回避策を使用すると、ウィンドウ階層が壊れているように見えます。
procedure TForm11.CreateParams(var Params: TCreateParams); // override;
begin
inherited;
params.wndParent := 0;
end;
PS:別の回避策は、以下の関連するSOページでRemyによって言及されています setting the modal Form's PopupParent property to be the StayOnTop Form
。しかし、その後のコメントで、Sertacは、この回避策はウィンドウ階層も壊すだろうと述べました。
PS:おそらく関連するSOページ:
fsStayOnTopフォームによって隠されたモーダルフォーム
FindDialogがトップに留まらないようにするにはどうすればよいですか(Delphi)?
ダイアログが常にメインウィンドウの前面にあることを確認するには
、ShowModalが呼び出されたときにフォームが他のフォームの背後に隠れているようにするには、
2つのフォームを互いにオーバーラップできるようにしますか?
複数のフォームのDelphiアプリケーションとダイアログ
新しく作成されたモーダルウィンドウはフォーカスを失い、WindowsVistaDelphiでアクセスできなくなります-Forms
/MsgBoxesが以前のフォームの下に移動しないようにするにはどうすればよいですか?
Showを使用してメインフォームの
フェイクモーダルダイアログの背後にあるDelphiセカンダリフォームを許可するにはどうすればよいですか?
DelphiMainFormOnTaskBarモーダルウィンドウのバグ
Unit10のソース:
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm10 = class(TForm)
btnTryDlg: TButton;
dlgOpen1: TOpenDialog;
btnTryForm: TButton;
procedure FormCreate(Sender: TObject);
procedure btnTryDlgClick(Sender: TObject);
procedure btnTryFormClick(Sender: TObject);
end;
var
Form10: TForm10;
implementation
{$R *.dfm}
uses
Unit11;
procedure TForm10.FormCreate(Sender: TObject);
begin
FormStyle := fsStayOnTop;
end;
procedure TForm10.btnTryDlgClick(Sender: TObject);
begin
dlgOpen1.Execute;
// dlgOpen1.Execute(Self.Handle);
end;
procedure TForm10.btnTryFormClick(Sender: TObject);
begin
TForm11.Create(Self).ShowModal;
end;
end.
Unit10のDFM:
object Form10: TForm10
Left = 0
Top = 0
Caption = 'Form10'
ClientHeight = 255
ClientWidth = 414
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object btnTryDlg: TButton
Left = 32
Top = 24
Width = 153
Height = 201
Caption = 'Try dialog'
TabOrder = 0
OnClick = btnTryDlgClick
end
object btnTryForm: TButton
Left = 224
Top = 24
Width = 153
Height = 201
Caption = 'btnTryForm'
TabOrder = 1
OnClick = btnTryFormClick
end
object dlgOpen1: TOpenDialog
Left = 96
Top = 168
end
end
Unit11のソース:
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm11 = class(TForm)
end;
implementation
{$R *.dfm}
end.
Unit11のDFM:
object Form11: TForm11
Left = 0
Top = 0
Caption = 'Form11'
ClientHeight = 183
ClientWidth = 203
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end