123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- # OCX Tester for Pythonwin
- #
- # This file _is_ ready to run. All that is required is that the OCXs being tested
- # are installed on your machine.
- #
- # The .py files behind the OCXs will be automatically generated and imported.
- from pywin.mfc import dialog, window, activex
- import win32ui, win32uiole
- import win32con
- import os, sys, win32api, glob
- from win32com.client import gencache
- def MakeDlgTemplate():
- style = win32con.DS_MODALFRAME | win32con.WS_POPUP | win32con.WS_VISIBLE | win32con.WS_CAPTION | win32con.WS_SYSMENU | win32con.DS_SETFONT
- cs = win32con.WS_CHILD | win32con.WS_VISIBLE
- dlg = [ ["OCX Demos", (0, 0, 350, 350), style, None, (8, "MS Sans Serif")], ]
- s = win32con.WS_TABSTOP | cs
- # dlg.append([131, None, 130, (5, 40, 110, 48),
- # s | win32con.LBS_NOTIFY | win32con.LBS_SORT | win32con.LBS_NOINTEGRALHEIGHT | win32con.WS_VSCROLL | win32con.WS_BORDER])
- # dlg.append(["{8E27C92B-1264-101C-8A2F-040224009C02}", None, 131, (5, 40, 110, 48),win32con.WS_TABSTOP])
- dlg.append([128, "About", win32con.IDOK, (124, 5, 50, 14), s | win32con.BS_DEFPUSHBUTTON])
- s = win32con.BS_PUSHBUTTON | s
- dlg.append([128, "Close", win32con.IDCANCEL, (124, 22, 50, 14), s])
-
- return dlg
- ####################################
- #
- # Calendar test code
- #
- def GetTestCalendarClass():
- global calendarParentModule
- win32ui.DoWaitCursor(1)
- calendarParentModule = gencache.EnsureModule("{8E27C92E-1264-101C-8A2F-040224009C02}", 0, 7, 0)
- win32ui.DoWaitCursor(0)
- if calendarParentModule is None:
- return None
- class TestCalDialog(dialog.Dialog):
- def OnInitDialog(self):
-
- class MyCal(activex.Control, calendarParentModule.Calendar):
- def OnAfterUpdate(self):
- print("OnAfterUpdate")
- def OnClick(self):
- print("OnClick")
- def OnDblClick(self):
- print("OnDblClick")
- def OnKeyDown(self, KeyCode, Shift):
- print("OnKeyDown", KeyCode, Shift)
- def OnKeyPress(self, KeyAscii):
- print("OnKeyPress", KeyAscii)
- def OnKeyUp(self, KeyCode, Shift):
- print("OnKeyUp", KeyCode, Shift)
- def OnBeforeUpdate(self, Cancel):
- print("OnBeforeUpdate", Cancel)
- def OnNewMonth(self):
- print("OnNewMonth")
- def OnNewYear(self):
- print("OnNewYear")
- rc = dialog.Dialog.OnInitDialog(self)
- self.olectl = MyCal()
- try:
- self.olectl.CreateControl("OCX", win32con.WS_TABSTOP | win32con.WS_VISIBLE, (7,43,500,300), self._obj_, 131)
- except win32ui.error:
- self.MessageBox("The Calendar Control could not be created")
- self.olectl = None
- self.EndDialog(win32con.IDCANCEL)
- return rc
- def OnOK(self):
- self.olectl.AboutBox()
-
- return TestCalDialog
-
- ####################################
- #
- # Video Control
- #
- def GetTestVideoModule():
- global videoControlModule, videoControlFileName
- win32ui.DoWaitCursor(1)
- videoControlModule = gencache.EnsureModule("{05589FA0-C356-11CE-BF01-00AA0055595A}", 0, 2, 0)
- win32ui.DoWaitCursor(0)
- if videoControlModule is None:
- return None
- fnames = glob.glob(os.path.join(win32api.GetWindowsDirectory(), "*.avi"))
- if not fnames:
- print("No AVI files available in system directory")
- return None
- videoControlFileName = fnames[0]
- return videoControlModule
- def GetTestVideoDialogClass():
- if GetTestVideoModule() is None:
- return None
- class TestVideoDialog(dialog.Dialog):
- def OnInitDialog(self):
- rc = dialog.Dialog.OnInitDialog(self)
- try:
- self.olectl = activex.MakeControlInstance(videoControlModule.ActiveMovie)
- self.olectl.CreateControl("", win32con.WS_TABSTOP | win32con.WS_VISIBLE, (7,43,500,300), self._obj_, 131)
- except win32ui.error:
- self.MessageBox("The Video Control could not be created")
- self.olectl = None
- self.EndDialog(win32con.IDCANCEL)
- return
- self.olectl.FileName = videoControlFileName
- # self.olectl.Run()
- return rc
- def OnOK(self):
- self.olectl.AboutBox()
- return TestVideoDialog
- ###############
- #
- # An OCX in an MDI Frame
- #
- class OCXFrame(window.MDIChildWnd):
- def __init__(self):
- pass # Dont call base class doc/view version...
- def Create(self, controlClass, title, rect = None, parent = None):
- style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_OVERLAPPEDWINDOW
- self._obj_ = win32ui.CreateMDIChild()
- self._obj_.AttachObject(self)
- self._obj_.CreateWindow(None, title, style, rect, parent)
-
- rect = self.GetClientRect()
- rect = (0,0,rect[2]-rect[0], rect[3]-rect[1])
- self.ocx = controlClass()
- self.ocx.CreateControl("", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000)
- def MDITest():
- calendarParentModule = gencache.EnsureModule("{8E27C92E-1264-101C-8A2F-040224009C02}", 0, 7, 0)
- class MyCal(activex.Control, calendarParentModule.Calendar):
- def OnAfterUpdate(self):
- print("OnAfterUpdate")
- def OnClick(self):
- print("OnClick")
-
- f = OCXFrame()
- f.Create(MyCal, "Calendar Test")
- def test1():
- klass = GetTestCalendarClass()
- if klass is None:
- print("Can not test the MSAccess Calendar control - it does not appear to be installed")
- return
- d = klass(MakeDlgTemplate() )
- d.DoModal()
- def test2():
- klass = GetTestVideoDialogClass()
- if klass is None:
- print("Can not test the Video OCX - it does not appear to be installed,")
- print("or no AVI files can be found.")
- return
- d = klass(MakeDlgTemplate() )
- d.DoModal()
- d = None
- def test3():
- d = TestCOMMDialog(MakeDlgTemplate() )
- d.DoModal()
- d = None
- def testall():
- test1()
- test2()
- def demo():
- testall()
- if __name__=='__main__':
- from . import demoutils
- if demoutils.NeedGoodGUI():
- testall()
|