手把手教你制作ActiveX控件
vb吧
全部回复
仅看楼主
level 13
事先声明:这一点也不难!
2013年04月05日 12点04分 1
level 13
好,现在开始上课。
首先要做基本设置。
1.添加工程,类型[ActiveX 控件].
2.把工程的Name属性改成Label.
2013年04月05日 12点04分 2
忘说了,本楼的范例是一个能垂直居中的标签(Label)控件
2013年04月05日 13点04分
level 13
3.设定控件外观:
(1)添加一个Label控件.
(2)设置Label的Alignment为2(Center).
(3)把Label置于窗体中央.
2013年04月05日 12点04分 3
level 13
接下来为控件执行初始化事件设置。
4.添加控件的基本事件:
(1)读取属性事件:
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
On Error Resume Next
m_backstyle = 0
Set Label1.Font = PropBag.ReadProperty("Font", Ambient.Font)
Label1.ForeColor = PropBag.ReadProperty("ForeColor", &H80000008)
Label1.Caption = PropBag.ReadProperty("Caption", "")
Label1.BackColor = PropBag.ReadProperty("BackColor", "")
End Sub
(2)写属性事件:
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
On Error Resume Next
Call PropBag.WriteProperty("BackColor", UserControl.BackColor, &H8000000F)
Call PropBag.WriteProperty("Font", Label1.Font, Ambient.Font)
Call PropBag.WriteProperty("ForeColor", Label1.ForeColor, &H80000008)
Call PropBag.WriteProperty("Caption", Label1.Caption, "CMX")
End Sub
(3)重设大小事件(在改变Width和Height属性时被触发)
Private Sub UserControl_Resize()
With Label1
.AutoSize = True
.AutoSize = False
.Left = 0
.Top = (UserControl.Height - .Height) / 2
.Width = UserControl.Width
End With
End Sub
好了,写了这么多,你一定会需要点时间消化,稍事休息,马上回来!
2013年04月05日 13点04分 4
level 13
好!休息时间结束!(我打字好累啊!)
接下来我们为ActiveX控件添加属性。
5.设定属性:
(1)选择[工具]菜单,单击[添加过程].
(2)输入属性名,选择类型为[属性].
(3)单击[确定],完成属性添加.
2013年04月05日 13点04分 5
level 13
然后开始添加各种属性。
(4)设定Font属性:
Public Property Get Font() As Font
Set Font = Label1.Font '将用户控件的font属性设置为控件上label1控件的font属性
End Property
Public Property Set Font(ByVal New_Font As Font)
Set Label1.Font = New_Font '将用户修改后的font属性赋给label1.font
UserControl_Resize'由于字体会改变显示大小,所以重设控件大小
PropertyChanged "Font" '修改用户控件的font属性为最新的属性
End Property
2013年04月05日 13点04分 6
level 13
然后开始添加各种属性。
(4)设定Font属性:
Public Property Get Font() As Font
Set Font = Label1.Font '将用户控件的font属性设置为控件上label1控件的font属性
End Property
Public Property Set Font(ByVal New_Font As Font)
Set Label1.Font = New_Font '将用户修改后的font属性赋给label1.font
UserControl_Resize'由于字体会改变显示大小,所以重设控件大小
PropertyChanged "Font" '修改用户控件的font属性为最新的属性
End Property
2013年04月05日 13点04分 7
level 13
(5)设定BackColor属性:
Public Property Get BackColor() As Long
BackColor = Label1.BackColor
End Property
Public Property Let BackColor(ByVal New_BackColor As Long)
If Abs(New_BackColor) < 16777216 Then
'Label1.BackColor = Abs(New_BackColor)
UserControl.BackColor = Abs(New_BackColor)
PropertyChanged "BackColor"
End If
End Property
(6)设定ForeColor属性:Public Property Get ForeColor() As Long
ForeColor = Label1.ForeColor
End Property
Public Property Let ForeColor(ByVal New_ForeColor As Long)
If Abs(New_ForeColor) < 16777216 Then
Label1.ForeColor = Abs(New_ForeColor)
PropertyChanged "ForeColor"
End If
End Property
2013年04月05日 13点04分 8
level 13
(7)设定Caption属性:
Public Property Get Caption() As String
Caption = Label1.Caption
End Property
Public Property Let Caption(ByVal New_Caption As String)
Label1.Caption = New_Caption
PropertyChanged "Caption"
End Property
2013年04月05日 13点04分 9
level 13
最后一步是设置控件相应的事件。
添加事件使用Event语句。
这个控件需要定义三个事件。
6.设定控件事件:
Event Click()'设定单击事件,它应该在Label单击时被触发
Event Change()'设定更改事件,它应该在Label双击时被触发
Event DblClick()'设定双击事件,它应该在Label更改时被触发
Private Sub Label1_Change()
RaiseEvent Change'触发Change事件
End Sub
Private Sub Label1_Click()
RaiseEvent Click'触发Click事件
End Sub
Private Sub Label1_DblClick()
RaiseEvent DblClick'触发DblClick事件
End Sub
设定控件事件很简单吧?我学的时候也很惊奇
2013年04月05日 13点04分 10
level 13
最后一步是设置控件相应的事件。
添加事件使用Event语句。
这个控件需要定义三个事件。
6.设定控件事件:
Event Click()'设定单击事件,它应该在Label单击时被触发
Event Change()'设定更改事件,它应该在Label双击时被触发
Event DblClick()'设定双击事件,它应该在Label更改时被触发
Private Sub Label1_Change()
RaiseEvent Change'触发Change事件
End Sub
Private Sub Label1_Click()
RaiseEvent Click'触发Click事件
End Sub
Private Sub Label1_DblClick()
RaiseEvent DblClick'触发DblClick事件
End Sub
设定控件事件很简单吧?我学的时候也很惊奇
7.控件制作完了,编译出来就可以用了!
2013年04月05日 13点04分 11
level 13
最后一步是设置控件相应的事件。
添加事件使用Event语句。
这个控件需要定义三个事件。
6.设定控件事件:
Event Click()'设定单击事件,它应该在Label单击时被触发
Event Change()'设定更改事件,它应该在Label双击时被触发
Event DblClick()'设定双击事件,它应该在Label更改时被触发
Private Sub Label1_Change()
RaiseEvent Change'触发Change事件
End Sub
Private Sub Label1_Click()
RaiseEvent Click'触发Click事件
End Sub
Private Sub Label1_DblClick()
RaiseEvent DblClick'触发DblClick事件
End Sub
设定控件事件很简单吧?我学的时候也很惊奇
7.控件制作完了,编译出来就可以用了!
2013年04月05日 13点04分 12
level 11
哦!原来是这样啊,学习了
2013年04月05日 13点04分 13
level 11
早会了…不过还是给楼主顶个
2013年04月05日 13点04分 14
level 11
标注 留名
2013年04月05日 13点04分 15
level 12
怒马,狂顶
2013年04月05日 13点04分 16
level 14
做的太不专业了,不过只适合新手。
首先,你没弄“过程属性”,可以在描述上写帮助文档。你注意过没有,VB.Label在设计模式下修改Caption属性是打一个字刷新一次,而你的是要按回车键或切换到其它属性才刷新,在“过程标识符”上选上Caption试试。记得把Caption属性在“属性分类”上选“外观”。
VB.Label可以直接对控件名赋值实现对Caption赋值,在“对象浏览器”可以查看到有个叫“_Default”的隐藏属性,它的作用相当于VC的重载赋值运算符和重载类型转换。你在你的控件里添加一个叫“Default”的属性,里面把Caption包装一下,然后在“过程属性”里把“过程标识符”设为“(缺省)”,并把“隐藏该成员”勾上,看看你的控件是不是可以直接对控件名赋值了。
VB.Label在别的上切换过来时,会自动切换到Caption上,双击VB.Label时,会进入Click事件的编写,你试试在过程属性里把Caption和Click的选项中的“缺省用户界面”勾上。
还有Label是不带窗口的(把Windowless设为False)。
另外对于一个小小的标签,不建议使用AutoRedraw,这样太费内存了,请在Paint事件中绘制文本。
2013年04月05日 14点04分 17
level 13
实用就好 客户不会看你的代码写的专不专业 我的dll更不专业 说白点 我的dll代码里面没用到 Property Let Get 但是太实用了 哈哈哈
2013年04月05日 15点04分 18
这是控件的基本要求,它的颜色属性使用Long类型,就注定没人会用。
2013年04月05日 15点04分
回复 yjryym :当然 要让人调用的 dll 首先得自己先调适
2013年04月05日 15点04分
颜色OLE_COLOR本身就是LONG型的,看作者的用途,自己用写写也无妨
2013年04月16日 02点04分
level 14
还有颜色属性的类型不是Long,Long是有符号的32位整数,stdole提供了颜色类型OLE_COLOR,它的原型就是VC的无符号32位整数。在VB中颜色属性必须设为这个类型,才可以在设计模式下的“属性浏览器”中带上调色板。
VB6还有一个“调色板”视图,用来更加方便的调整控件颜色。要想属性支持“调色板”视图,必须把“前景色”属性的过程标识符设为“ForeColor”,“背景色”属性的过程标识符设为“BackColor”。
这样就可以使用调试板控制控件的颜色了。
这样做出来的才叫控件。
2013年04月05日 15点04分 19
这。。。你这很专业。。。。。Active控件我用得很少。就是带起来不是很方便,还容易留下注册垃圾。。。
2013年04月05日 17点04分
回复@《顾名思义》 :ActiveX控件我也很少用。我做控件一般都直接放exe里。
2013年04月06日 00点04分
回复 yjryym :然后再Binary出去吗?
2013年04月06日 06点04分
回复@《顾名思义》 :我最不喜欢释放文件了,我的固态硬盘伤不起。ctl文件可以直接放到exe工程里生成单个exe,并且链接器还可以过滤掉为使用的函数。
2013年04月06日 08点04分
level 7
马克·刘明
2013年04月05日 15点04分 20
1 2 尾页