[python-win32] Creating python com objects
Roger Upole
rwupole at msn.com
Thu Apr 24 23:25:03 CEST 2008
Tim Golden wrote:
> Alex Denham wrote:
>> Parameters
>>
>> /pDataObj/ : *PyIDataObject **
>>
>> How do i link the IDataObject to the IDragTarget?
>
> I don't know that you can, if you're asking: how do I
> find out where this is coming from?. I think the drag-drop
> technique is endpoint-agnostic. (A high-sounding phrase I've
> just invented).
Don't forget to trademark it !
> The most you can do is get hold of the data.
> Again, I think.
This is correct, the IDataObject interface is provided by the object
that's being dragged. Unless you're also providing the dragged
object the interface should be opaque.
>
> I'm out of my depth so I'm hoping that Roger or Mark
> or other more knowledgeable people can chip in at this point
> and help.
>
> For the purposes of discussion, I attach below my test harness
> code which creates a simple window and registers a simple
> IDropTarget object against it.
>
> Sorry to be no more help than this.
> TJG
>
> <code>
> import os, sys
> import win32gui
> import win32con
> import pythoncom
>
> CLSID = '{89DD545A-2C83-4103-AFE3-6CEB7FF5ECA4}'
> PROGID = "Tim.DropTarget"
> DESC = "Drop target handler for Tim's app"
>
> class DropTarget:
> _reg_clsid_ = CLSID
> _reg_progid_ = PROGID
> _reg_desc_ = DESC
> _public_methods_ = ['DragEnter', 'DragOver', 'DragLeave', 'Drop']
> _com_interfaces_ = [pythoncom.IID_IDropTarget]
>
> def DragEnter (self, data_object, key_state, point, effect):
> pass
> def DragOver (self, key_state, point, effect):
> pass
> def DragLeave (self):
> pass
> def Drop (self, data_object, key_state, point, effect):
> pass
>
> def create_window ():
> def OnDestroy (hwnd, msg, wparam, lparam):
> win32gui.PostQuitMessage (0)
>
> wc = win32gui.WNDCLASS ()
> hinst = win32gui.GetModuleHandle(None)
> wc.lpszClassName = "DragDrop"
> wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW;
> wc.hCursor = win32gui.LoadCursor (0, win32con.IDC_ARROW)
> wc.hbrBackground = win32con.COLOR_WINDOW
> wc.lpfnWndProc = {win32con.WM_DESTROY : OnDestroy}
> classAtom = win32gui.RegisterClass (wc)
> style = win32con.WS_VISIBLE | \
> win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
> return win32gui.CreateWindow (
> classAtom,
> "Drag & Drop demo",
> style,
> 0, 0, 100, 100,
> 0, 0, hinst, None
> )
>
> if __name__ == '__main__':
> pythoncom.OleInitialize ()
> drop_target = pythoncom.WrapObject (
> DropTarget,
> pythoncom.IID_IDropTarget,
> pythoncom.IID_IDropTarget
> )
> pythoncom.RegisterDragDrop (create_window (), drop_target)
> win32gui.PumpMessages ()
>
> </code>
There's a little extra work you have to do for WrapObject to work locally.
See \win32comext\authorization\demos\EditSecurity.py for an example.
Roger
More information about the python-win32
mailing list