软件退出Onclosequery的问题(100分)

  • 主题发起人 主题发起人 dotboy
  • 开始时间 开始时间
D

dotboy

Unregistered / Unconfirmed
GUEST, unregistred user!
不好意思,我是新手。
我做了一个类似于Winpopup的软件,直接关闭此软件有一个确认关闭对话框。
问题是:我想在直接关闭Windows时,此软件不要弹出确认关闭对话框。

谢谢!
 
除非你采用强制关闭的选项
 
法1、使用全局变量,当在使用直接关闭的时候,设置全局变量的数值。
var
OkExit: Boolean;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not OkExit then
if Application.MessageBox('确实要退出吗?', '询问', 32 + mb_YesNO) = mrNo then
CanClose := False;
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
OkExit := True;
Close;
end;
 
法2、利用Form的ModalResult来判断,不过这里的ModalResult使用不是特别正规。
正常的ModalResult后面不需要也不能使用Close,因为这个是主窗体,所以……,但是试验通过了。
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if ModalResult <> mrOK then
if Application.MessageBox('确实要退出吗?', '询问', 32 + mb_YesNO) = mrNo then
CanClose := False;
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
ModalResult := mrOk;
Close;
end;
 
yzhshi:
先谢谢你的解答,按照你的方法我试了一下,但还是不行。
其实我的问题类似于:直接关闭Windows系统,不是先关闭该程序(该程序仍在运行当中),在
WINDOWS系统关闭的过程当中,自动关闭该程序,且不会弹出确认关闭该程序的窗口。
而若直接关闭该程序(该程序的退出或关闭铵钮),则需要弹出确认关闭窗口。
 
嗨,你终于说清楚你的问题了。
截获WM_ENDSESSION消息吧。。。
 
用这个凑乎吧。

procedure WMENDSESSION(var Message: TWMENDSESSION); message WM_ENDSESSION;

var
WindowDown: Boolean;

procedure TForm1.WMENDSESSION(var Message: TWMENDSESSION);
begin
WindowDown := True;
inherited;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not WindowDown then
if Application.MessageBox('确实要退出吗?', '询问', 32 + mb_YesNO) = mrNo then
Action:= caNone;
end;
 
这个也可以。
procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;

var
WindowDown: Boolean;

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
WindowDown := True;
inherited;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not WindowDown then
if Application.MessageBox('确实要退出吗?', '询问', 32 + mb_YesNO) = mrNo then
CanClose := True;
end;
 
To yzhshi:
It is best method to save your question.
 
yzhshi:
在你的帮助已经搞定,你真是一个热心人。
 
我是新手,没有太多的分,以后也不可能通过回答问题来得分,所以……~_~
 
嗨,没事。
1、你可以不结束这个帖子,在帖子上面改问别的。
2、你可以问10分甚至0分的帖子,放心,只要是真正只得回答的,一般不会对分斤斤计较,而且能够少一些灌水的。
3、你可以注册多个ID,^_^

btw 你这个问题其实提问20分足够了。目前通货不算膨胀的。
 
直接断掉电源就行了。
 
楼上的解决问题真有意思!!!
 
后退
顶部