我先继承了一个ToolBar,然后覆盖了ToolBar的Create方法,在Create方法中构造了几个Button,设置了ToolBar和Button的Parent,覆盖了Loaded方法,在Loaded方法中设置几个Button的属性。但是必须在程序中有下面一句:
if not (csDesigning in ComponentState) then
否则程序在运行时总出错,而且打开一次多几个Button,我想这是组件每一次在csDesigning状态下都在构造Button。
但是我希望能在设计时看见Button并设置几个Button的Action,我看了一些Delphi的源码,但Delphi的控件大部分没有通过组合生成的(可能有,但我没找到)。
请问大家这个问题如何解决的?
刚学Delphi,请多指教.
if not (csDesigning in ComponentState) then
否则程序在运行时总出错,而且打开一次多几个Button,我想这是组件每一次在csDesigning状态下都在构造Button。
但是我希望能在设计时看见Button并设置几个Button的Action,我看了一些Delphi的源码,但Delphi的控件大部分没有通过组合生成的(可能有,但我没找到)。
请问大家这个问题如何解决的?
刚学Delphi,请多指教.
解决方案 »
- Delphi新手,谁能帮我
- 关于Imagelib VCL/DLL Library Corporate Suite 6.0
- 刚刚有了四个裤衩,今天生日,放200分庆祝一下。
- 共享工程、窗体
- 怎样取消DBGrid的选中状态??解决后立即揭帖
- 怎么调用SHELL命令啊?在DOS下好像可以的。
- 请教制作安装盘的setup factory哪儿有?
- 一个关于INI文件读取关键字的值的问题?在线!
- 同志们!那里有'Object Pascal's Language Guide'下载!
- 100分再问一个关于线程的难题
- combobox向listbox添加内容时,如何让已经添过的内容别在重复添加?
- 我在用socket做客户端连服务器时,运行时提示'error loading midas.dll'怎么处理呀?
在TMediaplay和TDBNavigator中,从TCustomPanel继承,而我的例子从TToolBar继承。
TCustomPanel是容器控件,而TToolBar不是。在TCustomPanel的子类的Create方法中使用如下代码:(来自TDBNavigator)
...
Btn := TNavButton.Create (Self);
...
Btn.Parent := Self;而在我的代码中使用:(TToolBar子类的Create方法)
self.Parent := TWincontrol(AOwner);
Btn := TSpeedButton.Create(AOwner);
Btn.Parent := self;主要区别好像在Create(Self)和Create(AOwner)。
我的理解是:在组件的Create(AOwner: TComponent)方法中指定的是组件的所有者(我取的名),
所有者和Parent是不同的两个概念。容器类控件能够成为所有者,但一般的控件不行,所以在
ToolBar的子类中不能使用Create(Self),而只能使用Create(AOwner),AOwner其实是ToolBar的
所有者。所以TCustomPanel的子类中的控件在设计时是没有焦点的,而ToolBar的子类中的控件在
设计时有焦点。不知道我的理解对不对?现在的问题应该是:在非容器类控件中组合其他控件,如何让控件在设计时和运行时保持一致?就是说可见、最好有焦点。欢迎大家讨论。
2、AOwner和Parent是不同的,Parent决定控件现实的地方,控件在设计过程中都是不可见的,所以不知道搂住说的焦点是怎么回事。
谢谢关注。
1、不在ToolBar的Create方法中设置Button的参数,我的理解是此时ToolBar还没有构造完成,ToolBar中的某些子控件的属性设置无效,例如:Button的Left和Width,在ToolBar的Create中,设置Button的Width能改变Button的宽度,但设置Left却不能改变Button的位置,因为Button的Width属性和ToolBar没有关系,而Left属性却是相对ToolBar而言的,所以在ToolBar没有构造完成时,设置Button的Left没有效果。
2、我说的设计时和运行时是这样的:例如:一个控件拖放到一个Form上,此时是控件的设计时;应用程序在运行过程中是控件的运行时。我不是指在编写控件的过程中。所谓焦点,是指控件在设计时能被选择,并能在Object Inspector中设置属性,例如:一个TDBNavigator,整个TDBNavigator具有焦点,但TDBNavigator中的每个按钮就没有焦点。