我写的程序如下:
procedure TMainForm.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
  Message.Result := 1;         
  application.Terminate;
end;
但是当我关机的时候,程序是关掉了,但是机器就停在那边了,没有反应了。一定要再关一下机器,才能关机。
请问问题在哪里啊?应该怎么写代码呢?

解决方案 »

  1.   

    You can use the following procedure 
    to detect if Windows is shutting 
    down. If your application needs to 
    save data before allowing the 
    shutdown to continue you can do that,
    then allow Windows to shutdown 
    normally.procedure TfrmMain.WMQueryEndSession(var Message : 
                                     TWMQueryEndSession);
    begin // Let the inherited message handler respond first
     inherited; if DataHasChanged then begin
        MessageBeep(MB_ICONQUESTION);
        case MessageDlg('The current Windows 
               session is ending.  Save league changes?',
               mtConfirmation, [mbYes,mbNo,mbCancel],0) of
        mrYes    : begin
                    //Your data-saving code or method 
                    //call goes here
                    Message.Result := 1;
                   end;
        mrNo     : Message.Result := 1;
        mrCancel : Message.Result := 0;
          end; {case} end
       else
          Message.Result := 1;
    end;
      

  2.   

    拦截一个重新启动的消息
    注意Message关键字
        procedure WMQueryEndSession(var Msg:TWMQUERYENDSESSION);message WM_QUERYENDSESSION;
      

  3.   

    application.Terminate;->self.close;
      

  4.   

    Terminate;有时要等干完其它P事才结束,要是你急于退出程序的话:Halt;