怎样在选择对话框后程序继续运行(10分)

  • 主题发起人 主题发起人 zhuifeng
  • 开始时间 开始时间
Z

zhuifeng

Unregistered / Unconfirmed
GUEST, unregistred user!
在关闭程序时会出现一个对话框,让你进一步确认是否要关闭程序,当你选择关闭时,程序
就会结束,当你选择“不关闭”时,程序还是原来就界面,我在用messagedlg 时,在选择“不关闭”
后,程序照样结束了,不知道怎么样才能使得在选择“不关闭”时,程序继续运行?
我的程序是这样的:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Welcome',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
application.terminate;
end;
 
在Form.OnCloseQuery属性里加入上面的代码.
 
这个事件里我加了,不行,然后就在formclose 事件里加的,怎么还不行啊
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
if MessageDlg('Welcome',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
Action := caFree;
end;
或者
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False ;
if MessageDlg('Welcome',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
CanClose := True;
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False ;
if MessageDlg('Welcome',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
CanClose := True;
end;
 
能否讲以下 action的功能,具体的值,
canclose是干什么用的?我在属性里怎么也找不到?
 
字面意思很直观嘛,你看一下帮助吧

caNone The form is not allowed to close, so nothing happens.
caHide The form is not closed, but just hidden. Your application can still access a hidden form.
caFree The form is closed and all allocated memory for the form is freed.
caMinimize The form is minimized, rather than closed. This is the default action for MDI child forms.
 
CanClose并不是属性,而是OnCloseQuery的一个参数,OnCloseQuery事件在windows向应用程序发出
Close消息时触发,将CanClose赋为True时将关闭整个应用程序,反之,则不理会Close消息。
 
有点不明白你为什么这样做,在ONCLOSE中在关闭窗口时会传递一个CLOSEACTION,默认值是CAFREE,所以你这样做,肯定会关闭窗口!
关于ONCLOSE,DELPHI HELP中有个很好的例子,去好好看看吧,再看看FORMS.PAS中关于CLOSE的过程吧!
 
在FormCloseQuery中添加代码:
var
r:integer;
begin
r:=messagedlg('welcom?',mtconfirmation,[mbyes,mbno],0);
case r of
id_yes:
canclose:=true;
id_no:
canclose:=false
end;
end;
 
我的方式很简单,照你的代码写:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Welcome',mtConfirmation, [mbYes, mbNo], 0) = mrNo then
application.run;
end;
把yes改成no,把terminate改成run就可以了。
 
多人接受答案了。
 
后退
顶部