procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType <> SC_CLOSE then
    inherited
end;

解决方案 »

  1.   

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    ...
    CanClose:=False;
    ...
    end;
      

  2.   

    调用API:SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,SPIF_SENDCHANGE)
      

  3.   

    我的意思是不让Alt+F4关闭,但可以通过调用代码关闭!
      

  4.   

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    begin
    if (ssAlt in shift)and(key=115) then key:=0;
    end;
      

  5.   

    我的意思是不让Alt+F4关闭,但可以通过调用代码关闭! 
    procedure Form1.CloseFormByCode;
    begin
    FCloseFlag:=True;
    Close;
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    ...
    CanClose:=FCloseFlag;
    ...
    end;哥们或姐们,再这样菜下去怎么好.这已经和Delphi无关了.
      

  6.   

    唉,Alt+f4触发的是WM_SYSCOMMAND的消息,而Close触发的是WM_CLOSE的消息。
    所以在SYSCOMMAND中禁止alt+f4,并不会禁止Close。我不明白为什么要那么复杂?