# By Bradley Schatz # simple flash/python application demonstrating bidirectional # communicaion between flash and python. Click the sphere to see # behavior. Uses Bounce.swf from FlashBounce.zip, available from # http://pages.cpsc.ucalgary.ca/~saul/vb_examples/tutorial12/ # Update to the path of the .swf file (note it could be a true URL) flash_url = "c:\\bounce.swf" import sys import regutil import win32api import win32con import win32ui from pywin.mfc import activex, window from win32com.client import gencache FlashModule = gencache.EnsureModule("{D27CDB6B-AE6D-11CF-96B8-444553540000}", 0, 1, 0) if FlashModule is None: raise ImportError("Flash does not appear to be installed.") class MyFlashComponent(activex.Control, FlashModule.ShockwaveFlash): def __init__(self): activex.Control.__init__(self) FlashModule.ShockwaveFlash.__init__(self) self.x = 50 self.y = 50 self.angle = 30 self.started = 0 def OnFSCommand(self, command, args): print("FSCommend", command, args) self.x = self.x + 20 self.y = self.y + 20 self.angle = self.angle + 20 if self.x > 200 or self.y > 200: self.x = 0 self.y = 0 if self.angle > 360: self.angle = 0 self.SetVariable("xVal", self.x) self.SetVariable("yVal", self.y) self.SetVariable("angle", self.angle) self.TPlay("_root.mikeBall") def OnProgress(self, percentDone): print("PercentDone", percentDone) def OnReadyStateChange(self, newState): # 0=Loading, 1=Uninitialized, 2=Loaded, 3=Interactive, 4=Complete print("State", newState) class BrowserFrame(window.MDIChildWnd): def __init__(self, url=None): if url is None: self.url = regutil.GetRegisteredHelpFile("Main Python Documentation") else: self.url = url pass # Dont call base class doc/view version... def Create(self, 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 = MyFlashComponent() self.ocx.CreateControl( "Flash Player", win32con.WS_VISIBLE | win32con.WS_CHILD, rect, self, 1000 ) self.ocx.LoadMovie(0, flash_url) self.ocx.Play() self.HookMessage(self.OnSize, win32con.WM_SIZE) def OnSize(self, params): rect = self.GetClientRect() rect = (0, 0, rect[2] - rect[0], rect[3] - rect[1]) self.ocx.SetWindowPos(0, rect, 0) def Demo(): url = None if len(sys.argv) > 1: url = win32api.GetFullPathName(sys.argv[1]) f = BrowserFrame(url) f.Create("Flash Player") if __name__ == "__main__": Demo()