看不懂自已写的程序了:((55分)

  • 主题发起人 主题发起人 qlw
  • 开始时间 开始时间
Q

qlw

Unregistered / Unconfirmed
GUEST, unregistred user!

这段程序是过年前随手写的,是在一个已有的mainmenu的第一列子菜单
加上一个名为reopen的项。当时运行成功,现在再看,突然产生了疑惑:
请看做记号的那一行,按我的理解,self指的是form1,而m是menuitem,
为什么据我试验,用m和self都是可以的?

procedure TForm1.create(Sender: TObject);
var m:TmenuItem;
begin
m:=MainMenu1.Items.Items[0];
item:=TmenuItem.Create(m{self});//'self' and 'm' is all
// acceptable
try item.Caption:='reopen';
item.OnClick:=myclick;
m.Insert(2,item);
except
item.Free;
end;

 
应该用self,因为tmenuitem.create需要的参数是menuitem的owner,owner负责
在程序结束时删除menuitem,owner应该是form1.delphi help里的例子用的就是self.
 
用m 和 self 都可以.
参数作为item的拥有者,只要是Tcomponent的后代即可.
习惯上用self
 
对,看了一下tcomponent的源码,m和self是都可以的,刚才我说错了
 
不过注意m不能是nil
 
m可以为nil,不过如果Owner没有Form那样的释放子控件的能力的话,程序应该
自己释放,注意释放顺序,先item,后m!!!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
334
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
881
import
I
后退
顶部