下面我先容一个更大略复活 Flash 播放器的方法,用打包后只有 3MB 的 WebKit(WKE) 内审阅读器组件嵌入 Flash 插件(绿色免安装),可以天生独立 EXE 文件,兼容 com.flash 的接口。
这里我们须要用到 web.kit 扩展库里的 web.kit.flash ,先看个大略的例子:
import win.ui;/DSG{{/var winform = win.form(text=34;web.kit.flash 动画")/}}/import web.kit.flash;var flash = web.kit.flash( winform ); winform.show(); //导出函数给 Flashflash.external = { func = function(){} }//指定初始化属性,建议在指定 movie 属性以前指定flash.bgcolor = "transparent";flash.wMode = "transparent"; flash.flashVars = {a="v1",b="v2"};//修正此属性或调用 render() 函数才会打开 Flash 动画。flash.movie = "https://update.aardio.com/v10.files/demo/transparent.swf";//调用 Flash 控件函数var flashVersion = flash.getVariable("$version")winform.msgbox("Flash 版本:" + flashVersion)//如下调用 Flash 导出的函数/flash.xcall("Flash导出函数名",任意个调用参数)flash.Flash导出函数名(任意个调用参数)/win.loopMessage();
上面便是一个桌面软件的完全代码,在 aardio 里新建一个空缺工程,把上面的代码复制到 main.aardio 中,然后按「发布」按钮就可以天生独立 EXE 文件了。
要把稳用浏览器控件播放 Flash ,那么 Flash 的地址必须传入通过 HTTP 做事器访问的网址。如果你要打开本地文件,这在 aardio 中非常随意马虎,一句代码就可以搞定,如下:
import wsock.tcp.simpleHttpServer;flash.movie = wsock.tcp.simpleHttpServer.startUrl("/res/test.swf");
"/res/test.swf" 是加入 aardio 工程目录的文件,"/res/"可以是嵌入EXE的资源目录。不须要改动任何代码,aardio 会自动支持内存加载这个 "/res/test.swf" 文件,可以天生独立 EXE,可以在运行时自动创建 HTTP 做事端并分配访问这个文件的网址 —— 并且 HTTP 做事端自动获取空闲端口( 不会涌现端口冲突 )。
wsock.tcp.asynHttpServer 也能创建嵌入式 HTTP 做事器,差异是 wsock.tcp.asynHttpServer 是单线程异步做事器,而 wsock.tcp.simpleHttpServer 是多线程做事器。
在 aardio 中你可以用任何内存数据虚拟一个通过 HTTP 访问的文件地址,例如 com.cube3 扩展库便是这样做的:
import wsock.tcp.asynHttpServer;httpServer = wsock.tcp.asynHttpServer();httpServer.run({ ["/cube3.swf"] = $"~\lib\com\cube3\.res\cube3.swf"});flash.movie = httpServer.getUrl("/cube3.swf");
上面的代码便是通过嵌入 HTTP 做事器虚拟的文件网址访问内存中的 swf 数据(请把稳在文件路径前面加上 $ 就会将该文件的内容编译到程序中并返回二进制字符串)。
扩展库 com.cube3 是一个魔方公式迁徙改变画的组件,这个扩展库原来是利用 com.flash 实现,我们现在利用 web.kit.flash 复活了这个扩展库,com.cube3 的完全源码如下:
import web.kit.flash;import wsock.tcp.asynHttpServer;import string.conv;namespace com;class cube3{ ctor( winform,param ){ this = ..web.kit.flash(winform); }; start = function(param){ if(param){ var fm = function(move){ if(!#move) return; move = ..string.conv.fromWide( move ); move = ..string.replace(move,"\n","\\n"); move = ..string.replace(move,'\t',' ') ; return move; } param.initmove = fm(param.initmove); param.move = fm( param.move ); param.speed = param.speed; param.mirror = param.mirror; this.flashVars = param; } this.movie = httpServer.getUrl("/cube3.swf"); } }namespace cube3{ httpServer = ..wsock.tcp.asynHttpServer(); httpServer.run({ ["/cube3.swf"] = $"~\lib\com\cube3\.res\cube3.swf" });}
看下调用 com.cube3 的运行效果:
在 aardio 扩展库管理器中双击 com.cube3 扩展库可以打开上面的范例源代码。