如果获取Form上的MainMenu控件?(200分)

  • 主题发起人 主题发起人 Wescom
  • 开始时间 开始时间
W

Wescom

Unregistered / Unconfirmed
GUEST, unregistred user!
在开发一个控件。
请问设计时当该控件被放置到Form上时,如何获取Form
上的所有MainMenu控件,并放置到一个属性中,通过下拉
框来选择所需的MainMenu。


谢谢
 
不会吧,这样的问题没人抢???

其实很简单啦,用
var
I: Integer;
begin
for I := 0 to Parent.ComponentCount - 1 do
begin
if Parent.Components is TMainMenu then AMenuList.Add(...);
end;
end;

 
如果你所定义的属性是TMainMenu的话,不用写任何代码,Delphi会自动帮你
找到所以在Form上的所有TMainMenu组件。
 
TFORM有一个属性:MAINMENU。
 
刚才打错了,TFORM有一个属性:MENU。
 
Zephyr: 我是要在设计时实现该功能。你所给的代码应该放在控件的什么地方呢?
之后如何使用所选定的TMainMenu呢?难道又去按TMainMenu.Name查找一次?

JohnsonGuo:哇,有这么好的功能?属性的读写用什么?直接用TMainMenu吗?
property MyMenu : TMainMenu read TMainMenu write TMainMenu;??

阿朱: 如果Form上有不止一个TMainMenu呢?

多谢各位。
 
如果你仅仅只是想在Design Time时显示一个TMainMenu对象的列表让编程者选择,
就象Form的Menu属性那样,你只需给你的控件加入一个published的属性,该属性
的类型为TMainMenu。

如果你想有一个TMainMenu列表,
先在你的控件Create时用我上面写的代码找到所有的TMainMenu(但你
的控件必须是直接放在Form上的,而不能放在某个容器控件中,为什么要这
样你看看代码就明白了),找到后用某个TList之类的东东记下它们,然后
在需要时(例如你的控件的某个属性需提供一个这样的列表让人选择时)就
可以用了。此外,你还必须重载TComponent的一个virtual的方法:
procedure Notification(AComponent: TComponent; Operation: TOperation);
此方法在Form中添加或删除控件时会被调用,通过判断AComponent的类型,根据
Operation的值(opInsert或opRemove)来管理那个TMainMenu对象的列表。我想
你应该明白我的意思吧?

***以上纯属纸上谈兵,未经过实践检验。

 
Zephyr:
该属性的读写方法如何申明?直接用 read TMainMenu write TMainMenu不行。
 
刚看了TForm的源代码,已经知道该怎么做了,多谢各位。
 
多人接受答案了。
 
后退
顶部