RegisterComponents与RegisterNoIcon
写组件时,一般会用到这两个函数
1 procedure RegisterComponents(const Page: string; const ComponentClasses: array of TComponentClass);
2 procedure RegisterNoIcon(const ComponentClasses: array of TComponentClass);
函数1注册的一般会出现在面板上,如可视的TEdit,不可视的TMainMenu, TActionList
函数2注册的不会出现在面板上,如TMenuItem, TAction
那么在运行时,能否用代码来判断某个组件是如何注册的
实际上我的想作一个窗体编辑器,RegisterComponents的非可视组件我需要显示,而RegisterNoIcon注册的组件不需要显示,所以我希望能判断一下以便我分别处理
嗯,从是否TControl判断可能行不通,例如TActionList,TAction,TMenuItem,TMainMenu都不是TControl但Delphi的IDE会在设计窗体时,显示TActionList,TMainMenu,而不显示TAction,TMenuItem,
请指教,谢谢
[解决办法]
稍稍在网上找了下资料,有一个思路供参考
可以考虑使用 GExperts
http://www.gexperts.org/
它有一个功能,可能得到delphi的菜单的中的Component的Configure Palette中所有可视控件图标
在http://www.gexperts.org/otafaq.html的
How can I paint the palette bitmap for a specific component
我的思路是如果能得到图标的为可视控件,得不到的为非可视控件
当然,它可能可以得到所有 palette 中控件名称,那就简单了,在palette 中的为可视控件,不在palette中的为非可视控件
它支持从d6~d2010
[解决办法]
可视控件一般从TControl派生,不可视控件从TComponent派生
但你要区分的并不是可视/不可视
[解决办法]
[解决办法]
這個問題跟你上次問的有點像...
about.com有篇文章,說明了TActionList是如何創建出TAction或TDataSet如何創建TField,TField和TAction這兩者並沒有註冊在組建面板上面,如你說的RegisterNoIcon。
從它的創建過程,或許可找出判斷方法,還有你上次的問題的答案!
http://delphi.about.com/library/bluc/text/uc092501d.htm
[解决办法]
参考这个
http://blog.csdn.net/9913220/archive/2004/09/23/114095.aspx
不过有点“后遗”症。:)
