某个对象如何自己消灭自己?

努力偷懒 2005-08-23 10:37:50
现在有一个叫aFrame的 Tframe对象,aFrame创建出来以后,当这个aFrame对象使用完以后,这个aFrame对象怎么自己销毁自己呢?

就好像这个aFrame里面有一个退出按钮,按了这个按钮以后,这个aFrame就销毁!
...全文
191 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Geranium 2005-08-25
  • 打赏
  • 举报
回复
不错,做个记号学习~
努力偷懒 2005-08-25
  • 打赏
  • 举报
回复
嗯嗯!大头鸟的方法是真的可以哦!谢谢!
sdzeng 2005-08-24
  • 打赏
  • 举报
回复
我测试的代码
type
TFrame2 = class(TFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
..........

procedure TFrame2.Button1Click(Sender: TObject);
begin
Self.Free;
end;
sdzeng 2005-08-24
  • 打赏
  • 举报
回复
又去查了一下代码,
给TFrame自己发送CM_RELEASE的确不可行,
这是因为TFrame没有TForm那样的消息处理函数来响应CM_RELEASE消息

这是TCustomForm的消息函数
procedure CMRelease(var Message: TMessage); message CM_RELEASE;
procedure TCustomForm.CMRelease;
begin
Free;
end;

所以要实现楼主的功能,得在TFrame里调用Self.free

我测试了一下,是可以的
广州接入 2005-08-24
  • 打赏
  • 举报
回复
创建的时候指定其Owner,一般都是所在的Form。这样,框架的释放会由Form来负责!
阿呆_ 2005-08-24
  • 打赏
  • 举报
回复
返回的内存地址当然没问题, 别把你使用的堆内存地址(这个被释放了)和执行代码所在的代码地址搞混了.
努力偷懒 2005-08-24
  • 打赏
  • 举报
回复
sdzeng(大头鸟) ( ) 所说的,好像有些问题,按我所知的原理来说,释放自己是不可能的,你点击了那个对象里面的退出按钮,点击完以后,这个过程会返回给该窗体,但是该窗体已经不存在了,也就是说返回的内存地址已经有问题了!
努力偷懒 2005-08-23
  • 打赏
  • 举报
回复
嗯!是啊!我想也就只有这样了!不过第一次销毁对象好像没问题!第二次就有问题了!
konhon 2005-08-23
  • 打赏
  • 举报
回复
我試了一下, 好像沒有好辦法喲.
看來你只有利用Visible屬性啦.

不知道其它高手有沒有辦法?
努力偷懒 2005-08-23
  • 打赏
  • 举报
回复
FreeAndNil(aFrame);这个在哪里执行?在对象里面执行吗?如果在这个对象外部执行我想是没有问题的,但是在对象里面执行好像不是很妥当吧?
konhon 2005-08-23
  • 打赏
  • 举报
回复
看錯啦
konhon 2005-08-23
  • 打赏
  • 举报
回复
FreeAndNil(aFrame);
sdzeng 2005-08-23
  • 打赏
  • 举报
回复
看了一下TForm的源代码
TForm释放过程是这样OnClose-> case CloseAction of
caNone: ModalResult := 0;
caFree: Release;
end;
—〉Release—〉PostMessage(Handle, CM_RELEASE, 0, 0);

如果要自己释放自己,可以在按钮里发送CM_RELEASE,不过前提是对象必须要有一个Handle

蓝色光芒 2005-08-23
  • 打赏
  • 举报
回复
把Self.Free;放到类里面执行,只要保证执行这句后,不在对对象成员作其他访问就行了,

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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