File Delphi XE2:通过在Windows中打开文件最小化应用程序还原
问题是:当应用程序最小化时,如何隐藏附加窗体,因为在应用程序恢复后,附加窗体无法关闭。附加的代码显示了该行为。首先,我按下按钮打开附加表单。它已设置了表单样式集fsStayOnTop。然后我按下定时器按钮并最小化主窗体。计时器恢复窗体后,无法关闭附加窗体File Delphi XE2:通过在Windows中打开文件最小化应用程序还原,file,delphi,restore,minimize,File,Delphi,Restore,Minimize,问题是:当应用程序最小化时,如何隐藏附加窗体,因为在应用程序恢复后,附加窗体无法关闭。附加的代码显示了该行为。首先,我按下按钮打开附加表单。它已设置了表单样式集fsStayOnTop。然后我按下定时器按钮并最小化主窗体。计时器恢复窗体后,无法关闭附加窗体 program MINIBUG; uses Vcl.Forms, MainForm in 'MainForm.pas' {Form7}, AddForm in 'AddForm.pas' {Form8}; {$R *.res}
program MINIBUG;
uses
Vcl.Forms,
MainForm in 'MainForm.pas' {Form7},
AddForm in 'AddForm.pas' {Form8};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm7, Form7);
Application.CreateForm(TForm8, Form8);
Application.Run;
end.
unit AddForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm8 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
implementation
{$R *.dfm}
end.
unit MainForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, AddForm, Vcl.ExtCtrls;
type
TForm7 = class(TForm)
btnAddForm: TButton;
tmr1: TTimer;
Button1: TButton;
procedure btnAddFormClick(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
{$R *.dfm}
procedure TForm7.btnAddFormClick(Sender: TObject);
begin
Form8.Show;
end;
procedure TForm7.Button1Click(Sender: TObject);
begin
tmr1.Enabled := True;
end;
procedure TForm7.tmr1Timer(Sender: TObject);
begin
tmr1.Enabled := False;
form8.Close;
Application.Restore;
end;
end.
测试用例错误? 我不确定您的测试用例是否正确。如果计时器事件模拟双击关联文件的行为,为什么会导致
Form8.Close
操作?您说过,问题的一部分是当相关文件打开时,附加表单(与主表单一起)变得可见,因此隐藏(form.Hide
)应该在启动计时器时发生,并且在OnTimer
时,应该显示表单(`form.Show)
回答
无论如何,对于您的实际问题,当应用程序最小化时如何隐藏附加表单的答案是,您不必做任何特殊的事情。附加表单也将被隐藏,无需任何操作
如果出于某种原因想要或必须主动隐藏附加表单,请通过将TApplicationEvents
组件添加到主表单中,并使用其OnMinimize
事件调用Form8.hide
和OnRestore
事件调用Form8.Show
同时考虑
顺便说一句,如果选择
Form.Close
或Form.Hide
,则会有所不同。Close通过一个过程调用CloseQuery()
,而Hide只是设置Visible
属性yoFalse
,恐怕您没有向我们提供足够的必要信息来帮助您解决问题。您遗漏的最关键的信息是双击应用程序设置为打开的文件后执行的代码。我猜问题实际上可能出在这段代码中。请提供一个示例,我现在可以用给出的代码重现您描述的问题。我知道这只是在模仿真实情况。因此,请解释一下form8.Close在现实世界中的动作正在复制OnTimer
事件中的code>。若那个行被注释掉了,那个就并没有问题。我有和程序关联的文件,所以我可以双击打开文件。当应用程序正常运行时,打开文件不会造成问题。当我最小化带有可见Form8的应用程序,然后双击打开文件时,Form8也会出现,无论其可见标志设置如何。而且它不能关闭。所以我需要一个解决方案,使Form8正常运行,或者在应用程序恢复时隐藏(或关闭)它。我必须提到,应用程序是单例的,所以双击文件不会创建它的新实例。