最初由 狗剩 发布
认真看一下,换个思路试一下或许就有收获。
一个月不算什么,我搞一个软件搞了大半年才搞定
赞同!我个人认为加载菜单是通过VBA来实现的,而菜单的内容XXX.mnu文件中,判断是否加载菜单和程序可执行体在.arx、.lsp或.dll文件中。以下代码是用AutoCAD自带的VB编辑器查看的.dvb文件(项目文件,一般都加密码,可用VBA的解码器获取密码如passware的officekey)
Attribute VB_Name = "INST"
Option Explicit
Dim rrxw As New Start2004
Dim sYsd As String
Public Function showtot()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(弹出按钮)").Visible = True
End Function
Public Function showpip()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(管线)").Visible = True
End Function
Public Function showequ()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(设备)").Visible = True
End Function
Public Function showval()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(阀门)").Visible = True
End Function
Public Function showfit()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(管件)").Visible = True
End Function
Public Function showins()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(仪表)").Visible = True
End Function
Public Function showzoo()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("窗口缩移").Visible = True
End Function
Public Function showEQI()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PID绘图(设备内件)").Visible = True
End Function
Public Function showPFD()
ThisDrawing.Application.MenuGroups.Item(0).Toolbars.Item("PFD绘图(PFD)").Visible = True
End Function
Public Function START()
Dim Atlb As AcadToolbars
sYsd = ThisDrawing.Application.Path
With ThisDrawing.Application
//加载菜单的位置
.Preferences.Files.MenuFile = sYsd & "\SUPPORT\cadpid.mnu"
.MenuGroups.Item(0).Toolbars.Item("标准").Visible = True
.MenuGroups.Item(0).Toolbars.Item("绘图").Visible = True
.MenuGroups.Item(0).Toolbars.Item("修改").Visible = True
.MenuGroups.Item(0).Toolbars.Item("标注").Visible = True
End With
Set Atlb = ThisDrawing.Application.MenuGroups.Item(0).Toolbars
If Atlb.Item("PID绘图(弹出按钮)").DockStatus <> acToolbarDockLeft Then
Atlb.Item("PID绘图(弹出按钮)").Dock (acToolbarDockLeft)
End If
If Atlb.Item("PID绘图(管线)").DockStatus <> acToolbarFloating Or (Atlb.Item("PID绘图(管线)").Left > 600) Or (Atlb.Item("PID绘图(管线)").top > 500) Then
Atlb.Item("PID绘图(管线)").Float 250, 300, 5
End If
Atlb.Item("PID绘图(管线)").Visible = False
If Atlb.Item("PID绘图(阀门)").DockStatus <> acToolbarFloating Or (Atlb.Item("PID绘图(阀门)").Left > 600) Or (Atlb.Item("PID绘图(阀门)").top > 500) Then
Atlb.Item("PID绘图(阀门)").Float 250, 300, 7
End If
Atlb.Item("PID绘图(阀门)").Visible = False
If Atlb.Item("PID绘图(设备)").DockStatus <> acToolbarFloating Or (Atlb.Item("PID绘图(设备)").Left > 600) Or (Atlb.Item("PID绘图(设备)").top > 500) Then
Atlb.Item("PID绘图(设备)").Float 250, 300, 4
End If
Atlb.Item("PID绘图(设备)").Visible = False
If Atlb.Item("PID绘图(仪表)").DockStatus <> acToolbarFloating Or (Atlb.Item("PID绘图(仪表)").Left > 600) Or (Atlb.Item("PID绘图(仪表)").top > 500) Then
Atlb.Item("PID绘图(仪表)").Float 250, 300, 4
End If
Atlb.Item("PID绘图(仪表)").Visible = False
If (Atlb.Item("PID绘图(管件)").DockStatus <> acToolbarFloating) Or (Atlb.Item("PID绘图(管件)").Left > 600) Or (Atlb.Item("PID绘图(管件)").top > 500) Then
Atlb.Item("PID绘图(管件)").Float 250, 300, 4
End If
Atlb.Item("PID绘图(管件)").Visible = False
If (Atlb.Item("窗口缩移").DockStatus <> acToolbarFloating) Or (Atlb.Item("窗口缩移").Left > 600) Or (Atlb.Item("窗口缩移").top > 500) Then
Atlb.Item("窗口缩移").Float 100, 300, 1
End If
Atlb.Item("窗口缩移").Visible = False
If (Atlb.Item("PID绘图(设备内件)").DockStatus <> acToolbarFloating) Or (Atlb.Item("PID绘图(设备内件)").Left > 600) Or (Atlb.Item("PID绘图(设备内件)").top > 500) Then
Atlb.Item("PID绘图(设备内件)").Float 250, 300, 2
End If
Atlb.Item("PID绘图(设备内件)").Visible = False
If (Atlb.Item("PFD绘图(PFD)").DockStatus <> acToolbarFloating) Or (Atlb.Item("PFD绘图(PFD)").Left > 600) Or (Atlb.Item("PFD绘图(PFD)").top > 500) Then
Atlb.Item("PFD绘图(PFD)").Float 250, 300, 2
End If
Atlb.Item("PFD绘图(PFD)").Visible = False
With ThisDrawing.Application.Preferences
.System.EnableStartupDialog = False
.System.SingleDocumentMode = False
.Drafting.AutoSnapMarker = True
.Drafting.AutoSnapTooltip = True
.Drafting.AutoTrackTooltip = True
.System.LoadAcadLspInAllDocuments = True
.Display.CursorSize = 100
.User.SCMEditMode = acEdRepeatLastCommand
.User.SCMCommandMode = acEnter
.User.SCMDefaultMode = acRepeatLastCommand
End With
rrxw.START
End Function