各位老师好。
    我是个delphi菜鸟,问各位老师几个问题。
    1、窗体的onactivate、oncreate这几个窗体激活事件有什么区别?
    2、窗体的onclose、onclosequery、ondeactivate、ondestroy这几个窗体关闭事件有什么区别?

解决方案 »

  1.   


    1、窗体的onactivate、oncreate这几个窗体激活事件有什么区别?    有区别,onactivate,当窗体激活时执行(可能执行多次)
        oncreate  当窗体类实例化时执行(只能执行一次)
        oncreate 先于onactivate执行 2、窗体的onclose、
             onclosequery、
            ondeactivate、ondestroy这几个窗体关闭事件有什么区别?      onclose是当窗体关闭的时候执行(可能多次)
         onclosequery是当窗体关闭前执行onclose()之前
         ondeactivate 当窗体不在激活状态时执行
         ondestroy 当窗体对像销毁时执行
      

  2.   

    1、onactivate是激活事件,是当窗口获得焦点(即标题栏变成蓝色)变成当前状态的情况下触发的事件这个事件主要执行的是DoNestedActivation
    procedure DoNestedActivation(Msg: Cardinal; Control: TWinControl; Form: TCustomForm);
    begin
      if Control = nil then Exit;
      { Find the closest parent which is a form }
      while (Control.Parent <> nil) and not (Control is TCustomForm) do
        Control := Control.Parent;
      if Assigned(Control) and (Control <> Form) then
        SendMessage(Control.Handle, Msg, 0, 0)
    end;
    相反,就是ondeactivate事件,这是丢失焦点,从当前状态转入非激活状态在执行这些事件的时候,OnCreate事件早已执行,onCreate事件是初始化事件,也叫创建事件。是构造函数
    2、onclose事件是在窗体被关闭之前所要执行的事件。hide窗体不会执行这个事件。
    FormCloseQuery事件比较的有意思,它也是关闭窗口之前要执行的事件,它在onclose事件之前执行,这个事件中有个参数Canclose可以用来限制你关闭窗口。CanClose:=False;表示不可以关闭,相反CanClose:=true允许关闭
    与oncreate构造函数事件对应的是ondestroy销毁函数事件,只是在窗口结束时,释放所有窗口资源之前所执行的事件