unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  MyStr:string;
begin
  InputQuery('输入字符','如果输入为空将退出程序',MyStr);
  if MyStr<>'' then Action:=caNone;
end;end.

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
        procedure WMClose(var Message: TWMClose); message WM_CLOSE;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WMClose(var Message: TWMClose);
    var
      MyStr:string;
    begin
      InputQuery('输入字符','如果输入为空将退出程序',MyStr);
      if MyStr='' then inherited;
    end;end.
      

  2.   

    简单,响应ON DESTROY事件即可
      

  3.   

    哎呀,你没有看到OnCloseQuery事件吗?那个CanClose:=你的条件就可以了。
      

  4.   

     Kingron(戒网中……) 大傻瓜!!!,那我的自定义按钮也不起作用了啊
     gasi(红衣主教) ,请明示!!!!!
      

  5.   

    呵呵,你竟然说Kingron(戒网中……)是大傻瓜,你看看专家榜,总榜第一就是这位大虾
      

  6.   

     dancemaple(枫之舞) ,他的回答太臭啊,完全在敷衍人啊
      

  7.   

    ->那我的自定义按钮也不起作用了啊
    procedure TForm1.WMClose(var Message: TWMClose);
    var
      MyStr:string;
    begin
    //  InputQuery('输入字符','如果输入为空将退出程序',MyStr);
    //  if MyStr='' then inherited;
        { OnYourPro: 你的自定义过程,返回是否满足自定义的“离开(关闭form)”的按钮里条件 }
        if not OnYourPro then ShowMessage('先等会儿!...') 
        else  inherited;
    end;
      

  8.   

    在FORM的ONCLOSEQUARY下写约束条件。例如if x<100 then canclose:=true;
      

  9.   

    to boobygong(依然):
    我已经给你回信了,去收信吧。
    不要骂Kingron(戒网中……)是傻瓜啊,他说得没错。
    你应该在OnCloseQuery中判断条件,然后给CanClose赋值。
    在按钮的OnClick中只要调用Close;就行了。
      

  10.   

    Kingron(戒网中……) ,你的人缘真好啊,可以真的是牛人啊,好了,对不起了!!!回复人: GOHKI(豪鬼) ,真的很感谢你啊!!!!
      

  11.   

    自定义一个全局布尔变量,当单击自己的按钮时设置该变量为真,然后重载onClose过程,在这个过程中判断这个全局变量的真假,若真,则设Action:=caFree,其余的交给系统处理。
    我一直都是这么做的,你可以试试,加不加分无所谓。祝你好运。
      

  12.   

    button1的click事件
    根据你的条件设置一个全局变量bCanClose为true或者false,再调用form1.close;
    form1的onclose事件
      if bCanClose then
        Action:=caFree
      else 
        Action:=caNone;
      

  13.   

    实在没有办法的话,只好拦截此窗体的WM_CLOSE
      

  14.   

    实在没有办法的话,只好拦截此窗体的WM_CLOSE消息了。满足条件时就PostQuitMessage(0),不满足就return,搞定。
    代码自己写吧。