关于组件开发的一个小问题(200分)(200分)

  • 主题发起人 主题发起人 Fencer
  • 开始时间 开始时间
F

Fencer

Unregistered / Unconfirmed
GUEST, unregistred user!
如何编写一个组件可以使别的组件放在它上面,并且在它上面的组件的
Owner和Parent都是该组件句柄。
比如从TCustomPanel继承一个组件可以让别的组件放在它上面但只有Parent
值是该组件而Owner的值却不是该组件。
只说明思路即可,如:
如果要别的组件能放在上面要重载什么方法或扑捉什么事件。
 
你对owner的理解可能有偏差,owner是负责释放相应控件内存的控件,这个属性在控件
建立时,由传递给create方法的参数确定的,一旦确定,不能更改。而设计状态下建立的
控件的owner,全部都会设置成它所在的form。
如果要使控件的owner是其他控件,只能动态建立控件,传递给create方法相应的参数。
 
这个道理我也知道,不过现在我要得到放在我的组件上的所有组件,如果通过
Components属性只能得到Owner所有的组件,不能得到Parent是它的组件。不知
有没有好办法。
另外我想别的组件放上来时肯定会有消息通知我的组件,即然它能有Form构造那
就应该有一个地方重载该方法,用自己的方法构造该组件。
 
组件的属主是可以改变的,具体例子在《Delphi高级开发指南》第一章里有,但你要这有什么
用,Owner只是用来解除组件用的!如果你要截获组件创建时消息可覆载Notification过程
格式据如下:
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
当Operation=opRemove表示AComponent组件被删除,Operation=opInsert表示有新组件被创建。
你可以在有新组件建立时判断其Parent属性,再动态改变其Owner。
>>不过现在我要得到放在我的组件上的所有组件:你只需用Controls属性和ControlCount就可以
了我写的程序就是这么用的。看看Delphi的在线帮助:
Controls is an array of all the child controls of the windowed control.
All of the child controls of the windowed control list the windowed control
as their <font color=#ff0000>Parent property</font>
 
整整一天上不来。如果是截获组件创建时消息确实是用notification方法,但如果你只是
要得到你的组件上面的组件,用controls属性即可(对继承自twincontrol的类)。
 
才发现我说的balaschen都说了。不好意思。
 
多人接受答案了。
 
后退
顶部