Panel需要在设计期容纳其他控件的问题(200分)

P

Passion

Unregistered / Unconfirmed
GUEST, unregistred user!
请教高手们一个刚遇到不久的问题,我在写控件的时候需要在这个自定义的可视化控件上
排一些基本相同的东西,因此继承了TCollection和TCollectionItem,在TCollectionItem
里放了个FPanel,Parent设为控件本身,可现在才发现我需要以此Panel做容器在设计期让
用户自己放另外的控件,但这个Fpanel在设计期间根本不能被选中,也就没法子容纳其他东西。

请问大家有什么好点儿的解决方法没?
 
已有的控件,有没有和你的设计类似的?
不知道从何思考?
 
像PageControl和TabSheet,TabSheet附在PageControl上,TabSheet可以作为容器放其他
控件。我的理解是TTabSheet是继承于TWinControl的类,可以做容器,而我的FPanel是作为
TCollectionItem子类的一个成员变量而存在的,即使设置了Parent,能在本控件上显示
出来,但就是没法子在设计期给它加上东西。
 
不会阿,应该可以的,你是不是在你的控件的CREATE事件中没有生成PANEL?
 
生成了,并且设置Parent后已经显示出来了。
我在Create的时候把它的Color属性特意设置了一下,以便在设计期看看。
轻松虎兄的意思是用TFrame取代TPanel?我觉得这两者没什么区别,不过我去试试看看。
 
从panel继承然后再加进TCollection和TCollectionItem,这样子就可以了。
 
为你继承的 TCollectionItem 增加一个 Frame(别的也行) 属性,
让用户在设计的界面上放一个设计好的 Frame,编辑你的某个CollectionItem中的
Frame 属性(如果 Frame 已经在当前窗体里,则 Object Inspector里应该可以下拉选取)
你的CollectionItem控件既然能把 Panel 显示出来,那么接下来只要判断新加的
Frame 属性是否为 nil ,如果不是 nil 则把 Frame 对象的 parent 设成 panel.
然后 alignClient 一下。
 
这种做法我比较明白了,但还是不如“直接在TabSheet上放置其他控件”一样方便,
而是需要用户自己弄一个Panel之类的东西,然后用户通过设置属性来把它摆弄进Fpanel中。
DarkAngle的我不太明白。从panel继承然后再加进TCollection和TCollectionItem,这样岂不会
失去TCollectionItem的那样的编辑特性?

 
你可能要自己编一个控件编辑器插件,用于在设计时编辑你的控件。
其实象表格控件之类的列编辑器,也都是以插件的形式制作的!
 
顶部