搜索
查看: 7074|回复: 25

[其他] 桌面虎鲸修改版,趋于自然游动

  [复制链接]

75

主题

850

帖子

4996

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
4996
发表于 2012-11-2 11:52:58 | 显示全部楼层 |阅读模式
本帖最后由 look 于 2012-11-2 13:32 编辑

桌面虎鲸
Author: hai321
HTMLayout做了个桌面宠物---虎鲸
http://bbs.aardio.com/thread-8485-1-1.html


/**
桌面虎鲸
Author: hai321
参考资料:
[源码分享] HTMLayout 使用APNG制作桌面透明动画窗口
http://bbs.aardio.com/thread-7922-1-1.html
**/


import win.ui;
import winex;
/*DSG{{*/
winform = ..win.form( right=297;bottom=170;topmost=1;text=
"虎鲸";border="none";parent=...;exmode="toolwindow";mode="popup";cls="hujing" )
winform.add(  )
/*}}*/

//启用分层窗口
winform.modifyStyleEx(,0x80000/*_WS_EX_LAYERED*/)
import web.layout;
wbLayout = web.layout(winform);

math.randomize()

wbLayout.html =
/***
<div id="myTab"><img src="/res/daddy-left.png"/></div>
<menu.context id="menuId">
  <li>桌面图标
     <menu>
        <li id="i1">隐藏图标</li>
        <li id="i2">显示图标</li>
     </menu>  
  </li>
  <li>选择鲸鱼
     <menu>
     <li id="i5">鲸鱼爸爸</li>
     <li id="i6">鲸鱼妈妈</li>
     <li id="i6">鲸鱼宝宝</li>
     </menu>  
  </li>
   <li id="i7">关于虎鲸</li>
   <li id="i8">退出</li>
</menu>  
***/



wbLayout.css =
/**
html {   
    background-color:transparent; /*网页背景透明*/
    context-menu:selector(menu#menuId);
}
menu{
    width: max-intrinsic; /*内容的最大宽度,可以超出屏幕*/      
    background: url(/res/menu-back-office.png) expand;
    background-position: 0 0 0 24;
    text-align:left;
}
**/


//修改节点代码
var changeBaby=function(){
   
if( thread.get("我是") = "爸爸"){
        
var myTab = wbLayout.getEle("myTab")//获取节点
        if(myTab){
            
if(向左游动 = false){
                myTab.child(1).innerHTML =
'<img src="/res/daddy-right.png" />'
            }
else {
                myTab.child(1).innerHTML =
'<img src="/res/daddy-left.png" />'
            }   
        }
    }   
   
elseif( thread.get("我是") = "妈妈"){
        
var myTab = wbLayout.getEle("myTab")//获取节点
        if(myTab){
            
if(向左游动 = false){
                myTab.child(1).innerHTML =
'<img src="/res/mummy-right.png" />'
            }
else {
                myTab.child(1).innerHTML =
'<img src="/res/mummy-left.png" />'
            }   
        }
    }
   
elseif( thread.get("我是") = "宝宝"){
        
var myTab = wbLayout.getEle("myTab")//获取节点
        if(myTab){
            
if(向左游动 = false){
                myTab.child(1).innerHTML =
'<img src="/res/son-right.png" />'
            }
else {
                myTab.child(1).innerHTML =
'<img src="/res/son-left.png" />'
            }   
        }
    }
    是否游动 =
true;
    winform.settimer(tmid,15);
//修改定时器
}

wbLayout.documentElement.attachEventHandler(
   
//鼠标按下拖动触发下面的函数
    onMouseMove = function (ltTarget,ltEle,x,y,ltMouseParams) {
        
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
            是否游动 =
false;  
            winform.settimer(tmid,5000)
            
var wx,wy = winform.getPos();
            wx = wx + (x - winform.downPos.x)
            wy = wy + (y - winform.downPos.y)
            ltTarget.getForm().setPos( wx,wy)
            
return true;
        }  
    }     
   
//鼠标按下触发下面的函数
    onMouseDown = function (ltTarget,ltEle,x,y,ltMouseParams) {
        
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
            是否游动 =
false        
            winform.settimer(tmid,1000000)  
//定时器暂停3秒等待退出等命令
            winform.capture = true;
            winform.downPos = { x = x ;y = y}        
        }
        
elseif(ltMouseParams.button_state==2){
            是否游动 =
false            
            winform.settimer(tmid,1000000)  
//定时器暂停3秒等待退出等命令
            winform.capture = true;
            winform.downPos = { x = x ;y = y}           
        }           
    }
   
//鼠标弹起触发下面的函数
    onMouseUp = function (ltTarget,ltEle,x,y,ltMouseParams) {        
        
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
            winform.settimer(tmid,15);
//修改定时器
             是否游动 = true;            
        }
    }
)

//桌面句柄
var hDskManager,hShellView = winex.findExists("Program Manager",,"Progman","SHELLDLL\_DefView")

//右键菜单触发下面的函数
wbLayout.onMenuItemClick = function (ltTarget,ltEle,reason,behaviorParams) {
    是否游动 =
false;   
   
if( ltTarget.innerText == "退出" ){
        
if(hShellView){
            win.show(hShellView,
true);//退出前显示桌面图标  
        }      
        winform.close();
   }
   
elseif(ltTarget.innerText == "隐藏图标"){
        
if(hShellView){
            win.show(hShellView,
false);//隐藏桌面图标
        }
        winform.settimer(tmid,15);
//修改定时器
        是否游动 = true;
   }
   
elseif(ltTarget.innerText == "显示图标"){
        
if(hShellView){
            win.show(hShellView,
true);//显示桌面图标
        }
        winform.settimer(tmid,15);
//修改定时器
        是否游动 = true;
   }  
   
elseif( ltTarget.innerText == "鲸鱼爸爸" ){
        thread.set(
"我是","爸爸" )
        changeBaby();
//修改代码         
   }
   
elseif( ltTarget.innerText == "鲸鱼妈妈" ){
        thread.set(
"我是","妈妈" )
        changeBaby();
//修改代码         
   }
   
elseif( ltTarget.innerText == "鲸鱼宝宝" ){
        thread.set(
"我是","宝宝" )
        changeBaby();
//修改代码
   }
   
elseif( ltTarget.innerText == "关于虎鲸" ){
        
import process
        process.
execute("http://baike.baidu.com/view/9005.htm")
        winform.settimer(tmid,15);
//修改定时器
        是否游动 = true;
   }   
}

//默认设置
var 横位置,纵位置 = win.getScreen();//取系统分辨率
winform.setPos(横位置-200,200)//起始位置
winform.show()

var directionTab={"向上";"向下";"水平"}
var direction=directionTab[3];
var stepY={
    [
"向上"]=-1;
    [
"水平"]=0;
    [
"向下"]=1;
}
var count = 0;

thread.set(
"我是","爸爸" )
向左游动 =
true; //向左移动
是否游动 = true; //开始时游动

//随机向上向下平行游动
randMove=function(tmid,step){
   
   
var formX,formY=winform.getPos();
   
var max=math.random(100, 300)
                                             
   
if(count > max and formY < 纵位置 and formY > 0 ){//在屏幕内游动200次后,随机改变方向
        if(direction=="水平"){
            direction=directionTab[math.random(1, 3)]
        }
else {
            direction=directionTab[3]
        }
        count = 0;
    }
   
elseif(formY > 纵位置){//游动超出屏幕下方时改为向上游动
        direction=directionTab[1]
        count = 0;
    }
   
elseif(formY < -20){//游动超出屏幕上方时改为向下游动
        direction=directionTab[2]
        count = 0;
    }
   
    count++;
    winform.setPos(formX+step,formY+stepY[direction])
   
   
if(count < 30){
        
var speedTm=math.random(30, 40)
        winform.settimer(tmid,speedTm)
        
return ;
    }
   
elseif(max-count<50){
        
var speedTm=math.random(30, 40)
        winform.settimer(tmid,speedTm)
        
return ;
    }
                     
   
if(direction=="水平"){//直线游动时减慢速度
        var speedTm=math.random(20, 30)
        winform.settimer(tmid,speedTm)                     
    }
   
else{//加快速度
        var speedTm=math.random(10, 20)
        winform.settimer(tmid,speedTm)
    }
                        
}

//向左移动
left=function(){
   
var formX,formY=winform.getPos();      
   
if(formX > -240){//未超出屏幕左边时,随机游动
        var step=-1
        randMove(tmid,step)
//随机游动
    }               
   
else {         
        向左游动 =
false;;//调用向右移动;
        changeBaby();//修改代码
    }   
}

//向右移动
right=function(){
   
var formX,formY=winform.getPos();               
   
if(formX < 横位置){//未超出屏幕右边时,随机游动
        var step=1
        randMove(tmid,step);
//随机游动
    }
   
else {      
        向左游动 =
true; ;//向左移动                    
        changeBaby();//修改代码
    }
}

//定时器控制游动
tmid = winform.addtimer(
    15
/*毫秒*/,
   
function(hwnd,msg,id,tick){     
        
if(是否游动 = true and hwnd){  
            
if(向左游动 = true){
                left()
            }
            
else {
                right()
            }  
        }
    }
);
winform.onClose =
function(hwnd,message,wParam,lParam){
    winform.killtimer(tmid)
}
win.loopMessage();




虎鲸.zip (1.53 MB, 下载次数: 1454)
小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

48

主题

593

帖子

3335

积分

五级会员

Rank: 8Rank: 8

积分
3335
发表于 2012-11-2 12:29:31 | 显示全部楼层

谢谢,用你这个发布一下试试。

谢谢,用你这个发布一下试试。
回复

使用道具 举报

1

主题

25

帖子

418

积分

二级会员

Rank: 3Rank: 3

积分
418
发表于 2012-11-2 12:33:42 | 显示全部楼层

刚刚下载试运行一下,好有趣,好强大啊。

刚刚下载试运行一下,好有趣,好强大啊。
回复

使用道具 举报

48

主题

593

帖子

3335

积分

五级会员

Rank: 8Rank: 8

积分
3335
发表于 2012-11-2 13:06:41 | 显示全部楼层

发布后的鲸鱼退出时会提示 [attach]2622[/attach]win7 32位系统

发布后的鲸鱼退出时会提示 11.jpg win7 32位系统
回复

使用道具 举报

75

主题

850

帖子

4996

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
4996
 楼主| 发表于 2012-11-2 13:33:22 | 显示全部楼层

[quote][size=2][color=#999999]jyb21 发表于 2012-11-2 13:06[/color] [url=forum.php?m

jyb21 发表于 2012-11-2 13:06
发布后的鲸鱼退出时会提示 win7 32位系统

修正了下!关闭杀毒软件,再发布试试!
小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

12

主题

677

帖子

3959

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
3959
发表于 2012-11-2 13:42:09 | 显示全部楼层

[color=Blue]elseif[/color] 换 [color=Blue]select [/color]语句 代码会更清晰点 {:P}

elseifselect 语句 代码会更清晰点
回复

使用道具 举报

7

主题

305

帖子

1912

积分

四级会员

Rank: 6Rank: 6

积分
1912
QQ
发表于 2012-11-2 16:37:53 | 显示全部楼层

哈哈,越来越精彩了!

哈哈,越来越精彩了!
每天进步一点点......
回复

使用道具 举报

12

主题

677

帖子

3959

积分

荣誉会员

子非魚、安知魚之樂

Rank: 8Rank: 8

积分
3959
发表于 2012-11-2 18:55:30 | 显示全部楼层

[align=left][font=YaHei Consolas Hybrid][color=#008000]//修改节点代码[/color][color=#0

//修改节点代码
var modifyNode = function(){
   
var member = thread.get("我是");
   
var family = {爸爸="daddy";妈妈="mummy";宝宝="son"}
   
var myTab = wbLayout.getEle("myTab")//获取节点
    if(myTab){
        
if(向左游动 = false){
            myTab.child(1).innerHTML =
'<img src="/res/'+family[member]+'-right.png" />'
        }
else {
            myTab.child(1).innerHTML =
'<img src="/res/'+family[member]+'-left.png" />'
        }   
    }
    是否游动 =
true;
    winform.settimer(tmid,15);
//修改定时器
}



回复

使用道具 举报

5

主题

64

帖子

459

积分

二级会员

Rank: 3Rank: 3

积分
459
发表于 2012-11-2 19:21:36 | 显示全部楼层

桌面图标的隐藏与显示,没有效果呢?Win7 64系统

桌面图标的隐藏与显示,没有效果呢?Win7 64系统
回复

使用道具 举报

6

主题

132

帖子

1099

积分

四级会员

Rank: 6Rank: 6

积分
1099
发表于 2012-11-2 19:43:39 | 显示全部楼层

越来越强大了

越来越强大了
静步
回复

使用道具 举报

6

主题

37

帖子

339

积分

二级会员

Rank: 3Rank: 3

积分
339
发表于 2012-11-12 19:23:17 | 显示全部楼层

谢谢学习

谢谢学习
回复

使用道具 举报

5

主题

24

帖子

257

积分

二级会员

Rank: 3Rank: 3

积分
257
发表于 2012-11-13 09:50:47 | 显示全部楼层

{:3_59:}很强大。。。

很强大。。。
回复

使用道具 举报

0

主题

7

帖子

48

积分

新手入门

Rank: 1

积分
48
发表于 2012-11-14 10:25:04 | 显示全部楼层

太可爱了...学习学习

太可爱了...学习学习
回复

使用道具 举报

8

主题

19

帖子

144

积分

一级会员

Rank: 2

积分
144
发表于 2012-11-23 22:16:28 来自手机 | 显示全部楼层

运行之后,占用内存会慢慢增加,是哪儿资源没释放?

运行之后,占用内存会慢慢增加,是哪儿资源没释放?

点评

少许的内存浮动应当是正常的,一个大点的网页都要上百兆内存何况是桌面透明的动画,而且内存是自动管理的并不是用完了马上释放,我试了一下关闭桌面宠物内存马上还原了,说明释放内存是正常的。  发表于 2012-11-23 23:34
回复

使用道具 举报

0

主题

42

帖子

363

积分

二级会员

Rank: 3Rank: 3

积分
363
发表于 2012-11-25 10:33:03 | 显示全部楼层

好玩,我也下{:3_48:}来玩玩

好玩,我也下来玩玩
回复

使用道具 举报

23

主题

411

帖子

2240

积分

五级会员

Rank: 8Rank: 8

积分
2240
发表于 2012-11-25 10:59:00 | 显示全部楼层

不错的运用,加油修改可以做成更好玩的桌面运用。

不错的运用,加油修改可以做成更好玩的桌面运用。
回复

使用道具 举报

0

主题

2

帖子

11

积分

新手入门

Rank: 1

积分
11
发表于 2012-11-27 01:54:59 | 显示全部楼层

虎鲸好可爱啊。。 之前试过,一家人真是超有爱的说。。。。。。。。

虎鲸好可爱啊。。

之前试过,一家人真是超有爱的说。。。。。。。。
回复

使用道具 举报

1

主题

12

帖子

73

积分

一级会员

Rank: 2

积分
73
发表于 2012-11-27 18:03:00 | 显示全部楼层

很好,有有意思

很好,有有意思
回复

使用道具 举报

6

主题

132

帖子

1099

积分

四级会员

Rank: 6Rank: 6

积分
1099
发表于 2013-1-14 16:22:07 | 显示全部楼层

[quote][size=2][color=#999999]MMiao79 发表于 2012-11-2 19:21[/color] [url=forum.php

MMiao79 发表于 2012-11-2 19:21
桌面图标的隐藏与显示,没有效果呢?Win7 64系统

桌面句柄在WIN7下会 改变有时是 WorkerW--> SHELLDLL_DefView,

有时是 Progman --> SHELLDLL_DefView
静步
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-5-28 11:23 , Processed in 0.078125 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表