Ok, everything beautiful...new concepts...ideas... heheheh but....What I'll need to learn ?!?!!?!? Python + SQLObject + Flash = my cross-os standalone soft?
On 8/12/05, hosey hosey <[EMAIL PROTECTED]> wrote: > Have you thought about XUL with flash 8? > http://www.darronschall.com/weblog/archives/000108.cfm > I noticed your old example throws up a warning now, dont remeber it doing > so before.... > > > On 8/8/05, Darron J. Schall < [EMAIL PROTECTED]> wrote: > > Flash 8 has a wonderful new feature called ExternalInterface, sometimes > > referred to as External API. Essentially, it's the "new" way for the > > Flash player to talk to it's host. > > > > During the last Macromedia PodCast from Mike & Christian they had talked > > about Flash and JavaScript communication with ExternalInterface. Now > > that the cat is out of the bag on Studio 8, I wanted to let everyone > > know that you can also use ExternalInterface with a desktop host as > > well, and not just a browser. > > > > What does this mean? It means we can now build an open source > > synchronous projector (akin to mProjector) if we wanted to. > > > > Heres some details: The communication is done via an event and a few > > methods. When you call this ActionScript line: > > > > result = ExternalInterface.call ("TheMethod", "A sample string param..."); > > > > The ActiveX object will raise a "FlashCall" event and send you the event > > request as an XML string. The string will look like this for the above > > actionscript: <invoke name="TheMethod" > > returntype="xml"><arguments><string>A sample string > > param..."</string></arguments></invoke> > > > > In the event handler, you can then fire off your "TheMethod" in your C# > > (or C++,m or Python, or whatever is hosting the control), and then > > return some data back to flash. When you return data, you have to pass > > it back in the XML format as well, but you would call the > > control.SetReturnValue ("string") method, where "string" would look like > > this: > > > > "<string>This is a sample string being returned</string>" > > > > The Flash movie will block until either the return value is set, or the > > event handler is done executing (i.e. you don't have to return a value > > if you don't want to). > > > > Going the other way, from C# to Flash, you would first have to register > > a method to call inside of the Flash movie. You can do that by a line > > like this: > > > > // expose a method "activeStateChange" to the C# container > > ExternalInterface.addCallback("callMeFromCSharp", this, onCalled); > > > > The params are the method name C# should use, and then the typical scope > > / callback in ActionScript. Then, you can call the method as so (in C# > > here): > > > > string result = flashMovie.CallFunction("<invoke > > name=\"callMeFromCSharp\" > > > returntype=\"xml\"><arguments><bool>false</bool></arguments></invoke>"); > > > > Notice I'm using "CallFunction" to call the method, and I'm passing in > > the XML string for the invocation. This will fire off the "onCalled" > > ActionScript function inside of the movie. In that function then, I can > > "return 'hello'" and then the C# result will be "<string>hello</string>". > > > > So yes, this gives you synchronous communication from C# -> Flash and > > Flash -> C#. > > > > The awesome thing here is you don't have to use just strings. You can > > send native objects back and forth via ExternalInterface. For instance, > > if I want to return an array from an ExternalInterface call: > > > > var listFiles:Array = ExternalInterface.call("ListFiles", "c:\windows"); > > > > I can send an array of strings back, by calling SetReturnValue with the > > following string as the parameter: > > > > "<array><property id='0'><string>test.dll<string></property><property > > id='1'><string>hello.dll</string></property></array>" > > > > That will get serialized by the Flash Player as an array, and then in > > ActionScript I can loop over listFiles as an array (since it *is* an > array): > > > > for (var i = 0; i < listFiles.length; i++) // etc > > > > Likewise, numbers are serialized as <number>12.123</number> and objects > > look somewhat like arrays: > > > > <object> > > <property id='isThisCool'> > > <bool>true</bool> > > </property> > > </object> > > > > So, what the open source community should do is build a serialization / > > deserialization library to abstract the XML format away. Then, there > > should be an API build to abstract ExternalInterface away like: > > > > var ftp:DudeFTP = DudeAPI.OpenFTPConnection(ip, username, password); > > if (ftp.success) { > > var files:Array = ftp.listFiles("/pub"); > > } > > > > var newWindow:DudeWindow = DudeAPI.createWindow("some.swf", modal, > > title, closeButton, this, onClose); > > > > // etc. > > > > Let the discussion begin! Maybe this is a good time to ressurect my > > SharpFlash project... ;-) > > > > -d > > > > > > > > _______________________________________________ > > osflash mailing list > > [email protected] > > http://osflash.org/mailman/listinfo/osflash_osflash.org > > > > > _______________________________________________ > osflash mailing list > [email protected] > http://osflash.org/mailman/listinfo/osflash_osflash.org > > > -- . m a r c o s a u g u s t o ; _______________________________________________ osflash mailing list [email protected] http://osflash.org/mailman/listinfo/osflash_osflash.org
