某个对象如何自己消灭自己? 现在有一个叫aFrame的 Tframe对象,aFrame创建出来以后,当这个aFrame对象使用完以后,这个aFrame对象怎么自己销毁自己呢?就好像这个aFrame里面有一个退出按钮,按了这个按钮以后,这个aFrame就销毁! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FreeAndNil(aFrame);这个在哪里执行?在对象里面执行吗?如果在这个对象外部执行我想是没有问题的,但是在对象里面执行好像不是很妥当吧? 我試了一下, 好像沒有好辦法喲.看來你只有利用Visible屬性啦.不知道其它高手有沒有辦法? 把Self.Free;放到类里面执行,只要保证执行这句后,不在对对象成员作其他访问就行了, 看了一下TForm的源代码TForm释放过程是这样OnClose-> case CloseAction of caNone: ModalResult := 0; caFree: Release; end;—〉Release—〉PostMessage(Handle, CM_RELEASE, 0, 0);如果要自己释放自己,可以在按钮里发送CM_RELEASE,不过前提是对象必须要有一个Handle sdzeng(大头鸟) ( ) 所说的,好像有些问题,按我所知的原理来说,释放自己是不可能的,你点击了那个对象里面的退出按钮,点击完以后,这个过程会返回给该窗体,但是该窗体已经不存在了,也就是说返回的内存地址已经有问题了! 创建的时候指定其Owner,一般都是所在的Form。这样,框架的释放会由Form来负责! 又去查了一下代码,给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我测试了一下,是可以的 我测试的代码type TFrame2 = class(TFrame) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations }..........procedure TFrame2.Button1Click(Sender: TObject);begin Self.Free;end; 组件问题 极度郁闷 TChart显示的区域,在用鼠标拉框后,会放大缩小,如何用代码实现这一功能? 关于actiontoolbar 中文簡體字繁體字的轉換 考试完毕,散分 在DELPHI中能将指定的数据库中指定表中的关键字读出来或者能判断那些字段是关键字段也行,并且还能判断各列是否为空,能实现吗?最好能有 Tadoquery的更新方法,说大一点,数据集的更新方法(读更新) 中国队没有希望了,心情不好! 散分! 哪位大侠写过类似pascal的编译器?请多多指教! 向数据库插入和调出图片的问题 双击SYSTRYAICON图标显示主窗口后,窗口并不是激活的,怎么办?
看來你只有利用Visible屬性啦.不知道其它高手有沒有辦法?
TForm释放过程是这样OnClose-> case CloseAction of
caNone: ModalResult := 0;
caFree: Release;
end;
—〉Release—〉PostMessage(Handle, CM_RELEASE, 0, 0);如果要自己释放自己,可以在按钮里发送CM_RELEASE,不过前提是对象必须要有一个Handle
给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我测试了一下,是可以的
type
TFrame2 = class(TFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
..........procedure TFrame2.Button1Click(Sender: TObject);
begin
Self.Free;
end;