我有一个包含多个表单的应用程序,每个表单都有一个单独的任务栏按钮。
假设 form2 显示一个 OpenDialog,我点击另一个最大化的应用程序覆盖全屏区域,然后我通过选择它的任务栏按钮返回到 form2。瞧!OpenDialog 隐藏在我选择的另一个应用程序后面,我必须单击现在不可访问的 form2 才能将对话框重新置于前面。这真的很烦人,可能会使用户感到困惑。
下面是一些代码来说明这个问题:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
end.
________________
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
procedure CreateParams(var Params: TCreateParams); override;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
end.
是否有可能获得可见 opendialog 的句柄?它曾经是可能的,但是如果我捕获 OnDialogShow,那么使用新的 Vista 风格的 OpenDialog,OpenDialog 会恢复到旧的风格,这对我来说现在是不行的。
有任何想法吗?