96 lines
2.9 KiB
Python
96 lines
2.9 KiB
Python
|
# 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()
|