VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 855|回复: 4

窗体的activate事件与create事件有什么区别

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-20 20:00:01 | 显示全部楼层 |阅读模式
各位老师好。
    我是个delphi菜鸟,问各位老师几个问题。
    1、窗体的onactivate、oncreate这几个窗体激活事件有什么区别?
    2、窗体的onclose、onclosequery、ondeactivate、ondestroy这几个窗体关闭事件有什么区别?
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-4-29 13:00:01 | 显示全部楼层
在表面上看是执行顺序不一样。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-30 14:00:01 | 显示全部楼层

1、窗体的onactivate、oncreate这几个窗体激活事件有什么区别?

    有区别,onactivate,当窗体激活时执行(可能执行多次)
    oncreate  当窗体类实例化时执行(只能执行一次)
    oncreate 先于onactivate执行

2、窗体的onclose、
         onclosequery、
        ondeactivate、ondestroy这几个窗体关闭事件有什么区别?

     onclose是当窗体关闭的时候执行(可能多次)
     onclosequery是当窗体关闭前执行onclose()之前
     ondeactivate 当窗体不在激活状态时执行
     ondestroy 当窗体对像销毁时执行

回复

使用道具 举报

0

主题

53

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-1 13:45:01 | 显示全部楼层
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销毁函数事件,只是在窗口结束时,释放所有窗口资源之前所执行的事件
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-10 22:15:01 | 显示全部楼层
以上楼主的答案比较全了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表