创建组件时的问题(100分)

  • 主题发起人 主题发起人 TomCatlingle
  • 开始时间 开始时间
T

TomCatlingle

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(!]
我现在想做一个控件;是一个继承Tcustomdbgrid的组件;
如果我在其中使用了一些其他的控件;比如说:TTABLE类;或可视类TBUTTON;
那么创建是使用 TOBJECT.CREATE(AOwner);这里AOwner是使用nil;self;还是application;
这三个使用起来有什么不同?
 
二、self和sender的区别:

  在事件处理程序参数表中,至少含有一个参数sender,它代表触发事件处理程序的构件,如在上例中,sender就指button2,有了sender参数,可以使多个构件共用相同的事件处理程序,如下例:

  procedure tform1.buttonclick(sender:tobject);
  begin
  if sender=button1 then
  label1.caption:=′看庭前花开花落′  else label2.caption:=′望天上云卷云舒′
  end;

  在此例中,button1,button2共用了buttonclick事件处理程序。

  self是指所编的程序范围是在哪一个类中,delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表tform1。另外应注意,self只能用在类方法中,而不能用在过程或函数中,如下例用法是错的:function a1(b:integer):integer;
  begin
  ……
  button:=tbutton.create(self);……
  end;  

 

搬个板凳先~~~~
 
可是如果是nil;application呢?
比如说:
tspanel=class(panel)
procedure refrshcaption;
.....
published
property caption.......;
....
end;
.....
procedure refreshcaption
begin
...
tpanel(self).caption:='';
{这里的tpanel(self)指得是什么意思?是不是和caption:=''一个意思;}[:(!]
;
 
我认为问题的关键是对象的生存期管理,sameObject:=TSameObject.Creat(AOwner)
当AOwner析构时候连同sameObject一起释放,如果是nil的话必须手动释放,否则引起
内存泄漏 self是指对象自己 application :应用程序
另外一个原因是AOwner的数据类型,如果是self的子类,或没有联系可以使用nil
〉〉仅供参考
 
后退
顶部