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 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分