搜索
楼主: 搞起

[源码分享] 豆瓣FM第三方客户端 - 14年11月02日更新 - gdip画动态频谱

    [复制链接]

0

主题

3

帖子

29

积分

新手入门

Rank: 1

积分
29
发表于 2013-10-22 14:59:25 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62303&ptid=10977][c

xiaofeng 发表于 2013-10-22 11:36
检查更新   的bat  文件中       'start \"doubanFM\" \"'++ exeFile ++'\"\n'     这句怎么解释呢    开启 ...

start   后面跟的是进程描述和进程名 。。。。。。。。
回复

使用道具 举报

0

主题

3

帖子

26

积分

新手入门

Rank: 1

积分
26
发表于 2013-10-22 16:00:55 | 显示全部楼层

饱读。感放分享。

饱读。感放分享。
回复

使用道具 举报

0

主题

3

帖子

29

积分

新手入门

Rank: 1

积分
29
发表于 2013-10-22 17:03:40 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62307&ptid=10977][c

xiaofeng 发表于 2013-10-22 14:59
start   后面跟的是进程描述和进程名 。。。。。。。。

bat.write('del %0\n');   我让他这样删掉自己
回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-10-22 22:07:15 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62303&ptid=10977][c

xiaofeng 发表于 2013-10-22 11:36
检查更新   的bat  文件中       'start \"doubanFM\" \"'++ exeFile ++'\"\n'     这句怎么解释呢    开启 ...

回楼上,bat中路径中有空格时,需要加上引号。
在start语句中,如果有引号,就需要在路径名、文件名前面加上描述。即
start d:\不带空格\不带空格.exe

start "随便写" "d:\文件夹名 空格 路径\文件名.exe"

另外,目前有个bug,就是你说的反复提醒更新。需要自行“以管理员身份运行”即可。
原因是,写的bat文件中有taskkill,用于强制结束豆瓣FM进程本身,该语句需要“管理员身份”方可执行,目前还木有想到好的解决方案~
回复

使用道具 举报

1

主题

8

帖子

50

积分

一级会员

Rank: 2

积分
50
发表于 2013-11-6 15:37:21 | 显示全部楼层

{:3_42:} 高手啊,我是新手学习学习.先模仿下.

  高手啊,我是新手学习学习.先模仿下.
回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-11-6 18:23:47 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=62715&ptid=10977][c

badu 发表于 2013-11-6 15:37
高手啊,我是新手学习学习.先模仿下.

现在分享出去的源码有很多bug,还是建议不要使用了。最新的源码我还没更新到帖子里,如果你需要可以给你。
回复

使用道具 举报

9

主题

96

帖子

629

积分

三级会员

叫我何细尔

Rank: 4

积分
629
QQ
发表于 2013-11-6 20:54:15 | 显示全部楼层

确实是神做。楼主的设计,思路都相当强!佩服

确实是神做。楼主的设计,思路都相当强!佩服
回复

使用道具 举报

0

主题

2

帖子

12

积分

新手入门

Rank: 1

积分
12
发表于 2013-11-21 10:43:57 | 显示全部楼层

我下载了 11月14日版源码 发现在win xp 运行失败 所以将wubin.aero 中的代码改为 [code][lang=aardio,fals

我下载了   11月14日版源码
发现在win xp 运行失败
所以将wubin.aero
中的代码改为
  1. //                DwmEnableBlurBehindWindow(..mainForm.hwnd,bb);
  2. //                DwmEnableBlurBehindWindow(..popupForm.hwnd,bb_popup);
  3. //                DwmEnableBlurBehindWindow(..fontsForm.hwnd,bb_fonts);
  4. //                DwmEnableBlurBehindWindow(..loginForm.hwnd,bb_login);

  5.                 try{
  6.                         DwmEnableBlurBehindWindow(..mainForm.hwnd,bb);
  7.                         DwmEnableBlurBehindWindow(..popupForm.hwnd,bb_popup);
  8.                         DwmEnableBlurBehindWindow(..fontsForm.hwnd,bb_fonts);
  9.                         DwmEnableBlurBehindWindow(..loginForm.hwnd,bb_login);
  10.                 }
  11.                 catch(e){
  12.                 }
复制代码

评分

参与人数 1银币 +30 收起 理由
搞起 + 30 感谢反馈!

查看全部评分

回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-11-21 12:06:24 | 显示全部楼层

[i=s] 本帖最后由 搞起 于 2013-11-21 15:53 编辑 [/i] [quote][size=2][url=forum.php?mod=red

本帖最后由 搞起 于 2013-11-21 15:53 编辑
tk86935367 发表于 2013-11-21 10:43
我下载了   11月14日版源码
发现在win xp 运行失败
所以将wubin.aero


感谢反馈bug!我已更新源码,重新上传压缩包!

其实我在函数里是加入判断的,如果找不到Dwmapi.dll则不执行后面的代码。
但我原来不知道,catch(e){}里面写return不能退出函数,没有返回值。
回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2013-11-21 13:35:00 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=63186&ptid=10977][c

搞起 发表于 2013-11-21 12:06
感谢反馈bug!我已更新源码,重新上传压缩包!

其实我在函数里是加入判断的,如果找不到Dwmapi.dll则 ...

catch 里的 return 并不是无效的,而是用来退出错误处理,而不是用来返回值。
这里有详细的说明:http://bbs.aardio.com/forum.php?mod=viewthread&tid=8056
当然语法规则不可能总是尽如人意的、注意看一下上面的文章,代码写完以后做一下常规的测试,至少aardio最基本的几个控制语句弄清楚。

HTMLayout本就支持半透明的背景,这里其实没多大必要使用 Dwmapi.dll 。
回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-11-21 15:56:48 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=63187&ptid=10977][c

编程 发表于 2013-11-21 13:35
catch 里的 return 并不是无效的,而是用来退出错误处理,而不是用来返回值。
这里有详细的说明:http:/ ...

谢谢版主提醒!

我之前确实没注意过那篇文章

aardio中try catch语句中的return只会退出try catch自身。
需要使用一个额外的错误标记来控制外部函数是否退出。


也大意疏忽了,没发现问题。

另外使用dwmapi.dll主要是想在win7中实现aero效果。
回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2013-11-21 16:29:59 | 显示全部楼层

简单浏览了一下你的代码,可能是你接触aardio时间不长的原因,代码存在的问题还是很多的。 首先两千行代码全部堆在 main.aau 里,这完全可以分离到

简单浏览了一下你的代码,可能是你接触aardio时间不长的原因,代码存在的问题还是很多的。

首先两千行代码全部堆在 main.aardio 里,这完全可以分离到多个用户库模块化组织代码, 你这样搅到一起,后面的维护会很困难,代码逻辑会越来越乱。

另外在同一个文件中你也没有组织代码,例如变量的定义有一个聚合性原则,你在第一百多行定义了 enableDWM,而直到800多行才第一次使用这个变量, 相关性的代码、变量中间的跨度越大,代码的逻辑就会越混乱,一开始你可能觉得没什么,时间一长就会成为严重问题了。

另外注意到你用了大量的 try catch 这样过度的容错是不太好的,
有错误应当在开发时尽可能排除,改为条件语句, 而且 try catch 的用法也可以简明一些,在  try 块里面,代码正确就可以一直向后执行,你如你在catch里设 enableDWM = false 可以改为在  try 的最后设为 true, 先看一下你原来的代码:


  1. // 准备开启Aero玻璃效果
  2. try{
  3.         var dwmapi = raw.loadDll("Dwmapi.dll");
  4.         DwmEnableBlurBehindWindow = dwmapi.api("DwmEnableBlurBehindWindow", "INT(int hWnd,struct pMarInset)");
  5. }
  6. catch(e) {
  7.         enableDWM = false;
  8.         enableAero = false;
  9.         //css("#doAero","display","none");
  10. }
  11. try {
  12.         if(enableDWM) CreateRectRgn = ::Gdi32.api("CreateRectRgn","int(int X1,int Y1,int X2,int Y2)");
  13. }
  14. catch(e) {
  15.         enableDWM = false;
  16.         enableAero = false;
  17.         //css("#doAero","display","none;");
  18. }
  19. if(enableDWM) {
  20.         DWM_BLURBEHIND = class {
  21.                 INT dwFlags;
  22.                 bool fEnable;
  23.                 int hRgnBlur;
  24.                 bool fTransitionOnMaximized;
  25.         }
  26. }
复制代码


其实完全可以写的简单一些:

  1. try {
  2.         ..dwmapi = raw.loadDll("Dwmapi.dll");
  3.         DwmEnableBlurBehindWindow = dwmapi.api("DwmEnableBlurBehindWindow", "INT(int hWnd,struct pMarInset)");
  4.         CreateRectRgn = ::Gdi32.api("CreateRectRgn","int(int X1,int Y1,int X2,int Y2)");
  5.         class DWM_BLURBEHIND {
  6.                 INT dwFlags;
  7.                 bool fEnable;
  8.                 int hRgnBlur;
  9.                 bool fTransitionOnMaximized;
  10.         }
  11.        
  12.         //实际上下面两句都是多余的,直接 if( DwmEnableBlurBehindWindow ) {} 就可以
  13.         enableDWM = true;
  14.         enableAero = true;
  15. }

复制代码



而你写的这段代码

  1. try {
  2.         wmp = com.CreateObject("WMPlayer.OCX");
  3. }
  4. catch(e){
  5.         win.msgboxTimeout('未安装Windows Media Player,\r\n请检查您的系统软件。',"豆瓣FM",3000);
  6.         return false;
  7. }
复制代码
可以调整一下修改为

  1. try { wmp = com.CreateObject("WMPlayer.OCX")  }
  2. if( !wmp ) {
  3.         win.msgboxTimeout('未安装Windows Media Player,\r\n请检查您的系统软件。',"豆瓣FM",3000);
  4.         return false;
  5. }
复制代码
实际上你这里的catch并没有起到作用。



回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2013-11-21 16:33:34 | 显示全部楼层

[quote]/* * 转换UTF-8编码为GB2312 */ function toGB2312(strUTF8) { var CP_UTF8

/*
* 转换UTF-8编码为GB2312
*/
function toGB2312(strUTF8) {
        var CP_UTF8 = 65001; //UTF-8 translation
        var CP_ACP = 0; //default to ANSI code page
        var strGB2312 = string.fromUnicode(string.toUnicode(strUTF8,CP_UTF8),CP_ACP);
        return strGB2312;
}

/*
* 转换GB2312编码为UTF8
*/
function toUTF8(strGB2312) {
        var CP_UTF8 = 65001; //UTF-8 translation
        var CP_ACP = 0; //default to ANSI code page
        var strUTF8 = string.fromUnicode(string.toUnicode(strGB2312,CP_ACP),CP_UTF8);
        return strUTF8;
}
至于这段代码,用 string.fromto() 函数可以替代,转换为UTF8可以这样写
strUtf8 = string.fromto(str,0,65001)

自UTF8还原可以这样写
str = string.fromto(strUtf8,65001,0)

回复

使用道具 举报

43

主题

679

帖子

3805

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3805
发表于 2013-11-21 16:38:19 | 显示全部楼层

[align=left][font=新宋体][quote][color=#0000ff]if[/color][color=#000000]( string.fi

if( string.find(exeFile,"aardioQ~") )
    mainForm.msgbox(
"只有在aardio中发布为exe后才可以替换旧版本","豆瓣FM");
这里查找用了一个不确定的短文件名,可能存在兼容性问题,应更换为
if( _STUDIO_INVOKED ){
    mainForm.msgbox(
"只有在aardio中发布为exe后才可以替换旧版本","豆瓣FM");
}
else {
   
//自动更新
}
在开发环境中,_STUDIO_INVOKED 的值为真,通过这个就可以判断了。



评分

参与人数 1银币 +5 收起 理由
tk86935367 + 5 很给力!

查看全部评分

回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-11-22 02:54:13 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=63197&ptid=10977][c

编程 发表于 2013-11-21 16:38
这里查找用了一个不确定的短文件名,可能存在兼容性问题,应更换为
在开发环境中,_STUDIO_INVOKED 的值为 ...

谢谢版主那么耐心的指导!

我将main.aardio中的部分内容分离出来到用户库组织代码,工作量也很大,这就是一开始没有养成好习惯造成的,就像你说的,一开始没觉得有什么,以后就会问题很严重。而且,以前用了很多全局变量,现在尽量使用局部变量。

还有很多处,try catch,之前很多条件判断我都是在catch里实现的。

再次感谢版主,我确实是新手,还有很多要学习啊,要先改掉不良习惯~
回复

使用道具 举报

3

主题

26

帖子

234

积分

荣誉会员

Rank: 8Rank: 8

积分
234
 楼主| 发表于 2013-11-23 11:31:04 | 显示全部楼层

[i=s] 本帖最后由 搞起 于 2013-11-23 11:34 编辑 [/i] 豆瓣FM第三方客户端 11月23日 更新 ver 0.9.3 bui

本帖最后由 搞起 于 2013-11-23 11:34 编辑

豆瓣FM第三方客户端 11月23日 更新

ver 0.9.3 build 20131123

(原帖无法编辑了)

11月23日更新
源码更新:
-- 修复windows xp下无法运行报错的bug
-- 使用用户库 结构化代码 (感谢“编程”,“Jacen”哥)
-- 将try catch替换为条件判断,移除绝大所述try(感谢“编程”)
-- 减少全局变量,尽量使用局部变量
-- 丢弃.ini 改用SQLite保存用户设置,原.ini中的内容会自动导入数据库中,并删除.ini
-- 修复一些bug

功能更新:
-- 增加“我的收听历史” - HTMLayout Grid控件
-- 获取歌曲后,重新乱序排列,防止每次收听红心兆赫时都是从那几首歌开始。
-- 运行速度上或许会有一点点提升

新增截图:
grid.jpg

11月23日源码下载地址:
http://wubin.in/app/doubanFM.11-23.7z

另外还想麻烦版主,能否帮我更新下原帖,将错误的源码附件、链接删除,谢谢!

点评

抱歉、请重试一下应当可以编辑了,  发表于 2013-11-23 23:30
回复

使用道具 举报

0

主题

29

帖子

274

积分

二级会员

Rank: 3Rank: 3

积分
274
发表于 2013-11-23 12:13:11 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=63243&ptid=10977][c

搞起 发表于 2013-11-23 11:31
豆瓣FM第三方客户端 11月23日 更新

ver 0.9.3 build 20131123

真心不错,多谢分享
回复

使用道具 举报

9

主题

28

帖子

282

积分

二级会员

Rank: 3Rank: 3

积分
282
发表于 2013-11-25 18:40:53 | 显示全部楼层

很漂亮,超赞

很漂亮,超赞
快乐分享 分享快乐
回复

使用道具 举报

3

主题

13

帖子

85

积分

一级会员

Rank: 2

积分
85
发表于 2013-11-25 19:38:06 | 显示全部楼层

非常好的学习案例!赞啊

非常好的学习案例!赞啊
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-2-20 00:00 , Processed in 0.078125 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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