pythonCOM with Flash
Bradley Schatz
bradley at greystate.com
Sat Jun 14 05:41:25 EDT 2003
Thanks Mark - Distributed testing pays off again.:) What didnt work on my
work pc worked on yours and also my home pc. I am pleased to report that
events work as expected too.
> I'm uninterested in flash :) I use Mozilla as my day-to-day browser for
> a number of reasons, and am happy that I actually need to go out of my
> way to enable flash support there.
I cant say that I have bothered to get flash working under my linux mozilla.
My primary interest is using flash as the UI for python apps (on win32 of
course). Not because I want to learn yet another gui toolkit, but because
creative types seem pretty comfortable designing really good looking UI
prototypes in flash.
A couple of sites have covered this from a VB perspective - this article
covers it in depth
http://www.macromedia.com/devnet/mx/flash/articles/flash_vb.pdf
Find a working demo attached below - click on the sphere in the flash
window, and python will respond and change the gui based on the event.
My next goal is to get this working outside of pythonwin, as a standard app.
Any further suggestions on how how to throw together a simple activex gui
container?
-Bradley
# 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/
# make sure this .py has the right filesystem path to the swf
import win32ui, win32con, win32api, regutil
from pywin.mfc import window, activex
from win32com.client import gencache
import sys
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,"C:\\Projects\\flash\\Bounce.swf")
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()
More information about the Python-list
mailing list