Hide Table of Contents

Fire Application and Document Events Example (VBA)

This example shows how to fire application and document events.

'-----------------------------------------------------------------

' Preconditions:
' 1. Create a VBA macro in a software product in which VBA is
'    embedded.
' 2. Copy and paste this example into the Visual Basic IDE.
'    a.
In Modules, copy and paste the Main module.
'    b. Insert a class called Class1, and paste the Class1 module.
'    c. Insert a class called Class2, and paste the Class2 module.

' 3. Add a reference to the DraftSight type library,
'    install_dir\bin\dsAutomation.dll.
' 4. Change the path and file name of the image file to insert.
'    NOTE: The image file must be a PNG file.
' 5. Start DraftSight, create, save, and close a drawing
'    named c:\test\circle.dwg.
' 6. Set a breakpoint in the project where the project connects to
'    DraftSight.
' 7. Press F8 to step through the project.
'

' Postconditions: Message boxes pop up for all events,
' regardless if fired. Read the text in each message box
' before clicking OK to close it.

'------------------------------------------------------------------

'Main module
Option Explicit
Public dsAppEvents As Class1
Public dsDocEvents As Class2        
Public dsApp As DraftSight.Application
Public dsDoc As DraftSight.Document
Public docName As String        
Public filePreOpenNotify As Boolean
Public filePostOpenNotify As Boolean
Public fileModifyNotify As Boolean
Public fileSavePreNotify As Boolean
Public fileSavePostNotify As Boolean
Public docDestroyNotify As Boolean
Sub main()
        'Connect to DraftSight
        Set dsApp = GetObject(, "DraftSight.Application")
        'Abort any command currently running in DraftSight 
        'to avoid nested commands
        dsApp.AbortRunningCommand
        
        'Document to open
        docName = "c:\test\circle.dwg"
        
        'Set up events
        Set dsAppEvents = New Class1
        Set dsDocEvents = New Class2
        Set dsAppEvents = New Class1
        Set dsAppEvents.app = dsApp
        'Open document
        TestFileOpenEvents
        'Modify document
        TestFileModifyEvents
        'Save document as a different document
        TestFileSaveEvents
        'Close open document
        CloseAllDocuments
End Sub
Public Sub TestFileOpenEvents()
        'Open document
        Set dsDoc = dsApp.OpenDocument2(docName, dsDocumentOpenOption_e.dsDocumentOpen_Default, dsEncoding_e.dsEncoding_Default)
        
        Set dsDocEvents = New Class2
        Set dsDocEvents.doc = dsDoc
      
        If Not dsDoc Is Nothing Then
            If False = filePreOpenNotify Then
                MsgBox ("FileOpenPreNotify event wasn't fired while opening a document.")
            End If
            If False = filePostOpenNotify Then
                MsgBox ("FileOpenPostNotify event wasn't fired while opening a document.")
            End If
        Else
            MsgBox ("OpenDocument method returns Nothing for '" & docName & "' document.")
        End If
End Sub
    
    Public Sub TestFileModifyEvents()
        Dim imageFileName As String
        imageFileName = "c:\test\note.png"
        
        Dim dsPicture As DraftSight.ReferenceImage
        Dim dsModel As DraftSight.Model
        Dim dsSketchMgr As DraftSight.SketchManager
        
        If Not dsDoc Is Nothing Then
            'Get model space
            Set dsModel = dsDoc.GetModel
            If Not dsModel Is Nothing Then
                'Get sketch manager
                Set dsSketchMgr = dsModel.GetSketchManager
                If Not dsSketchMgr Is Nothing Then
                    fileModifyNotify = False
                    'Insert a picture in the model
                    Set dsPicture = dsSketchMgr.InsertPicture(imageFileName, 0#, 0#, 0#, 1#, 0#)
                    If Not dsPicture Is Nothing Then
                        'Check if ModifyNotify event is fired
                        If False = fileModifyNotify Then
                            MsgBox ("ModifyNotify event wasn't fired while inserting a picture in the document.")
                        End If
                    Else
                        MsgBox ("ISketchManager::InsertPicture method returns Nothing for the '" & dsDoc.GetPathName & "' document")
                    End If
                Else
                    MsgBox ("IModel.GetSketchManager method returns Nothing for the '" & dsDoc.GetPathName & "' document.")
                End If
            Else
                MsgBox ("IDocument.GetModel method returns Nothing for the " & dsDoc.GetPathName & " document.")
            End If
        Else
            MsgBox ("IApplication.OpenDocument method returns Nothing for the " & docName & " document.")
        End If
    End Sub
    Public Sub TestFileSaveEvents()
    
        Dim savedDocName As String
        Dim saveError As Long
        
        If Not dsDoc Is Nothing Then
            fileSavePreNotify = False
            fileSavePostNotify = False
            'Save document
            savedDocName = docName & "_saved.dwg"
            dsDoc.SaveAs2 savedDocName, dsDocumentSaveAs_R2010_DWG, True, saveError
            If saveError <> dsDocumentSave_Succeeded Then
                MsgBox ("SaveAs method returns '" & saveError & "' error.")
            Else
                'Check FileSavePreNotify and FileSavePostNotify events
                If False = fileSavePreNotify Then
                    MsgBox ("FileSavePreNotify event wasn't fired after saving the '" & docName & "' document")
                End If
                If False = fileSavePostNotify Then
                    MsgBox ("FileSavePostNotify event wasn't fired after saving the '" & docName & "' document")
                End If
            End If
        Else
            MsgBox ("OpenDocument method returns Nothing for the '" & docName & "' document.")
        End If
    End Sub
    Public Sub CloseAllDocuments()
    
        Dim dsDocs As Variant
        Dim index As Long
        Dim pathName As String
        
        'Get documents
        dsDocs = dsApp.GetDocuments
        If IsArray(dsDocs) Then
            For index = LBound(dsDocs) To UBound(dsDocs)
                Set dsDoc = dsDocs(index)
                pathName = dsDoc.GetPathName
                dsApp.CloseDocument pathName, False
                If False = docDestroyNotify Then
                    MsgBox ("DestroyNotify event wasn't fired after closing a document.")
                End If
            Next
        End If
    End Sub

 

'Class1 module
Option Explicit
Public WithEvents app As DraftSight.Application
    Public Sub app_FileOpenPostNotify(ByVal doc As DraftSight.Document)
        filePostOpenNotify = True
        MsgBox ("FileOpenPostNotify event was fired while opening a document.")
    End Sub
    
    Public Sub app_FileOpenPreNotify(ByVal fileName As String, ByVal appOption As dsDocumentOpenOption_e)
        filePreOpenNotify = True
        MsgBox ("FileOpenPreNotify event was fired while opening a document.")
    End Sub

 

'Class2 module
Option Explicit
Public WithEvents doc As DraftSight.Document

    Public Sub doc_DestroyNotify()
        docDestroyNotify = True
        MsgBox ("DestroyNotify event was fired after closing a document.")
    End Sub
    Public Sub doc_FileSavePostNotify()
        fileSavePostNotify = True
        MsgBox ("FileSavePostNotify event was fired after saving the '" & docName & "' document")
    End Sub
    Public Sub doc_FileSavePreNotify(ByVal fileName As String, ByVal saveOption As dsDocumentSaveAsOption_e)
        fileSavePreNotify = True
        MsgBox ("FileSavePreNotify event was fired after saving the '" & fileName & "' document")
    End Sub
    Public Sub doc_ModifyNotify()
        fileModifyNotify = True
        MsgBox ("ModifyNotify event was fired while inserting a picture in document.")
    End Sub

 

 


Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Fire Application and Document Events Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:




x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2019 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.