aardio官方社区

标题: 使用 win.flashBox 创建Flash透明窗口(支持内存加载swf) [打印本页]

作者: Jacen.He    时间: 2012-12-4 04:13
标题: 使用 win.flashBox 创建Flash透明窗口(支持内存加载swf)
标准库中增加 win.flashBox 组件,
用于在桌面上透明显示flash动画,也可以支持让子窗口透明显示flash动画。
可以支持内存加载,可生成独立EXE文件,支持系统自带的flash控件。

与基于商业组件f-in-box的 win.flashInbox扩展库比较:

1、win.flashBox 完全免费、可自由使用。
2、win.flashBox 的体积比f-in-box小很多,仅32KB,也就是一个很小的小图标那么大。
f-in-box对新版flash控件支持不稳定(之前发的范例遇到崩溃规象,最后是打包一个lash8.ocx解决,但这样体积就更大了)
3、win.flashBox 可以让子窗口播放透明flash动画(使用custom控件即可),flash可以在网页以外的控件上面飘来飘去了。

--------------------------------------------------------------
win.flashBox的用法完全兼容 com.flash 的所有接口,
支持aardio与as脚本交互、添加事件等都非常方便,这些请参考原来的flash调用例子。
只要简单的把范例里的 com.flash 几个字替换为 win.flashBox就可以,用法完全一样。
--------------------------------------------------------------


创建透明窗口方法一:
--------------------------------------------------------------
直接使用 win.flashBox 创建窗口。
  1. import win.flashBox
  2. var flash = ..win.flashBox(text="aardio Form";right=599;bottom=399)
  3. flash.movie = "http://update.aardio.com/aardio/samples/transparent.swf";

  4. flash.show()
  5. win.loopMessage();
复制代码


创建透明窗口方法二:
--------------------------------------------------------------
可以在已创建的winform窗口对象上显示透明动画(支持custom控件创建的子窗口)
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="迤明FLASH";right=562;bottom=355;border="dialog frame";parent=...)
  4. winform.add(
  5. button={cls="button";text="button";left=296;top=238;right=488;bottom=301;z=2};
  6. combobox={cls="combobox";left=76;top=51;right=229;bottom=77;edge=1;items={};mode="dropdown";z=3};
  7. edit={cls="edit";text="edit";left=82;top=99;right=493;bottom=222;edge=1;multiline=1;z=4};
  8. flashWnd={cls="custom";text="custom";left=28;top=17;right=538;bottom=333;autosize=1;center=1;edge=1;transparent=1;z=1}
  9. )
  10. /*}}*/

  11. winform.show();

  12. import win.flashBox;
  13. var flash = win.flashBox( winform.flashWnd );
  14. flash.movie = "http://update.aardio.com/aardio/samples/transparent.swf";

  15. win.loopMessage();
复制代码


一个完整的透明FLASH界面示例:点击下载全部源码(含swf文件)


以下是上面示例的完整源码:
import process;;
import win.flashBox;
  
var flash = win.flashBox( text = "FLash透明窗口"  )

// 导出接口函数可供Flash调用
flash.external = {
    close=
function(){ flash._form.close() };
    quit=
function(){ flash._form.close() };
    minimal =
function(){ flash._form.hitmin(); };
    moving =
function(){ flash._form.hitCaption() };
    register =
function(){ process.openUrl("http://bbs.aardio") };
    charge =
function(){ flash._form.msgbox("免费免费了!") };
    repair =
function(){ flash._form.msgbox("修复已完成!") };
    settingr =
function(){ flash._form.msgbox("本功能还没时间写!") } ;
    start  =
function(){ flash.play() };
    resize =
function(param){
        param = string.split(param,
",");
        flash._form.setPos(0,0,param[1],param[2]);
    };
    [
"end"] = function(){
   
        
//调用flash函数设置进度条
        flash.setProgressPart(0);
        flash.setProgressTotal(0);
        
        
var progress = 0;
        flash._form.addtimer(
            10
/*毫秒*/,//定时执行代码
            function(hwnd,msg,id,tick){
                progress++;
                flash.setProgressPart(progress);
                flash.setProgressTotal(progress);
            }
        );
    }
}

flash.show()
//显示窗口
flash.movie = $"\res\movie.swf" //内存加载Flash
win.loopMessage();



作者: Jacen.He    时间: 2012-12-4 04:16
标题: web.kit也可以显示透明flash,可以内存加载flash,或嵌入资源里加载swf文件。 这个是开源且免费的,但是webkit组件比较大,组件本身不能嵌入
web.kit也可以显示透明flash,可以内存加载flash,或嵌入资源里加载swf文件。
这个是开源且免费的,但是webkit组件比较大,组件本身不能嵌入EXE。
(, 下载次数: 354)

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form(text="webkit浏览器简单示例";right=1123;bottom=570;border="none";mode="popup")
  4. winform.add()
  5. /*}}*/

  6. //导入webkit支持库
  7. import web.kit.layeredWindow;
  8. import web.kit.fileSystem; //让flash可以支持内存嵌入资源
  9. var webkit = web.kit.layeredWindow(winform);//创建透明分层窗口

  10. webkit.html = /**
  11. <!doctype html>
  12. <html>
  13. <body>
  14.     <object width="500" height="500" type="application/x-shockwave-flash" data="http://img.pet.qq.com/xuanflash/1024900151.swf">
  15.         <param name="movie" value="http://img.pet.qq.com/xuanflash/1024900151.swf">
  16.         <param name="wmode" value="Transparent">
  17.         <param name="quality" value="high" />
  18.     </object>
  19.    
  20.     <!--注意页面上一定要放一点什么空白的内容,不然透明Flash无法自己绘制背景导致产生重影-->
  21.      
  22. </body>
  23. </html>
  24. **/

  25. winform.wndproc = function(hwnd,message,wParam,lParam){
  26.     if( message == 0x201/*_WM_LBUTTONDOWN*/ )
  27.         winform.close();
  28. }

  29. winform.show()
  30. win.loopMessage();
复制代码

作者: xuxu    时间: 2012-12-4 07:53
标题: 多谢Jacen,我正想研究Flash动画
多谢Jacen,我正想研究Flash动画
作者: nvt303    时间: 2012-12-4 08:22
标题: 努力往懂看。
努力往懂看。
作者: jyb21    时间: 2012-12-4 08:58
标题: 4小时前什么概念,夜里4点发的啊,辛苦了
4小时前什么概念,夜里4点发的啊,辛苦了
作者: 5e365    时间: 2012-12-4 09:04
标题: 前排学习。感谢!
前排学习。感谢!
作者: carl    时间: 2012-12-4 09:08
标题: 很是给力,又有新东西了
很是给力,又有新东西了
作者: ProPHP    时间: 2012-12-4 14:26
标题: 真是全心全意为大家啊,十分感谢
真是全心全意为大家啊,十分感谢
作者: auaau    时间: 2012-12-4 14:51
标题: [code] import win.flashInBox; /*去掉试用水印{{*/ import process; var prcs = pr

  1. import win.flashInBox;

  2. /*去掉试用水印{{*/
  3. import process;
  4. var prcs = process();  
  5. var pDrawDemoAddr = tonumber( win.flashInBox._dll.gethandle()  ) +  0x1000 + 0x25EE0;
  6. prcs.protect(pDrawDemoAddr,0x4/*_PAGE_READWRITE*/,1)
  7. prcs.writeString( pDrawDemoAddr,'\0' )
  8. prcs.free();
  9. /*}}*/


  10. var flash = ..win.flashInBox(  text = "flashInBox 去掉试用水印"  )
  11. flash.show()
  12. flash.putMovie( $"~\example\Flash\testCall.swf")
  13.        
  14. win.loopMessage()
复制代码

作者: MMiao79    时间: 2012-12-4 15:11
标题: {:3_48:} 参观下!留个记号!谢谢代码分享~
  参观下!留个记号!谢谢代码分享~
作者: donque2010    时间: 2012-12-4 15:25
标题: 支持一个,感谢分享~
支持一个,感谢分享~
作者: qqmmcc    时间: 2012-12-4 21:24
标题: 强大,支持~ 日后有空学习~
强大,支持~ 日后有空学习~
作者: wealthy    时间: 2012-12-5 13:30
标题: 强大,支持{:3_59:}
强大,支持
作者: wyyyh    时间: 2012-12-5 13:42
标题: 相当的漂亮
相当的漂亮
作者: Jacen.He    时间: 2012-12-5 22:50
标题: [align=left][font=新宋体][color=#0000ff]var[/color][color=#000000] flash = ..win.fl
var flash = ..win.flashInBox(  text = "flashInBox 透明窗口"  )
创建flash对象以后,flash._form 就是一个普通的winform对象,例如关闭窗口就是 flash._form.close();




作者: fanishare    时间: 2012-12-9 20:40
标题: 支持一把!
支持一把!
作者: xiaozhou    时间: 2012-12-13 22:25
标题: 看到这么多帖子,我真感觉我找到了这我一直想找的一种语言,或者称之为工具,
看到这么多帖子,我真感觉我找到了这我一直想找的一种语言,或者称之为工具,
作者: evanliang    时间: 2013-1-23 18:27
标题: 谢谢啦!哈哈,学习嘛!
谢谢啦!哈哈,学习嘛!
作者: richardor    时间: 2013-1-24 20:49
标题: 厉害啊。c++也能这么方便的实现么
厉害啊。c++也能这么方便的实现么
作者: LikeAAuto    时间: 2013-1-27 23:39
标题: 学习
学习
作者: gxrcn    时间: 2013-4-20 11:47
标题: [quote][size=2][color=#999999]Jacen 发表于 2012-12-5 22:50[/color] [url=forum.php?m
Jacen 发表于 2012-12-5 22:50
var flash = ..win.flashInBox(  text = "flashInBox 去掉试用水印"  )创建flash对象以后,flash._form 就是 ...

那能否实现窗口拖动?
作者: 编程    时间: 2013-4-20 12:30
标题: [quote][size=2][color=#999999]gxrcn 发表于 2013-4-20 11:47[/color] [url=forum.php?m
gxrcn 发表于 2013-4-20 11:47
那能否实现窗口拖动?

可以的,鼠标按下时调用 winform.hitCaption() 就可以
作者: gxrcn    时间: 2013-4-20 12:39
标题: [quote][size=2][color=#999999]编程 发表于 2013-4-20 12:30[/color] [url=forum.php?mod=
编程 发表于 2013-4-20 12:30
可以的,鼠标按下时调用 winform.hitCaption() 就可以

flash._form.wndproc = function(hwnd,message,wparam,lparam){
     
      select(message) {//判断消息类型        
        case 0x201/*_WM_LBUTTONDOWN*/ {
                        flash._form.hitCaption();
                };        
    }     
}

加了一个是可以拖动,不过只有部分(灰色部分)可以拖动,其他地方不可以
作者: v11ks    时间: 2013-5-8 19:46
标题: 好帖留名.
好帖留名.
作者: 易天龙    时间: 2013-5-10 17:13
标题: 能讲一下函数功能吗?
能讲一下函数功能吗?

作者: xky5000    时间: 2013-5-21 16:08
标题: {:3_60:} 这个很强大.就是自己不能实现在.窗口控件上!
这个很强大.就是自己不能实现在.窗口控件上!
作者: wwek    时间: 2013-5-22 19:04
标题: 非常牛逼 漂亮 学习·
非常牛逼 漂亮 学习·
作者: walklife    时间: 2013-5-25 12:12
标题: 支持一个
支持一个
作者: 醋溜白菜帮    时间: 2013-6-5 14:36
标题: 看高手的贡献,谢谢!正在学习中
看高手的贡献,谢谢!正在学习中
作者: charliechen    时间: 2013-7-25 11:02
标题: 哇,这个界面好酷哦,谢谢老大分享
哇,这个界面好酷哦,谢谢老大分享
作者: zzb1187543485    时间: 2013-8-4 14:00
标题: 效果太好看了,厉害哦
效果太好看了,厉害哦
作者: 8966092    时间: 2013-10-25 15:24
标题: 做个记号先~~
做个记号先~~
作者: Jacen.He    时间: 2013-11-4 03:09
标题: 最近 flash版本升级导致该控件透明功能失效, 请大家更新扩展库,使用 win.flashInBox.initialize($"/Flash8.ocx")
最近 flash版本升级导致该控件透明功能失效,
请大家更新扩展库,使用 win.flashInBox.initialize($"/Flash8.ocx") 内存载入低版本OCX即可正常使用透明窗口显示flash。
作者: 智慧人生    时间: 2013-11-4 14:08
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62617&ptid=8785][co
Jacen 发表于 2013-11-4 03:09
最近 flash版本升级导致该控件透明功能失效,
请大家更新扩展库,使用 win.flashInBox.initialize($"/Flas ...


赞了。
作者: gxrcn    时间: 2013-11-5 09:50
标题: 这个好像失效了,以前还可以用的,现在不能正常了
这个好像失效了,以前还可以用的,现在不能正常了
作者: gxrcn    时间: 2013-11-5 10:16
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62617&ptid=8785][co
Jacen 发表于 2013-11-4 03:09
最近 flash版本升级导致该控件透明功能失效,
请大家更新扩展库,使用 win.flashInBox.initialize($"/Flas ...

解决问题了
作者: cheetah    时间: 2014-2-2 15:38
标题:   参观下!留个记号!谢谢代码分享~

&#160;&#160;参观下!留个记号!谢谢代码分享~
作者: cheetah    时间: 2014-2-3 02:57
标题: 4小时前什么概念,夜里4点发的啊,辛苦了

4小时前什么概念,夜里4点发的啊,辛苦了
作者: kiss0459    时间: 2014-8-8 11:18
标题: 请问如何能把flash窗口 辅助到自己的窗口中呢?
请问如何能把flash窗口 辅助到自己的窗口中呢?
作者: auaau    时间: 2014-8-8 11:49
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=67063&ptid=8785][co
kiss0459 发表于 2014-8-8 11:18
请问如何能把flash窗口 辅助到自己的窗口中呢?

" 辅助到自己的窗口" ? 你自己刚发明的词?
作者: linovo    时间: 2014-9-22 14:15
标题: 真的很不错的说,用了这么多之后 是最好用的一个
真的很不错的说,用了这么多之后 是最好用的一个

作者: hk2000    时间: 2014-11-20 17:28
标题: 请问如果swf作为背景,我想在swf的上面加入一个html远程框架应该怎么写了
请问如果swf作为背景,我想在swf的上面加入一个html远程框架应该怎么写了
作者: 不争    时间: 2014-11-20 19:08
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=68133&ptid=8785][co
hk2000 发表于 2014-11-20 17:28
请问如果swf作为背景,我想在swf的上面加入一个html远程框架应该怎么写了

首先拖一个static放在flash控件前面,【浮动透明】属性设为false。
调整好以后,右键点控件在菜单中选“后置”让他跑到flash控件。

再点击flash控件,在属性中设置【重叠裁剪】为true( 如果flash控件是父窗口,则设置【内部裁剪】为true),这样网页就可以穿透flash控件显示在前面了。

然后加代码
  1. import web.form;
  2. var wb = web.form(  winform.static )
  3. wb.go("http://要显示的网址")
复制代码

作者: a31072456    时间: 2015-4-21 14:48
标题: 支持一把!

支持一把!
作者: 2535163639    时间: 2015-10-31 13:08
标题: 蟹蟹!{:3_41:}
蟹蟹!
作者: naiking    时间: 2015-11-17 11:22
标题: 为什么 ,我在运行模式下 可以与Flash 通信。 但是发布后的,就不可以通信了呢。 Flash cs5 AS3 编写的代码如下 [code][la
为什么 ,我在运行模式下 可以与Flash 通信。
但是发布后的,就不可以通信了呢。

Flash cs5  AS3 编写的代码如下
  1. close.addEventListener(MouseEvent.CLICK,onCloseFun);
  2. function onCloseFun(e:MouseEvent=null)
  3. {
  4.         ExternalInterface.call("fClose","Flash Close");
  5. }
复制代码




aardio的代码如下
  1. var flash = ..win.flashBox({text = "任务栏你好"});  

  2. //内存加载Flash
  3. flash.movie = $"\res\myFlash.swf";
  4. flash.external = {

  5.    fMove=function(){
  6.                 flash._form.hitCaption();

  7.         }
  8.         fClose=function(){
  9.                 flash._form.close();

  10.         }
  11.        
  12. }
复制代码



以上在运行 的时候 ,是正常的,可以拖拽,可以点击flashd里的ui按钮
但是一旦 发布后的,就不行了。

请遇到类似问题的 指教。谢谢
作者: naiking    时间: 2015-11-17 13:46
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=70304&ptid=8785][co
naiking 发表于 2015-11-17 11:22
为什么 ,我在运行模式下 可以与Flash 通信。
但是发布后的,就不可以通信了呢。

http://pan.baidu.com/s/1kTnjayr
工程

谢谢 quicker
作者: quicker    时间: 2015-11-17 17:32
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=70307&ptid=8785][co
naiking 发表于 2015-11-17 13:46
http://pan.baidu.com/s/1kTnjayr
工程
你可以在flash脚本中 try catch 一下,然后会看到安全沙箱错误 security error #2060, flash自动检测安全沙箱的机制有点奇怪,试了下其他swf文件又是正常的。

解决方法:
import win.flashBox;
var flash = win.flashBox({text = "flash透明窗口"});  
flash._object.DisableLocalSecurity();




作者: naiking    时间: 2015-11-18 11:29
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=70308&ptid=8785][co
quicker 发表于 2015-11-17 17:32
你可以在flash脚本中 try catch 一下,然后会看到安全沙箱错误 security error #2060, flash自动检测安全沙 ...

3Q quicker .

你的解答帮我解决了问题 。
谢谢

我忽略安全沙箱的事情了
我之前搞webgame开发,多数是因为不在相同域 才会涉及此问题。
这个swf就在资源目录,按说是同域的,还有参考 demo的那个 。
也没有提沙箱的事情。


感谢你的帮助
作者: quicker    时间: 2015-11-18 12:12
标题: [quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=70313&ptid=8785][co
naiking 发表于 2015-11-18 11:29
3Q quicker .你的解答帮我解决了问题 。
flash他会自动检测是不是本地应用,而且测试其他的swf也是好的,似乎flash有这上面还存在一些设计上的缺陷,或者是一些暂未搞清楚的规则,而且flash的版本在不断更新安全规则也越来越严格,对此给您导致的困扰和麻烦非常抱歉。

aardio中提供的的demo有可能并没有包含您编写flash脚本时遇到的其他错误,
我们给您的建议是,如果flash脚本工作不正常,可以在flash脚本中添加 try catch 捕获错误信息。
如果使用flash控件中还遇到其他疑问,您也可以参考flash控件提供的官方文档资料查找原因。

我们也欢迎分享这些错误处理经验,并不断的完善flash范例,简化flash控件的使用,目前aardio最新版本中已针对flash控件做了调整,请将 flash.external 写在加载swf文件前面,新版会自动帮你设置好。


作者: fjoox    时间: 2016-3-29 20:15
标题: 学习了,{:hug:}
学习了,
作者: qq317813922    时间: 2016-4-28 15:20
标题: 收藏,留下以后学习,{:3_41:}
收藏,留下以后学习,
作者: svip    时间: 2016-5-29 21:20
标题: 真漂亮
真漂亮




欢迎光临 aardio官方社区 (http://bbs.aardio.com/) Powered by Discuz! X3.4