简单问题,在线等待,马上结帐

macro_love 2002-10-08 11:45:10
我在主窗体的FormClose事件中写了一些语句,当我正常关掉窗体时,能执行这些语句,但我如果不关掉正在运行的程序而重启或关机时,这些语句则不能执行。是什么原因呢?在重启或关机前电脑应该自己关掉了正在执行的窗体呀?怎么会不执行FormClose中的程序呢?
...全文
34 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wnyu 2002-10-10
  • 打赏
  • 举报
回复
我在Windows98(第二版), WindowMe及Window2000上运行,均能通过!
Wnyu 2002-10-09
  • 打赏
  • 举报
回复
如果应用程序被自已关闭, 它会执行的过程如下:
1. FormQuery
2. FormClose
3. FormDestroy
如果应用程序是被Windows或其它应用程序关闭, 它会执行的过程如下:
1. FormQuery
2. FormDestroy
奇怪的是,为什幺没有FormClose? 不过还好,此时可以通过Windows的WM_EndSection来实现FormClose, 代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure WMEndSession(Var Message : TWMEndSession); Message WM_EndSession;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
showmessage('Form Close');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.WMEndSession(var Message: TWMEndSession);
var
FormCloseAction : TCloseAction;
begin
showmessage('WMEndSession : Closed by Windows exit or other application');
Form1.FormClose(nil,FormCloseAction);
inherited;
end;

end.
macro_love 2002-10-09
  • 打赏
  • 举报
回复
在98中好像没发TWMEndSession,在2K中能用
tangyong_delphi 2002-10-08
  • 打赏
  • 举报
回复
我也想知道!
Wnyu 2002-10-08
  • 打赏
  • 举报
回复
FormCloseQuery
OnDestroy
CloneCenter 2002-10-08
  • 打赏
  • 举报
回复
用 FormCloseQuery
daniel007 2002-10-08
  • 打赏
  • 举报
回复
OnDestroy事件中试试看
wanderung 2002-10-08
  • 打赏
  • 举报
回复
捕获一下看

你说的是不可能的吧~!
licheng31 2002-10-08
  • 打赏
  • 举报
回复
关机和重启的时候,应用程序的进程直接被杀死。FormClose没有捕捉到窗口关闭的消息,因此不执行里面的代码。
macro_love 2002-10-08
  • 打赏
  • 举报
回复
怎么解决呢?
haoqingqlm 2002-10-08
  • 打赏
  • 举报
回复
使作消息
procedure closepro(var msg:tmessage);message wm_queryendsession;
系统在关机或重启时,会给每个未关闭的程序发送消息,截获并执行就可以了
cnnjyeziyin 2002-10-08
  • 打赏
  • 举报
回复
楼上说的很清楚了
shanxia 2002-10-08
  • 打赏
  • 举报
回复
当然不会啦,FormClose是关闭窗体是触发的事件,你关机或重启并没有对窗体进行动作啊!它当然不执行程序了!
delphi_xizhousheng 2002-10-08
  • 打赏
  • 举报
回复
FormCloseQuery事件在FormClose事件之前被触发!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧