第四章 系统主体和用户界面的建立
本设计是用VB开发螺纹联接标准件零件库,并使用Access数据库管理系统管理数据。用VB开发界面,生成标准应用程序,同时生成SolidWorks插件,将各模块的界面挂在SolidWorks 软件的主菜单上,使两个系统融为一体,应用方便快捷。
本次螺纹连接标准件库公建立了包括螺栓、螺柱、螺钉、螺母以及垫圈五大类,共八小类,20项标准件。每项标准件的数据查询工作和实体造型过程是基本一致的。每个小类的标准件零件只是部分参数不同而大部分程序语句可以通用。这就要求设计统一的用户界面。同时应该在操作习惯上符合一般的操作习惯。
4.1 标准EXE应用程序用户界面
在一个应用程序的使用过程中,由于使用者接触到的始终是用户界面,他只需要按照界面的引导来达到自己目的,并不需要了解具体的实现方法,所以,一个良好的操作界面对于一个应用程序来说至关重要的。本设计中,标准件库的界面采用窗口模式和SolidWorks菜单来实现。
在本次设计过成中,大量使用菜单,包括标准菜单和方便的弹出菜单,如图4.1。
图4.1
在界面设计过程中,尽可能遵循以下几个原则:
1) 提供给用户一个美观,使用简单,直观的界面;
2) 提供尽可能多的保护措施,使输入信息符合标准;
3) 尽量符合不同操作人员的操作习惯;
4) 尽量将相似标准件信息在相同界面下输入,以减少截面多余。
采用包含标准件的数据下拉列表框,如图4.2。让用户从中选取,而不是自己输入,这样保证了用户的信息完全符合国家标准。
图4.2
4. 2 SolidWorks菜单的使用
SolidWorks的<工具>菜单中选择<插件>,如图4.3。
图4.3
本次设计不但开发了标准的EXE程序,同时为了使用方便,又将工程加以改进,为Solidworks开发了菜单插件,既DLL程序。生成SolidWorks插件,将各模块的界面挂在SolidWorks 软件的主菜单上,如图4.3。使两个系统融为一体,应用更加方便快捷。把生成标准件的功能模块挂到Solidworks 装配环境的菜单和工具栏上,在菜单上的提示为各标准件的名称,在工具条上的提示则为图标,用户要插入某个标准件时,只需在菜单或工具条上进行选择,然后由开发的程序调用相应的标准件功能模块。Solidworks 的SldWorks 对象,为VB 对Solidworks 工作环境进行访问处理提供了接口。通过此对象可以对Solidworks工作环境添加菜单、删除菜单、添加工具条、打开文件、新建文件、退出Solidworks 系统等功能,这里主要是通过使用SldWorks 对象的Addmenu 和Addmenuitem 方法来在Solidworks工作环境中添加菜单和下拉子菜单及功能模块的调用;通过使用SldWorks 对象的Addtoolbar 和AddToolbarCommand 方法来完成在Solidworks 工作环境中添加工具条和完成对应标准件功能模块的调用。
本次的DLL与EXE程序功能上基本没有区别,但是DLL与EXE确实有实质上的区别。动态链接程序库,全称:Dynamic Link Library,简称:DLL,作用在于为应用程序提供扩展功能。应用程序想要调用DLL文件,需要跟其进行“动态链接”;从编程的角度,应用程序需要知道DLL文件导出的API函数方可调用。由此可见,DLL文件本身并不可以运行,需要应用程序调用。正因为DLL文件运行时必须插入到应用程序的内存模块当中,所以要运行DLL就必须要用Solidworks来加载DLL。具体方法就是象打开文件一样用Solidworks“打开”DLL,只是在加载DLL时要选择Add-Ins文件类型。如图4.4。
图4.4
菜单的具体实现方法如下:
在VB中新建Active DLL工程,如图4.5,并把标准EXE程序的窗体文件和其他模块等添加到Active DLL工程,然后为工程添加一个类模块,内容如下:
Make sure that a reference to the swpublished.tlb type library exists
同图2.3一样,为Active DLL工程引用swpublished.tlb库文件,
'Tell VB that you are going to provide functionality for the SwAddin interface
为Active DLL工程获得SolidWorks对象,
Implements SWPublished.SwAddin
Dim iSldWorks As SldWorks.SldWorks
Dim iCookie As Long
'Implementation methods of the SwAddin interface
Private Function SwAddin_ConnectToSW(ByVal ThisSW As Object, ByVal Cookie As Long) As Boolean
Dim bRet As Boolean
' store reference to SW session
Set iSldWorks = ThisSW
' store cookie from SW
iCookie = Cookie
'Inform SW about the object that contains the callbacks
bRet = iSldWorks.SetAddinCallbackInfo(App.hInstance, Me, iCookie)
'Add a menu item on the frame when no documents are present
bRet = iSldWorks.SetAddinCallbackInfo(App.hInstance, Me, iCookie)
'Add a menu item on the frame when no documents are present
bRet = iSldWorks.AddMenu(swDocNONE, "螺纹联接(&L)", 3)
没有文档的时候显示的菜单,使用AddMenuItem2方法,其中,"LS_Item", "LS_ItemUpdate",是两个函数,见后面,
bRet = iSldWorks.AddMenuItem2(swDocNONE, iCookie, "螺栓库(&S)@螺纹联接(&L)", -1, "LS_Item", "LS_ItemUpdate", "螺栓标准件库")
打开或是新建零件文档的时候显示的菜单,
bRet = iSldWorks.AddMenuItem2(swDocPART, iCookie, "螺栓库(&S)@螺纹联接(&L)", -1, "LS_Item", "LS_ItemUpdate", "螺栓标准件库")
后面还有螺柱、螺钉、螺母和垫圈,和螺栓一样,故省略。
SwAddin_ConnectToSW = True
End Function
图4.5
卸载插件时删除菜单,主要使用RemoveMenu方法。
Private Function SwAddin_DisconnectFromSW() As Boolean
Dim bRet As Boolean
'Remove any UI that was added earlier
删除先前添加的菜单,
bRet = iSldWorks.RemoveMenu(swDocNONE, "螺纹联接(&L)", "")
bRet = iSldWorks.RemoveMenu(swDocPART, "螺纹联接(&L)", "")
Set iSldWorks = Nothing
SwAddin_DisconnectFromSW = True
End Function
LS_Item函数,这里是打开窗体入口,如本列,在这里加载螺栓标准件的的第一个窗体:frmLS_Slt窗体,
Public Sub LS_Item()
frmLS_Slt.Show
End Sub
LS_ItemUpdate函数,用于控制菜单的状态,在本次设计中定义了Long 型的LS_MnuSts公共变量,系统加载的时候,使LS_MnuSts=1,加载了frmLS_Slt后,使LS_MnuSts=2,当frmLS_Slt正常退出后,使LS_MnuSts=1,这样就可以使同一模块不能重复加载,以避免同一模块前后窗体的数据不一致或是前后干扰等,如图4.6。
图4.6
Public Function LS_ItemUpdate() As Long
' Return the state information for the menu item
' 0 - Disabled and unchecked
' 1 - Enabled and unchecked (default when update routine does not exist)
' 2 - Disabled and checked
' 3 - Enabled and checked
LS_ItemUpdate = LS_MnuSts
End Function
最后,将Active DLL工程编译为一个DLL文件,就可以使用本小节前面的方法,在SolidWorks中加载并运行了,同一个DLL文件只需要加载一次就可以了,如图4.4。需要卸载或是重新加载,只需要按照图4.2操作就可以了。