Office中国论坛/Access中国论坛

标题: 求控件自动注册实例! [打印本页]

作者: 真主    时间: 2005-9-17 23:31
标题: 求控件自动注册实例!
求控件自动注册实例!

smartday的档案管理中的控件注册

[此贴子已经被作者于2005-9-17 15:36:15编辑过]


作者: wu8313    时间: 2005-9-18 00:43
试试这两段代码:1、Function AutoRegFile(FileName As String)

Dim reged As Boolean

Dim RegFile1 As String

Dim RegFile2 As String

Dim BeReg As String

Dim RetVal

BeReg = CurrentProject.Path & "\" & FileName

RegFile1 = Environ("windir") & "\system\regsvr32.exe "

RegFile2 = Environ("windir") & "\system32\regsvr32.exe "

If Dir(RegFile1) <> "" Or Dir(RegFile2) <> "" Then

       If Dir(RegFile1) <> "" Then

            RegFile1 = RegFile1 & "/s" & " " & BeReg

            RetVal = Shell(RegFile1, 1)

        Else

            RegFile2 = RegFile2 & "/s" & " " & BeReg

            RetVal = Shell(RegFile2, 1)

        End If

Else

        MsgBox "找不到regsvr32.exe文件,你可能无法使用本软件!", vbCritical, "无法自动注册控件"

End If

End Function

使用方法:

把控件跟mdb文件放在同一个目录里,然后在程序中使用以下语句注册

AutoRegFile "控件名称"

-----------------------------------------------------------2、Function RegOCX(BeReg As String)

    Dim RegFile1 As String

    Dim RegFile2 As String

    Dim RetVal

    RegFile1 = Environ("windir") & "\system\regsvr32.exe "

    RegFile2 = Environ("windir") & "\system32\regsvr32.exe "

    If Dir(RegFile1) <> "" Or Dir(RegFile2) <> "" Then

        If Dir(RegFile1) <> "" Then

            RegFile1 = RegFile1 & "/s" & BeReg

            RetVal = Shell(RegFile1, 1)

        Else

            RegFile2 = RegFile2 & "/s" & BeReg

            RetVal = Shell(RegFile2, 1)

        End If

    Else

        MsgBox "找不到regsvr32.exe文件,无法完成自动注册,您需要手动注册" & BeReg & "这个控件", vbCritical, "无法自动注册控件"

    End If

End Function

------------------------------------------------
作者: 真主    时间: 2005-9-18 03:05
试了,不成功!请指点
作者: smartday    时间: 2005-9-18 17:12
呵呵,我已经在用,可以的
作者: smartday    时间: 2005-9-18 17:15
下面是我用的代码:

Private Sub Form_Open(Cancel As Integer)

  '关闭自定义的工具栏

    DoCmd.ShowToolbar "档案管理", acToolbarNo

    DoCmd.ShowToolbar "档案管理报表工具", acToolbarNo

    '检测后台数据库链接

    Dim hdk As String

    Dim cat As ADOX.Catalog

    Dim tdf As ADOX.Table

    If CheckLinks = False Then    '如果连接错误

        hdk = CurrentProject.Path & "\date\档案管理_date.mdb"

        Set cat = New ADOX.Catalog

        Set cat.ActiveConnection = CurrentProject.Connection

        Set tdf = cat.Tables("user")

        tdf.Properties("jet oledb:link datasource") = hdk

    End If

    '窗体打开后自动注册控件

    AutoRegFile "CALENDAR.OCX"

    AutoRegFile "ctlstbar.ocx"

    AutoRegFile "flash.ocx"

End Sub



Function AutoRegFile(FileName As String)

    Dim reged As Boolean

    Dim RegFile1 As String

    Dim RegFile2 As String

    Dim BeReg As String, strDtn As String, strDtn1 As String

    Dim ref As Reference

    Dim RetVal

    BeReg = CurrentProject.Path & "\ocx\" & FileName          '控件存放位置,例子中是放在工程当前目录下ocx子目录

    strDtn = Environ("windir") & "\system\" & FileName           '返回系统路径

    strDtn1 = Environ("windir") & "\system32\" & FileName           '返回系统路径

    On Error Resume Next

    RegFile1 = Environ("windir") & "\system\regsvr32.exe "

    RegFile2 = Environ("windir") & "\system32\regsvr32.exe "

    If Dir(RegFile1) <> "" Or Dir(RegFile2) <> "" Then

        If Dir(RegFile1) <> "" Then

            FileCopy BeReg, strDtn

            RegFile1 = RegFile1 & "/s" & " " & strDtn

            RetVal = Shell(RegFile1, 1)

            Set ref = References.AddFromFile(Environ("windir") & "\system\" & FileName)

        Else

            FileCopy BeReg, strDtn1

            RegFile2 = RegFile2 & "/s" & " " & strDtn1

            RetVal = Shell(RegFile2, 1)

            Set ref = References.AddFromFile(Environ("windir") & "\system32\" & FileName)    '设置引用

        End If

    Else

        MsgBox "找不到regsvr32.exe文件,你可能无法使用本软件!", vbCritical, "无法自动注册控件"

    End If

End Function



[此贴子已经被作者于2005-9-18 9:24:34编辑过]


作者: 真主    时间: 2005-9-19 23:23
[attach]13189[/attach]

这样写,不行,请问什么地方写错
作者: smartday    时间: 2005-9-20 02:42
    BeReg = CurrentProject.Path & "\ocx\" & FileName          '控件存放位置,例子中是放在工程当前目录下ocx子目录

    strDtn = Environ("windir") & "\system\" & FileName           '返回系统路径

    strDtn1 = Environ("windir") & "\system32\" & FileName           '返回系统路径

你这三个变量的赋值搞错了!

strdnt 和 strdtn1这两个变量是分别针对两种不同的情况来存放regsvr32.exe路径的,并不是用来注册OCX,看我给我例程!

[此贴子已经被作者于2005-9-19 18:44:15编辑过]


作者: 真主    时间: 2005-9-20 03:21
[attach]13195[/attach]

请帮我看看,谢谢
作者: wu8313    时间: 2005-9-20 05:17
代码改成这样,应该可以注册的了。

-------------------------------

Option Compare Database

Function AutoRegFile(FileName As String)

    Dim reged As Boolean

    Dim RegFile1 As String

    Dim RegFile2 As String

    Dim BeReg As String, strDtn As String, strDtn1 As String

    Dim ref As Reference

    Dim RetVal

    BeReg = CurrentProject.Path & "\ocx\" & "Calendar.ocx"          '控件存放位置,例子中是放在工程当前目录下ocx子目录

    strDtn = Environ("windir") & "\system\" & "Calendar.ocx"           '返回系统路径

    strDtn1 = Environ("windir") & "\system32\" &
"Calendar.ocx"           '返回系统路径

    On Error Resume Next

    RegFile1 = Environ("windir") & "\system\regsvr32.exe "

    RegFile2 = Environ("windir") & "\system32\regsvr32.exe "

    If Dir(RegFile1) <> "" Or Dir(RegFile2) <> "" Then

        If Dir(RegFile1) <> "" Then

            FileCopy BeReg, strDtn

            RegFile1 = RegFile1 & "/s" & " " & strDtn

            RetVal = Shell(RegFile1, 1)

            Set ref = References.AddFromFile(Environ("windir") & "\system\" & Calendar.ocx)

          '设置一个对话框来提醒一下注册是否成功  

            MsgBox "注册成功"

            

        Else

            FileCopy BeReg, strDtn1

            RegFile2 = RegFile2 & "/s" & " " & strDtn1

            RetVal = Shell(RegFile2, 1)

            Set ref = References.AddFromFile(Environ("windir") & "\system32\" & Calendar.ocx)    '设置引用

            

            MsgBox "注册成功"

            

        End If

    Else

        MsgBox "找不到regsvr32.exe文件,你可能无法使用本软件!", vbCritical, "无法自动注册控件"

    End If

End Function

-------------------

'用来调用上面的过程

在立即窗口中输入 call regmyocx()  看看会得到怎样的结果。

Sub regmyocx()

AutoRegFile "calendar.ocx"

End Sub

-----------------

解释一下你的原来代码 存在的问题:

在上述代码的蓝色部分,你没有使用 "" 来连接,调用的时候,出现“编译错误:无效的界定符”提示  ,所以认为你的代码出现语法错误而导致编译错误的。后来,看到 蓝色部分 有问题了。

------------------------------

蓝色部分的后两句代码,是用来获得系统文件夹路径的

针对 win98/winme/winxp 的系统文件夹 是 system

针对 winnt /2k  的系统文件夹 是 system32

不同的操作系统 regsvr32.exe(操作系统自带的)  这个文件的位置是不同的,是system 或者 system32 两者之一。

----------------------------------------------



[此贴子已经被作者于2005-9-20 21:05:04编辑过]


作者: smartday    时间: 2005-9-20 06:55
呵呵,讲得够明白的了,应该会用了吧
作者: 真主    时间: 2005-9-20 16:08
谢谢,请问程序是不是已经自动把控件COPY到系统目录中了,我看好像是这样
作者: smartday    时间: 2005-9-20 20:28
是的,是这样的,如果你是用winrar打包的话,可以把原来的\ocx下的东西删了
作者: wu8313    时间: 2005-9-21 05:07
搜到了这个日历控件,做了一个例子,楼主看看是否可以使用起来。[attach]13221[/attach]



[此贴子已经被作者于2005-9-20 21:07:11编辑过]


作者: cg1    时间: 2005-10-3 22:06
关于此主题请参考:

    《VBA》如何激活/运行存储在窗体ole容器中的对象?

    http://access911.net/index.asp?u1=a&u2=78FAB01E

直接在里面放一个 REG 文件即可




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3