窗口关闭,其组件的哪些函数执行?

kesaly 2008-07-07 09:18:33
假如我自己做了个组件,把其放到窗体里面,假如我点击运行,就有个loaded函数会执行,我想问一下,假如我把窗口关闭了,我的组件的哪个函数会执行呢?我是指动态的,像消息那样,检测到窗口关闭了我就执行~!
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
whomin 2008-07-08
  • 打赏
  • 举报
回复
当窗口关闭时会释放组件,因此组件的析构函数应该是会执行吧,当然此时窗口是还没被释放掉的。
ydlchina 2008-07-08
  • 打赏
  • 举报
回复
这个问题也不知楼主解决没有?

初看这个问题也没觉得有问题,想试试,但要开始的时候,又觉得有点不对劲,窗体作为它的所有组件的Owner,
负责它所拥有所有组件的释放,释放顺序是,先释放它所拥有的的组件,然后自己关闭。如果按照这个讲法,
它所拥有的组件是不可能检测到窗体的关闭的,因为它在此之前已经不存在了,所以这个功能恐怕是没法实现。

仅代表个人意见,如果其他人有解决方法,请将你的方法贴出来,大家一起分享。
kesaly 2008-07-08
  • 打赏
  • 举报
回复
两天了竟然就一个人回答,构造函数我不知道执行不执行,不过我试着在构造函数里面加了一个ShowMessage结果当我把我的组件删除了它执行的,当窗口关闭的时候他却报错,不晓得为什么

jxw1987628 2008-07-08
  • 打赏
  • 举报
回复
我觉得是不是处理form的WM_CLOSE消息,

你在那里可以做一些事情!
kesaly 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ydlchina 的回复:]
这个问题也不知楼主解决没有?

初看这个问题也没觉得有问题,想试试,但要开始的时候,又觉得有点不对劲,窗体作为它的所有组件的Owner,
负责它所拥有所有组件的释放,释放顺序是,先释放它所拥有的的组件,然后自己关闭。如果按照这个讲法,
它所拥有的组件是不可能检测到窗体的关闭的,因为它在此之前已经不存在了,所以这个功能恐怕是没法实现。

仅代表个人意见,如果其他人有解决方法,请将你的方法贴出来,大家…
[/Quote]

已经解决了,假设在我的组件里面已经获得了他的Owner的窗体变量为FParentForm
我是这样做的,首先定义
typedef void __fastcall (__closure *OnFormClose)( System::TObject* Sender, TCloseAction &Action);
定义OnFormClose TmepFormClose; //主窗体关闭事件
在构造函数里面把FParentForm->OnClose事件截过来,让他等于自己定义的一个函数。但是注意一定要保存到TmepFormClose中。
在我自己的那个函数里面先处理我自己要处理的东西,然后再FParentForm->OnClose = TmepFormClose;之后
PostMessage(FParentForm->Handle,WM_CLOSE,0,0);

不知道会不会产生什么副作用
samchoy 2008-07-07
  • 打赏
  • 举报
回复
至少析构函数会运行

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧