Auto CAD社区(17):利用VBA事件简化打印操作

软件世界

  问题的提出

  自AutoCAD 2000后,打印设置中的大部分项目均保存在图形中,而不是保存在系统中,如打印机名称、纸张尺寸等。因为打印机名称保存在图形中,当更换打印机或更改打印机名称时,必须重新指定。如果有大量的图形要打印,这种重复的更改操作就显得十分费时费力。

  AutoCAD的近几个版本都可以使用VBA进行二次开发,我们可以通过事件来自动触发一些过程以便完成一些特定的动作。如打开图形前可以触发BeginOpen事件,打印图形前可触发BeginPlot事件,AutoCAD的ActiveX包含许多事件,对应着不同的动作。

  问题的解决

  通过事件,我们可以将当前使用的打印机名称保存到注册表中作为默认打印机名称,在打印前,由程序自动将打印机名称更改成默认的打印机名称,这样就可以免去设置的烦恼。

  当用户选择其他打印机时,系统会提示是否将新选定的打印机作为系统的默认打印机。

  朋友们只须把以下代码保存在名为SetPrintName.dvb的文件中,然后点击“工具→加载应用程序”把文件添加到程序启动组中,以后每次打开AutoCAD时都会自动加载,然后在打印时自动运行。

  Option Explicit

  Dim PrintName As String

  '打印或页面设置开始前调用GetPrintName过程

  Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)

  If CommandName = "PAGESETUP" Or CommandName = "PLOT" Then

  Call GetPrintName

  End If

  End Sub

  '打印或页面设置结束后调用SetPrintName过程

  Private Sub AcadDocument_EndCommand(ByVal CommandName As String)

  If CommandName = "PAGESETUP" Or CommandName = "PLOT" Then

  Call SetPrintName

  End If

  End Sub

  '检查默认打印机选项,如果设置与默认选项不同,则更改过来

  Private Sub GetPrintName()

  PrintName = GetSetting("MCCAD", "DrawingSetting","PrintName")

  If PrintName <> "" And ThisDrawing.ActiveLayout.ConfigName <> PrintName

  Then

  ThisDrawing.ActiveLayout.RefreshPlotDeviceInfo

  ThisDrawing.ActiveLayout.ConfigName = PrintName

  End If

  End Sub

  '保存默认打印机选项到注册表中

  Private Sub SetPrintName()

  If PrintName = "" Then

  SaveSetting "MCCAD", "DrawingSetting", "PrintName",ThisDrawing.ActiveLayout.ConfigName

  Else

  If ThisDrawing.ActiveLayout.ConfigName <> PrintName Then

  If MsgBox("是否将“" & ThisDrawing.ActiveLayout.ConfigName & "”打印机作为默认打印机?", vbYesNo, "明经通道http://www.mjtd.com提示") = vbYes Then

  SaveSetting "MCCAD", "DrawingSetting", "PrintName", ThisDrawing.ActiveLayout.ConfigName

  End If

  End If

  End If

  End Sub