怎么生成OCX?(45分)

  • 主题发起人 主题发起人 cw1
  • 开始时间 开始时间
C

cw1

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用DELPHI做一个OCX,但是使用New-ActiveX Control时,
能继承的类里面只出现了一部分已经安装的控件,
那么什么样的控件才能继承呢?
例如,我已经有一个Office风格按钮的PAS文件,可以在
DELPHI里面使用,现在我想把它生成一个OCX,以便在其他
程序里面也可以使用,这个PAS里的控件是从TGraphicControl
继承的,New-ActiveX Control里面就没有它,怎么办?
 
看一看delphi所写的Ocx程序,其实不难!只是封装了Vcl的类,
让delphi生成Ocx的框架,自己写!
 
首先,自己做一个DELPHI控件,从TCustomControl继承,或者
把你的已有的控件改为从TCustomControl继承。最好在该控件中
实现ACTIVEX所要实现的功能。做好后安装。

接着,New ActiveX Control,这时,继承类的列表中就有了你
已经做好的控件,选中它,生成ACTIVEX,其余的DELPHI替你
做好了。
 
ActiveX Control必须是一个Windowed Control才行, 从TGraphicControl继承来
的控件不是Windowed Control, 故而不能够用Delphi封装成ActiveX(即使在VC++
中也必须是一个Windowed Control).

3hu的说法是正确的, 因为TCustomControl是直接从TWinControl继承来的. TCustonControl与TWinControl的区别在于TCustomControl有一个Canvas属性用来
画图. 对于按钮, 可以改写成从TCustomControl继承关系, 不会有太大的改动.

另外可以参考TToolBar, 搞一个WindowedBar, 然后增加AddButton函数来添加非
WindowedControl(如: TSpeedButton).
 
可是我现在有的只是一个从TGraphicControl得到的按钮,
怎么改最方便呢?
 
没有源码,只有Dcu文件,能否生成ActiveX控件
 
你的按钮是直接从TGraphicControl继承来的还是间接继承来的?

1. 如果是直接继承来的, 问题就简单了 -- 只需要该第一句, 如:
TMyButton = class(TGraphicControl)
| 改写成
V
TMyButton = class(TCustomControl)
2. 如果是间接继承来的, 你就有麻烦了, 那就需要从它的父类向上查, 一直查到
TGraphicControl为止, 然后将他爹,他爷爷,他祖宗...合并成一代新的控件,
或者的重新写过.

3. 另外一个折中的办法是, 继承一个TWinControl, 把你的按钮当作它的一个变量,
在Create时动态创建他, 并且把所有的按钮的属性,方法,事件转换成新控件的属
性,方法事件, 将消息导向到按钮的相应的消息.
 
接受答案了.
 
后退
顶部