Hello Newsgroup,

I am currently programming ProgeCAD an AutoCAD Clone and having
difficulties catching all events.

My code:

import win32com.client
import pythoncom,pywintypes
import time
import tkFileDialog
import tkSimpleDialog
import IntelliCAD
import sys

icad_CLSID = '{77E49E57-976B-11CF-8CCB-00A0245B09EB}'
icad_ProgID = 'Icad.Application'
icad_mod = win32com.client.gencache.EnsureModule(icad_CLSID, 0,1,0)

defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.Empty

class WorkspaceEvents(IntelliCAD._IcadWorkspaceEvents):
    def __init__(self, oobj=None):
        IntelliCAD._IcadWorkspaceEvents.__init__(self, oobj)

# If you create handlers, they should have the following prototypes:
    def OnBeginFileDrop(self, FileName=defaultNamedNotOptArg,
Cancel=pythoncom.Missing):
        print 'OnBeginFileDrop Occurs when a file is dropped on the
application window'
    def OnNewDrawing(self):
        print 'OnNewDrawing Occurs when a new drawing is about to be
created'
    def OnAddinRun(self, AddinFunctionName=defaultNamedNotOptArg):
        print 'OnAddinRun Occurs when the user runs an add-in function from
the command line'
    def OnEndModal(self):
        print 'OnEndModal Occurs when a modal dialog is closed'
    def OnExit(self):
        print 'OnExit Occurs when the application is about to exit.'
    def OnLispCancelled(self):
        print 'OnLispCancelled Occurs when evaluation of a LISP expression
is cancelled'
    def OnNew(self, NewDocument=defaultNamedNotOptArg):
        print 'OnNew Occurs when a new drawing has been created.'
    def OnBeginOpen(self, DrawingName=defaultNamedNotOptArg):
        print 'OnBeginOpen Occurs when a drawing is requested to be opened'
    def OnEndSave(self, FileName=defaultNamedNotOptArg):
        print 'OnEndSave Occurs when a request to save the drawing has been
completed'
    def OnEndCommand(self, CommandName=defaultNamedNotOptArg):
        print 'OnEndCommand Occurs when a command is completed'
    def OnEndPlot(self, DrawingName=defaultNamedNotOptArg):
        print 'OnEndPlot Occurs when drawing has been sent to the printer'
    def OnSave(self, Document=defaultNamedNotOptArg):
        print 'OnSave Occurs when a drawing is about to be saved.'
    def OnBeginLisp(self, FirstLine=defaultNamedNotOptArg):
        print 'OnBeginLisp Occurs when receives a request to evaluate a
LISP expression'
    def OnEndOpen(self, DrawingName=defaultNamedNotOptArg):
        print 'OnEndOpen Occurs after a drawing has been opened'
    def OnBeginQuit(self, Cancel=pythoncom.Missing):
        print 'OnBeginQuit Occurs when the application starts to shut down.
 Returning False will terminate the shutdown.'
    def OnReinitialize(self):
        print 'OnReinitialize Occurs each time you open or create a drawing'
    def OnAppDeactivate(self):
        print 'OnAppDeactivate Occurs when the application window is
deactivated'
    def OnBeginSave(self, FileName=defaultNamedNotOptArg):
        print 'OnBeginSave Occurs when receives a request to save the
drawing'
    def OnBeforeExit(self, Cancel=pythoncom.Missing):
        print 'OnBeforeExit Occurs when the application starts to shut
down.  Returning False will terminate the shutdown.'
    def OnEndLisp(self):
        print 'OnEndLisp Occurs when evaluation of a LISP expression is
completed'
    def OnWindowChanged(self, vicWindowState=defaultNamedNotOptArg):
        print 'OnWindowChanged Occurs when window state is changed'
    def OnBeginPlot(self, DrawingName=defaultNamedNotOptArg):
        print 'OnBeginPlot Occurs when receives a request to print drawing'
    def OnAppActivate(self):
        print 'OnAppActivate Occurs when the application window is
activated'
    def OnStartup(self):
        print 'OnStartup Occurs when the application is starting up.'
#    def OnSysVarChanged(self, SysVarName=defaultNamedNotOptArg,
NewVal=defaultNamedNotOptArg):
#        print 'Occurs when the value of a system variable is changed'
    def OnBeginModal(self):
        print 'OnBeginModal Occurs when a modal dialog is about to be
displayed'
    def OnWindowMovedOrResized(self, HWNDFrame=defaultNamedNotOptArg,
bMoved=defaultNamedNotOptArg):
        print 'OnWindowMovedOrResized Occurs when window is moved or
resized'
    def OnClose(self, Document=defaultNamedNotOptArg):
        print 'OnClose Occurs when a drawing is about to be closed.'
    def OnBeginCommand(self, CommandName=defaultNamedNotOptArg):
        print 'OnBeginCommand Occurs when a command is called'
    def OnOpen(self, Document=defaultNamedNotOptArg):
        print 'OnOpen Occurs after a drawing has been opened.'


class DocumentEvents(IntelliCAD._EIcadDocument):
    def __init__(self,oobj=None):
        IntelliCAD._EIcadDocument.__init__(self, oobj)

# If you create handlers, they should have the following prototypes:
    def OnDeactivate(self):
        print 'OnDeactivate Occurs when a document window is deactivated'
    def OnBeginDocClose(self, Cancel=pythoncom.Missing):
        print 'OnBeginDocClose Occurs when IntelliCAD receives a request to
close the drawing'
    def OnBeginPlot(self, DrawingName=defaultNamedNotOptArg):
        print 'OnBeginPlot Occurs when receives a request to print drawing'
    def OnBeginClose(self):
        print 'OnBeginClose Occurs when IntelliCAD receives a request to
close the drawing'
    def OnEndCommand(self, CommandName=defaultNamedNotOptArg):
        print 'OnEndCommand Occurs when a command completed'
    def OnEndPlot(self, DrawingName=defaultNamedNotOptArg):
        print 'OnEndPlot Occurs when drawing has been sent to the printer'
    def OnSave(self):
        print 'OnSave Occurs when a drawing is about to be saved.'
    def OnBeginLisp(self, FirstLine=defaultNamedNotOptArg):
        print 'OnBeginLisp Occurs when receives a request to evaluate a
LISP expression'
    def OnSelectionChanged(self):
        print 'OnSelectionChanged Occurs when the current selection set is
changed'
    def OnLayoutSwitched(self, LayoutName=defaultNamedNotOptArg):
        print 'OnLayoutSwitched Occurs after switching to a different
layout'
    def OnBeginSave(self, FileName=defaultNamedNotOptArg):
        print 'OnBeginSave Occurs when receives a request to save the
drawing'
    def OnEndLisp(self):
        print 'OnEndLisp Occurs when evaluating of a LISP expression
completed'
    def OnBeginDoubleClick(self, PickPoint=defaultNamedNotOptArg):
        print 'OnBeginDoubleClick Occurs when the user double-clicks on the
drawing window'
    def OnWindowChanged(self, vicWindowState=defaultNamedNotOptArg):
        print 'OnWindowChanged Occurs when window state changed'
    def OnBeginRightClick(self, PickPoint=defaultNamedNotOptArg):
        print 'OnBeginRightClick Occurs when the user right-clicks on the
drawing window'
    def OnLispCanceled(self):
        print 'OnLispCanceled Occurs when evaluating of a LISP expression
canceled'
    def OnActivate(self):
        print 'OnActivate Occurs when a document window is activated'
    def OnEndSave(self, FileName=defaultNamedNotOptArg):
        print 'OnEndSave Occurs when a request to save the drawing has been
completed'
    def OnWindowMovedOrResized(self, HWNDFrame=defaultNamedNotOptArg,
bMoved=defaultNamedNotOptArg):
        print 'OnWindowMovedOrResized Occurs when window moved or resized'
    def OnClose(self,cancel=pythoncom.Missing):
        print 'OnClose Occurs when a drawing is about to be closed.'
    def OnBeginCommand(self, CommandName=defaultNamedNotOptArg):
        print 'OnBeginCommand Occurs when receives a command'
    def OnOpen(self):
        print 'OnOpen Occurs after a drawing has been opened.'

icad = win32com.client.Dispatch(icad_ProgID,'Administrator')
app = icad.Application
ws = icad.Workspace
ad = icad.ActiveDocument
ws_ev = win32com.client.WithEvents(app,WorkspaceEvents)
doc_ev = win32com.client.WithEvents(ad,DocumentEvents)

#pythoncom.PumpMessages()

import Tkinter
root = Tkinter.Tk()
root.mainloop()

Some workspace events are catched (like OnAppActivate and OnAppDeactivate)
or for document events (OnActivate, OnDeactivate) but most are not.
For instance opening drawings or adding new ones is ignored. If however I
call the method for creating new documents or opening existing the events
work. So the hint might be it has something to do with the focus.
In VB2010 everything works as exspected so I think the program is ok.

Neither root.mainloop() nor pythoncom.PumpMessages() work. I also tried a
different implementation of the events:

icad = IntelliCAD.Application()
WSClass = ClassType("COMEventClass", (icad.__class__, icad.default_source,
 WorkspaceEvents), {'__setattr__': win32com.client._event_setattr_})
wse = WSClass(icad._oleobj_)
icad.default_source.__init__(wse,wse)
icad = win32com.client.EventsProxy(wse)

...but the behavior is just the same.

Could threading be a solution to my problem? I've never done threading
before and I am relativly new to python so if anyone could give me a
starting hand for threading I'll be glad.

Any other suggestions are also welcome.

Thank you for your audience.

Kind regards

Johannes Frank







-- 
Dipl.-Ing. (FH) Johannes-Maria Frank
Bildungsberater
Königsberger-Str. 19b
76139 Karlsruhe
Tel. +49(170) 3833849
e-mail: jmfran...@gmail.com
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to