查看: 3  |  回复: 0
  VB6 写.OCX控件
楼主
发表于 今天 15:40

用VB写OCX控件

一、 OCX简介OCX,即对象类别扩充组件。控件的最大好处是可重复利用,甚至可以在不同的编程语言之间使用,例如可以在VB中嵌入使用VC开发的控件。

二、用VB做一个OCX控件

1、打开VB6.0,鼠标点击左上角“文件(F)”,选择“新建工程(N)”。在弹出的对话框中选择“ActiveX控件”选项,点击“确定”按钮。

2、进入主界面,将工程名从默认的“工程1”改为“timectrl”,包括属性中的“工程1”。

3、用记事本打开 UserControl1.ctl ,我已经帮你写好了“Label”控件和一个“Timer”控件。UserControl1.ctl 的代码是:

VERSION 5.00
Begin VB.UserControl UserControl1 
   ClientHeight    =   2250
   ClientLeft      =   0
   ClientTop       =   0
   ClientWidth     =   3105
   BeginProperty Font 
      Name            =   "Tahoma"
      Size            =   8.25
      Charset         =   0
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty
   ScaleHeight     =   2250
   ScaleWidth      =   3105
   Begin VB.Timer Timer1 
      Interval        =   1000
      Left            =   1080
      Top             =   1440
   End
   Begin VB.Label TimeShow 
      AutoSize        =   -1  'True
      BackStyle       =   0  'Transparent
      Caption         =   "Label1"
      Height          =   195
      Left            =   480
      TabIndex        =   0
      Top             =   600
      Width           =   3585
   End
End
Attribute VB_Name = "UserControl1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit

Private Declare Sub GetLocalTime Lib "kernel32" (lpsystemtime As SYSTEMTIME)

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Sub Timer1_Timer()
    Dim sysTime As SYSTEMTIME
    Dim strTime$
    
    GetLocalTime sysTime
    
    With sysTime
        strTime = .wYear & "-" & _
            .wMonth & "-" & _
            .wDay & " " & _
            .wHour & ":" & _
            .wMinute & ":" & _
            .wSecond
    End With

    TimeShow.Caption = strTime
End Sub

6、运行代码。

(1)点击“运行(R)”。

(2)点击“允许阻止的内容(A)”,在弹出的对话框中选择“否”,而不是“是”。

(3)点击“否”之后,将会出现如下界面。显示的内容为“2026-4-4 15:44:37”,也就是此时的系统时间,并且时间是一秒一秒地增加的。

我们可以打开看下 C:\Program Files (x86)\Microsoft Visual Studio\VB98\UserControl1.html 的代码是:

<HTML><BODY><OBJECT classid="clsid:6243895F-95D3-4AB9-A1B2-600197864BBE">
</OBJECT></BODY></HTML>

7、在“文件”菜单里选择“生成timectrl.ocx”命令将这个OCX控件文件保存下来,这样一个OCX控件的制作就完成了。

注意:如果点击“确定”按钮后,会弹出“访问系统注册表错误”提示对话框。采取的解决方案是:右击VB图标,打开属性,点击兼容性,设置为以管理员身份运行此程序,再打开就不会提示出错了。


三、 对OCX控件的测试

(一)在VB上的测试

1、打开VB6.0,选择“标准EXE”程序,然后在“工程”菜单里选择“部件”命令,这时会弹出如下图所示的“部件”对话框,点击“浏览”按钮,找到刚才生成的那个timectrl.ocx,然后点击“确定”按钮,完成部件的添加操作。

2、在控件工具条中会看到多一个控件(下图中的最后一个控件),这个多出来的控件就是刚才做的OCX控件。

3、将这个控件拖放到主界面上,然后执行程序,会看到类似于下图所示的结果,并且时间是一秒一秒地增加的。

(二)在VC上的测试

1、为了确保timectrl.ocx是已注册的控件,运行:regsvr32对这个OCX控件进行注册,即使注册过了,再注册也没什么负面影响。
详细步骤:以管理员身份运行命令提示符,访问timectrl.ocx所在位置,成功注册。

2、打开VC6.0,建立一个MFC对话框工程。

3、在对话框任一空白处鼠标右击,选择“插入ActiveX控件 …”。

4、在“插入ActiveX控件”下拉框里找到timectrl.UserControl1,它所对应的路径是刚刚注册的路径,点击“确定”按钮,如下图所示。

5、结果如下图所示,并且上面的时间和VB测试程序上都是逐秒改变的。

至此,用VB写OCX控件就完成了。

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2026 MaNongKu.com