找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 463|回复: 6

[求助]:请问在2004下,用ActiveX新增一个工具栏按钮设置图标时为什么会引起错误并退出

[复制链接]
发表于 2004-9-8 20:39:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在2004下,VB用ActiveX在CAD新增一个工具栏按钮(在标准工具栏)设置图标时,就会引起CAD错误并退出,请问是怎麽回事?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-9 09:38:30 | 显示全部楼层
看一下你的代码好么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-9 16:24:11 | 显示全部楼层

  1.   [FONT=courier new]
  2. Option Explicit
  3. '
  4. '**abCAD Setup**
  5. '
  6. 'COPY文件并在AutoCAD中新建工具栏图标
  7. '
  8. 'author: abt(ze_zh@sina.com:意见、建议)
  9. 'date: 2004-7-25/7-27
  10. '****
  11. '

  12. Const AppName As String = "abCAD"
  13. Const AppMacroName As String = AppName
  14. Const AppMacro As String = "abCAD/abCAD.dvb!ThisDrawing.Main"
  15. Const AppBitmaps As String = AppName & ".bmp"
  16. Const AppToolBarTag As String = "ID_TbStandar"

  17. Const PathSep As String * 1 = ""
  18. Const CADVerMin As Integer = 15

  19. Private acadApp As Object
  20. Private fs As Object
  21. Private mbCloseAcad As Boolean '是否关闲Acad

  22. Public Sub Main()
  23.     Dim r As String
  24.    
  25.     On Error Resume Next
  26.    
  27.     If Not getAcad() Then r = "无可用AutoCAD": GoTo L
  28.     If Not chkVer(acadApp.Version) Then r = "不支持的AutoCAD版本": GoTo L
  29.    
  30.     Set fs = CreateObject("Scripting.FileSystemObject")
  31.    
  32.     copyFiles fs.GetFolder(App.path), acadApp.path & PathSep
  33.     If Not createAppButton() Then r = "未能生成AutoCAD工具栏图标"
  34.    
  35. L:  If mbCloseAcad Then acadApp.Quit
  36.    
  37.     If r <> "" Then r = AppName & "安装失败:" & r Else r = AppName & "成功安装!" & vbCrLf & "欢迎使用!" & vbCrLf & "查看帮助请点击AutoCAD标准工具栏中<ab>图标"
  38.     showInfo r
  39. End Sub

  40. 'get AutoCAD app
  41. Private Function getAcad() As Boolean
  42.     Dim i As Integer
  43.    
  44.     On Error Resume Next
  45.    
  46.     mbCloseAcad = False
  47.     Do
  48.         Set acadApp = GetObject(, "AutoCAD.Application")
  49.         If Err = 0 Then
  50.             getAcad = True: Exit Function
  51.         End If
  52.         
  53.         Err.Clear
  54.         i = MsgBox("当前没有正在运行的AutoCAD." & vbCrLf & "强烈建议安装" & AppName & "之前,先打开AutoCAD!", vbAbortRetryIgnore + vbExclamation)
  55.         If i = vbAbort Then getAcad = False: Exit Function
  56.     Loop While i = vbRetry
  57.    
  58.     Set acadApp = CreateObject("AutoCAD.Application")
  59.     If Err <> 0 Then getAcad = False: Exit Function
  60.     acadApp.Visible = False
  61.    
  62.     mbCloseAcad = True
  63.     getAcad = True
  64. End Function

  65. 'chk version
  66. Private Function chkVer(sVer As String) As Boolean
  67.     Dim i As Integer
  68.     Dim s As String
  69.    
  70.     chkVer = False
  71.    
  72.     i = InStr(sVer, ".")
  73.     If i <= 1 Then Exit Function
  74.     s = Left(sVer, i - 1)
  75.     If Not IsNumeric(s) Then Exit Function
  76.    
  77.     chkVer = CInt(s) >= CADVerMin
  78. End Function

  79. 'recur to copy files
  80. Private Sub copyFiles(fo As Object, pathDest As String)
  81.     Dim foSub As Object
  82.     Dim path As String
  83.    
  84.     On Error Resume Next
  85.    
  86.     For Each foSub In fo.SubFolders
  87.         path = pathDest & foSub.Name & PathSep
  88.         If Not fs.FolderExists(path) Then fs.CreateFolder path
  89.         fs.CopyFile foSub.path & PathSep & "*.*", path, True
  90.         If Err <> 0 Then Err.Clear
  91.         
  92.         copyFiles foSub, path
  93.     Next
  94. End Sub

  95. 'show info
  96. Private Sub showInfo(sInfo As String)
  97.     MsgBox sInfo, vbInformation
  98. End Sub

  99. [B]'主要是这个函数[/B]
  100. 'creat tool bar button
  101. Private Function createAppButton() As Boolean
  102.     Dim menuGroup As Object
  103.     Dim toolBar As Object
  104.     Dim button As Object
  105.     Dim doc As Object
  106.    
  107.     Dim sMacro As String
  108.     Dim b As Boolean
  109.    
  110.     On Error Resume Next
  111.    
  112.     createAppButton = False
  113.    
  114.     'save doc
  115.     For Each doc In acadApp.Documents
  116.         If Not doc.Saved Then doc.Save
  117.     Next
  118.    
  119.     Set menuGroup = acadApp.MenuGroups("ACAD")
  120.     If Err <> 0 Then Exit Function
  121.    
  122.     b = False
  123.     For Each toolBar In menuGroup.Toolbars
  124.         If StrComp(toolBar.TagString, AppToolBarTag, vbTextCompare) = 0 Then b = True: Exit For
  125.     Next
  126.     If Not b Then Exit Function
  127.    
  128.     If Not toolBar.Visible Then toolBar.Visible = True
  129.     Set button = toolBar.Item(toolBar.Count - 1)
  130.    
  131.     sMacro = Chr(3) & Chr(3) & Chr(95) & "-VBARUN " & AppMacro & Chr(32)
  132.     'b = True
  133.     If button.Type = 0 Then 'acToolbarButton
  134.         If StrComp(Left(button.Name, Len(AppMacroName)), AppMacroName, vbTextCompare) = 0 Then
  135.             button.Macro = sMacro
  136.             menuGroup.Save 1 'acMenuFileSource
  137.             
  138.             createAppButton = Err = 0
  139.             Exit Function
  140.         End If
  141.     End If
  142.    
  143.     Set button = toolBar.AddToolbarButton(toolBar.Count, AppMacroName, AppMacroName, sMacro)
  144.     toolBar.AddSeparator toolBar.Count
  145.     [B]'下面这条语句引用CAD2004退出[/B]
  146.     button.SetBitmaps AppBitmaps, AppBitmaps
  147.     menuGroup.Save 1 'acMenuFileSource
  148.    
  149.     createAppButton = Err = 0
  150. End Function
  151.   [/FONT]

一个很小的安装程序,用的VB6,COPY文件再在CAD中创建工具栏按钮,在R2002下无错,R2004下设置图标时错误并退出。请看看最后一个函数。
多谢斑竹!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-9 17:18:12 | 显示全部楼层
abCAD.bmp文件在2004的搜索目录下面麽?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-9 17:27:15 | 显示全部楼层
COPY文件时,已COPY到CAD的Support中了
引起2004退出,再打开2004,有时按钮&图标已搞好了,但有时不行,不知为啥。逐步调试时发现那条设置图标的语句有错。有点莫名其妙。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-9 17:37:24 | 显示全部楼层
直接做成文件加载不好些麽?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-13 21:13:41 | 显示全部楼层
谢谢!我在看看吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-29 07:23 , Processed in 0.317744 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表