# litestep中音量控制的制作 - Litestep专区 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8083|回复: 23

[技术讨论] litestep中音量控制的制作

[复制链接]

签到天数: 268 天

[LV.8]以坛为家I

发表于 2012-11-15 22:35:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?点击注册

x
本帖最后由 yu_fei_527 于 2012-11-16 14:32 编辑

lssliderfoo.dll这个模块适合用来做音量滑块调整和winamp进度条,但是在win7中有时能用有时不能用,确实不大灵光,希望LS开发团队对这个dll能再次编译。

这个问题想了很久,又找到了另一个音量控制模块tVolEzy.dll,它不能做滑块,只能通过点击和快捷键来控制音量,但是通过代码和算法的编写与其它模块搭配也可以实现滑块来控制。因为并不是很完善,不推荐做实际应用,可以讨论一下看有没有人能更完善些。就不说得太细了,因为涉及到的东西太详细说并不利于叙述。下面说说这两种方法:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
一。做个按钮点击式的音控,这是非常简单的,加载模块后一句代码就搞定。这里效果不是重点,只讨论算法和思路。
        1. 加载tVolEzy.dll模块。
        在rc文件中添加这句*NetLoadModule  tVolEzy.dll
        2.*label volup
volupalphamap                             这是xlabel模块,做的一个名为volup的音量增大按钮,其它的属性描述代码不多说,关键代码
                                                     就那么一两句。

volupalwaysontop
;volupwindowzorder
;volupx    $ResolutionX-xTrayCurrentWidth$
volupx    $ResolutionX-300$
volupy    $xTaskbarY-38$
volupheight    16
volupwidth    16
*volupDockedTo  xTray                 音量增大按钮跟随托盘位置变动,这是在我的一个主题里这样做的,如果只是单纯做音量调整按钮,这句完全可以不要。

volupPaintingMode  ".image"
volupimage   volup.png
volupHoverimage   voluphover.png
   

voluponleftclickDown   !tVolEzyUp 3    关键的代码,点击这个按钮,音量增大3,默认值记得是为1(不知道记错没~)可以在bang命令后自己加个自定义数字, !tVolEzyUp这个bang命令来自于 tVolEzyUp模块的readme,可自行去翻阅。

xTrayOnResize !ParseEvars !LabelMove volup %#-xTrayCurrentwidth-40%# %#volupy%# 音量增大按钮跟随托盘位置变动,这是在我的一个主题里这样做的,如果只是单纯做音量调整按钮,这句完全可以不要。

-=================================================

*label voldown                        这是个音量减小按钮,不多说,同上。
voldownalphamap
voldownalwaysontop
voldownx    $ResolutionX-300$
voldowny    $xTaskbarY-18$
voldownheight    16
voldownwidth    16
*voldownDockedTo  volup
voldownPaintingMode  ".image"
voldownimage   voldown.png
voldownHoverimage   voldownhover.png
voldownonleftclickDown                 !tVolEzyDown 3
xTrayOnResize !ParseEvars !LabelMove voldown %#-xTrayCurrentwidth-40%# %#voldowny%#

2012-11-15_212839.png
       托盘与任务栏中间的两个小黑箭头就是音量调节按钮,只能通过点击来起作用。
3.
这个模块也可以做快捷键来控制音量,在hotkey.rc中加代码即可:
*Hotkey Ctrl RIGHT       !tVolEzyUp 1
*Hotkey Ctrl  LEFT       !tVolEzyDown 1
-===========================================================
二。做个滑块按钮,本来用lssliderfoo.dll做音量滑块调节是最有效的,可是在win7下不能用,我们就另想办法。下面这个举例就不列图了,脑海里有个水平滑块就可以了,虽然代码只有几行,但是真的很难做出来,因为涉及到xlabel高级代码的灵活运用。
      做这种东西已经类似于编程了,最好能思维缜密,事先画个流程图出来。不然凭空想的话,有点麻烦。这个滑块仍然用tVolEzy和xlabel来做,还另加一个lsbox模块。      
        *Label                    Slide                     
做个handle即把手,把柄,就是可以拖动的那个东西(脑海里想像一个水平滑块)
SlideX                    100
SlideY                    0
SlideWidth                5
SlideHeight                9
SlidePaintingMode            .singlecolor
SlideColors                ff0000
SlideMoveable                true                         这个handle可以拖 动
SlideMoveable                .horizontal               只能水平平移
SlideMoveButton                .left                        只能通过鼠标左键来平移
SlideMoveModifierKey            .none
SlideMoveArea                0 0 105 9
SlideNoMoveCursor            true
SlideFireOnMoveDuringMove        false
SlideOnRightClickUp        !none
SlideAlwaysOnTop            true
-====================-=========

*Label                    SlideBack                              做个框,handle只能在这个长方形的框里移动,handle在这个框里移动时,越往左音量越小,越往右音量越大。这一段还只是定义本身性状,功能上的定义在后面。
SlideBackPaintingMode            .singlecolor
SlideBackColors                eeeeee
SlideBackX                $ResolutionX-132$
SlideBackY                $ResolutionY-13$
SlideBackWidth                129
SlideBackHeight                10
SlideBackStartHidden            true
SlideBackOnRightClickUp        !none

;SlideBackOnFocusLost        !LabelHide SlideBack
SlideBackAlwaysOnTop            true
-===============================
*SlideBackModuleHook !LabelLSBoxHook Slide         将handle与  音量调节框挂靠在一起,这条代码是因为加载了lsbox.dll,把各音量控制元素加载到一个盒子中。代码用法见lsbox的readme。

CurrentVol        "[volume]"       定义一个变量,值为当前音量
CurrentMute        "[mute]"       定义一个值,判断是否静音

tVolEzyVolumeChangedCommand    "!SetEvar CurrentVol #VOLUME#" 滑块拖动导致音量改变后,将值赋给刚才定义的currentvol,这个值是个数字。前半段代码出自tVolEzy的readme,后半段出自xlabel的
Text Escape  Sequences 和 ParseEvars高级用法。

tVolEzyMuteChangedCommand    "!SetEvar CurrentMute #MUTE#" 道理同上。

SlideOnMove                !ParseEvars !execute [!tVolEzyDown %#%[ifeval(exportedevar('CurrentVol'),'>',exportedevar('SlideCurrentX'))]CurrentVol-SlideCurrentX[else]0[endif]%%#] [!tVolEzyUp %#%[ifeval(exportedevar('CurrentVol'),'<',exportedevar('SlideCurrentX'))]SlideCurrentX-CurrentVol[else]0[endif]%%#]    移动handle时如果当前音量大于音量调节框的x 位置值,就做音量减小动作,减小的幅度(值)是当前音量和handle当前x位置的差;如果当前音量小于音量调节框的x 位置值,就做音量增大动作,增大的幅度(值)是handle当前x位置与当前音量的差;如果两个值相等,就不作调节。这个地方有点难以理解,有兴趣 的可以作个图,实际上就是当前音量的值与handle在调节框里的x位置建立关联,以此来判断是要调大还是调小,要调多少。这些代码的学习同样要看xlabel的高级用法。

实际上这个音量滑块没有做完,因为没有精力去完善,而且也比较懒散,还有几个漏洞,一个是滑块当前位置的记忆,当LS刷新之后,handle会到最右,另一个是这个东西只能拖控,目前想不到办法实现点控,因为handle的座标如何跟随鼠标座标是个难点。就像阿卜牧说的,3RVX用起来更爽,做这个确实比较伤脑筋,所以在用LS时最好的办法还是用3RVX,或者等lssliderfoo.dll的完善。




评分

参与人数 1心动值 +1 活跃值 +10 收起 理由
阿卜牧 + 1 + 10 还是挺给力的,yu_fei_527 辛苦了。

查看全部评分

回复

使用道具 举报

签到天数: 339 天

[LV.8]以坛为家I

发表于 2012-11-15 22:48:00 | 显示全部楼层
yu_fei_527 辛苦辛苦,这个话题还是很有讨论点的。其他同学有新想法,请楼下继续
回复

使用道具 举报

签到天数: 68 天

[LV.6]常住居民II

发表于 2012-11-15 22:54:25 | 显示全部楼层
真是难得给力的帖子啊。    (万恶的代码)
回复

使用道具 举报

签到天数: 232 天

[LV.7]常住居民III

发表于 2012-11-15 23:16:52 | 显示全部楼层
很好的教程!
回复

使用道具 举报

签到天数: 428 天

[LV.9]以坛为家II

发表于 2012-11-15 23:46:42 | 显示全部楼层
恩 有时间细细看看  感谢分享
回复

使用道具 举报

签到天数: 68 天

[LV.6]常住居民II

发表于 2012-11-16 00:05:39 | 显示全部楼层
真是难得给力的帖子啊。
回复

使用道具 举报

签到天数: 146 天

[LV.7]常住居民III

发表于 2012-11-16 00:31:32 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

签到天数: 238 天

[LV.7]常住居民III

发表于 2012-11-16 08:26:28 | 显示全部楼层
技术贴啊,拿来学习下
回复

使用道具 举报

签到天数: 360 天

[LV.8]以坛为家I

发表于 2012-11-16 08:36:39 | 显示全部楼层
高手真的是很多 很牛 学习了
回复

使用道具 举报

签到天数: 78 天

[LV.6]常住居民II

发表于 2012-11-20 13:49:22 | 显示全部楼层
留个脚印~过会回来看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

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