如何让关闭按钮在 Delphi 上打开一个新表单
How to make close button open a new form on Delphi
我需要任何表单上的“x”按钮都不会关闭表单,而是在 delphi 上打开另外 3 个随机表单,我不知道该怎么做,请帮忙
只需使用表单的 OnCloseQuery
事件来检测用户是否试图关闭您的表单(通过单击 top-right 角落的关闭按钮,通过 double-clicking 表单的标题栏图标,通过选择关闭系统菜单项,通过按 Alt+F4 等)。
然后将 CanClose
设置为 False
,然后打开您的三个新表单:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
Form2.Show;
Form3.Show;
Form4.Show;
end;
根据 的建议,您可以使用表单的 OnCloseQuery
事件。但是,该方法的问题是该事件也在系统 reboot/shutdown 期间触发,您不想阻止它。如果 OnCloseQuery
returns CanClose=False
在系统关闭期间,关闭将被取消。
另一种选择是使用表单的 OnClose
事件,将其 Action
参数设置为 caNone
,例如:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Form2.Show;
Form3.Show;
Form4.Show;
end;
但是,最好的选择是仅处理 user-initiated 闭包(X
按钮、ALT-F4
等)让表单处理 WM_SYSCOMMAND
消息以查找 SC_CLOSE
通知,例如:
procedure TForm1.WndProc(var Message: TMessage);
begin
if (Message.Msg = WM_SYSCOMMAND) and (Message.WParam and $FFF0 = SC_CLOSE) then
begin
Message.Result := 0;
Form2.Show;
Form3.Show;
Form4.Show;
end
else
inherited;
end;
这样,system-initiated闭包就不会受到阻碍了。
我需要任何表单上的“x”按钮都不会关闭表单,而是在 delphi 上打开另外 3 个随机表单,我不知道该怎么做,请帮忙
只需使用表单的 OnCloseQuery
事件来检测用户是否试图关闭您的表单(通过单击 top-right 角落的关闭按钮,通过 double-clicking 表单的标题栏图标,通过选择关闭系统菜单项,通过按 Alt+F4 等)。
然后将 CanClose
设置为 False
,然后打开您的三个新表单:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
Form2.Show;
Form3.Show;
Form4.Show;
end;
根据 OnCloseQuery
事件。但是,该方法的问题是该事件也在系统 reboot/shutdown 期间触发,您不想阻止它。如果 OnCloseQuery
returns CanClose=False
在系统关闭期间,关闭将被取消。
另一种选择是使用表单的 OnClose
事件,将其 Action
参数设置为 caNone
,例如:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Form2.Show;
Form3.Show;
Form4.Show;
end;
但是,最好的选择是仅处理 user-initiated 闭包(X
按钮、ALT-F4
等)让表单处理 WM_SYSCOMMAND
消息以查找 SC_CLOSE
通知,例如:
procedure TForm1.WndProc(var Message: TMessage);
begin
if (Message.Msg = WM_SYSCOMMAND) and (Message.WParam and $FFF0 = SC_CLOSE) then
begin
Message.Result := 0;
Form2.Show;
Form3.Show;
Form4.Show;
end
else
inherited;
end;
这样,system-initiated闭包就不会受到阻碍了。