乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 209|回复: 11

Acad工具栏和按钮

[复制链接]

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-9 10:52:39 | 显示全部楼层 |阅读模式
我使用数据库和VBA创建的工具栏和按钮有问题 每次退出AutoCad时,此工具栏上的按钮都会丢失,工具栏也会关闭,但工具栏仍可以在工具栏菜单中找到 基本上,当Acad关闭时,它会删除按钮,但不会删除工具栏。那么,有什么办法阻止这种情况发生呢&nbsp&nbsp&nbsp&nbsp
  1. Public Function CreateButton(ThisToolBar As AcadToolbar, strSettings As String) As Boolean
  2. Dim ToolbarName As String
  3. 'Create new buttons
  4. Dim newButton As AcadToolbarItem
  5. Dim varSettings As Variant
  6. Dim strName As String
  7. Dim strDescription As String
  8. Dim strMacro As String
  9. Dim BitmapName  As String
  10. Dim SmallBitmapName  As String
  11. On Error GoTo Err_Control
  12. '0 = Name
  13. '1 = Description
  14. '2 = Macro
  15. '3 = Icon
  16. varSettings = Split(strSettings, "|")
  17. 'Assign the macro string the VB equivalent of "ESC ESC _open "
  18. 'openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32)
  19. strName = varSettings(0)
  20. strDescription = varSettings(1)
  21. strMacro = Chr(3) & Chr(3) & varSettings(2) & Chr(13)
  22. Set newButton = ThisToolBar.AddToolbarButton("", strName, strDescription, strMacro)
  23. 'Assign Bitmap Image to Button
  24. SmallBitmapName = varSettings(3)
  25. newButton.SetBitmaps SmallBitmapName, SmallBitmapName
  26. 'Display the toolbar
  27. ThisToolBar.Visible = True
  28.      
  29. Exit_Here:
  30. Exit Function
  31.   
  32. Err_Control:
  33. Select Case Err.Number
  34.       Case -2147024809
  35.            Resume Exit_Here
  36.       Case Else
  37.            Debug.Print "CreateButton(" & ThisToolBar.Name & "," & strSettings & ")" & vbCrLf & "Error # " & Err.Number, Err.Description
  38.            Resume Exit_Here
  39. End Select
  40. End Function
  41. Public Function SetToolbar(sName As String) As AcadToolbar
  42. Dim MyToolbar As AcadToolbar
  43. Dim currMenuGroup As AcadMenuGroup
  44. Dim intcnt As Integer
  45. Dim blnFoundTB As Boolean
  46. Dim intNextGroup As Integer
  47. On Error GoTo Err_Control
  48. For intcnt = 0 To ThisDrawing.Application.MenuGroups.Count - 1
  49.       If ThisDrawing.Application.MenuGroups.Item(intcnt).Name = "ACAD" Then
  50.            Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(intcnt)
  51.            Exit For
  52.       End If
  53. Next
  54. 'Create new toolbar
  55. Set MyToolbar = currMenuGroup.Toolbars.Add(sName)
  56. Exit_Here:
  57. Set SetToolbar = MyToolbar
  58. Exit Function
  59. Err_Control:
  60. Select Case Err.Number
  61.       Case -2147024809 'Toolbar exist
  62. Retry_Different_MenuGroup:
  63.            Debug.Print currMenuGroup.Name
  64.            For intcnt = 0 To currMenuGroup.Toolbars.Count - 1
  65.                 If currMenuGroup.Toolbars.Item(intcnt).Name = sName Then
  66.                     Set MyToolbar = currMenuGroup.Toolbars.Item(sName)
  67.                     blnFoundTB = True
  68.                 End If
  69.            Next
  70.            If blnFoundTB = False Then
  71.                 If intNextGroup  "ACAD" Then
  72.                           Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(intNextGroup)
  73.                           intNextGroup = intNextGroup + 1
  74.                           GoTo Retry_Different_MenuGroup
  75.                      Else
  76.                           intNextGroup = intNextGroup + 1
  77.                           Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(intNextGroup)
  78.                           GoTo Retry_Different_MenuGroup
  79.                      End If
  80.                 End If
  81.            End If
  82.            Resume Next
  83.       Case Else
  84.            InputBox Err.Description, "Error", Err.Number
  85.            Resume Exit_Here
  86. End Select
  87. End Function


回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-9 10:58:08 | 显示全部楼层
我只是想澄清一下,你在追求什么;当按钮按下时,您是希望工具栏保持完整,还是希望工具栏消失?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-9 11:14:55 | 显示全部楼层
是的,在acad重新打开后,我需要工具栏与按钮保持完整
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-9 16:36:54 | 显示全部楼层
唯一的问题是,当AutoCad重新打开时,按钮从工具栏中删除,必须通过运行宏来创建工具栏来再次添加 
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-9 16:58:53 | 显示全部楼层
它不#039;t看起来像你'重新保存对菜单文件的更改http://discussion.autodesk.com/forums/thread.jspa?messageID=3555168&#3555168
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-24 12:22:02 | 显示全部楼层
好啊所以我决定改变我的方法 我已经创建了带有工具栏和按钮的on.mnu文件 菜单保存得很好,工具栏也可以,但由于某种原因,acad重新启动后,按钮不会像以前一样保留&nbsp
  1. Option Explicit
  2. Private Declare Function GetUserName Lib "advapi32.dll" Alias _
  3. "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
  4. Public Function User_Name()
  5. Dim sBuffer As String
  6. Dim lSize As Long
  7. 'Get User Name
  8. sBuffer = Space$(255)
  9. lSize = Len(sBuffer)
  10. Call GetUserName(sBuffer, lSize)
  11. If lSize > 0 Then
  12.       User_Name = Left$(sBuffer, lSize)
  13. Else
  14.       User_Name = vbNullString
  15. End If
  16. End Function
  17. '//*** "C:\Documents and Settings" & Replace(User_Name, Chr(0), "") & "\Application Data\Autodesk\AutoCAD 2004\R16.0\enu\Support\My_NewCustom_Menu.mnu"
  18. Public Function SaveT(sFiletxt As String, sFilePath As String)
  19. On Error Resume Next
  20. Open sFilePath For Output As #1
  21. Print #1, sFiletxt
  22. Close #1
  23. End Function
  24. Public Function CreateMenu() As Boolean
  25. Dim strFiletxt As String
  26. Dim strTBName As String
  27. Dim varSettings As Variant
  28. Dim intcnt As Integer
  29. Dim strRet As String
  30. Dim strMenuPath As String
  31. strTBName = frmCreateTB.TextBox1.Text
  32. strFiletxt = "***MENUGROUP=VBAAPPS" & vbCrLf & vbCrLf
  33. strFiletxt = strFiletxt & "***TOOLBARS" & vbCrLf
  34. strFiletxt = strFiletxt & "**" & strTBName & vbCrLf
  35. '& "ID_" & strTBName & "_0" & vbTab
  36. strFiletxt = strFiletxt & "[_Toolbar(""" & strTBName & """, _Top, _Show, 0, 0, 1)]" & vbCrLf
  37. For intcnt = 0 To frmCreateTB.ListBox2.ListCount - 1
  38.     If FindRecord(frmCreateTB.ListBox2.List(intcnt), strRet) = True Then
  39.             'If objToolbar Is Not Nothing Then
  40.                 'CreateButton objToolbar, strRet
  41.             'End If
  42.          '0 = Name
  43.          '1 = Description
  44.          '2 = Macro
  45.          '3 = Icon
  46.          varSettings = Split(strRet, "|")
  47.          '& "ID_" & Replace(varSettings(0), " ", "") & "_0" & vbTab
  48.          strFiletxt = strFiletxt & "[_Button(""" & varSettings(0) & """, """ & varSettings(3) & """, """ & varSettings(3) & """)]" & "_" & varSettings(2) & vbCrLf
  49.    End If
  50. Next
  51. strFiletxt = strFiletxt & vbCrLf
  52. strFiletxt = strFiletxt & "***HELPSTRINGS" & vbCrLf
  53. For intcnt = 0 To frmCreateTB.ListBox2.ListCount - 1
  54.     If FindRecord(frmCreateTB.ListBox2.List(intcnt), strRet) = True Then
  55.          varSettings = Split(strRet, "|")
  56.          strFiletxt = strFiletxt & "ID_" & Replace(varSettings(0), " ", "") & "_0" & vbTab & "[" & varSettings(1) & "]" & vbCrLf
  57.     End If
  58.       
  59. Next
  60. strMenuPath = "C:\Documents and Settings" & Replace(User_Name, Chr(0), "") & "\Application Data\Autodesk\AutoCAD 2004\R16.0\enu\Support\My_NewCustom_Menu.mnu"
  61. SaveT strFiletxt, strMenuPath
  62.    
  63.     If IsMenuLoaded(strMenuPath) = False Then
  64.         MsgBox "Error Loading Menu"
  65.     End If
  66.    
  67. End Function
  68. Public Function IsMenuLoaded(sPath As String) As Boolean
  69. On Error Resume Next
  70.     ThisDrawing.Application.MenuGroups.Load sPath
  71.    
  72.     If Err.Number  0 Then
  73.            IsMenuLoaded = True
  74.            Err.Clear
  75.            'ThisDrawing.Application.MenuGroups.Item.MenuFileName
  76.            
  77.     Else
  78.            IsMenuLoaded = True
  79.     End If
  80.    
  81.    
  82. End Function
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-24 13:10:28 | 显示全部楼层

工具栏是't在当前工作区中&nbsp 
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-24 14:07:23 | 显示全部楼层
? ??
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-24 15:16:25 | 显示全部楼层
你用的是什么版本?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2009-6-24 16:32:24 | 显示全部楼层
AutoCAD 2004 vanilla
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 03:50 , Processed in 2.252873 second(s), 81 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表