yu_fei_527 发表于 2012-11-15 22:35:42

litestep中音量控制的制作

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

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

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

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
*voldownDockedTovolup
voldownPaintingMode".image"
voldownimage   voldown.png
voldownHoverimage   voldownhover.png
voldownonleftclickDown               !tVolEzyDown 3
xTrayOnResize !ParseEvars !LabelMove voldown %#-xTrayCurrentwidth-40%# %#voldowny%#


       托盘与任务栏中间的两个小黑箭头就是音量调节按钮,只能通过点击来起作用。
3.这个模块也可以做快捷键来控制音量,在hotkey.rc中加代码即可:
*Hotkey Ctrl RIGHT       !tVolEzyUp 1
*Hotkey CtrlLEFT       !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      ""       定义一个变量,值为当前音量
CurrentMute      ""   定义一个值,判断是否静音

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

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

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




阿卜牧 发表于 2012-11-15 22:48:00

yu_fei_527 辛苦辛苦,这个话题还是很有讨论点的。其他同学有新想法,请楼下继续

小飛飛 发表于 2012-11-15 22:54:25

真是难得给力的帖子啊。    (万恶的代码){:10_436:}

抽烟点寂寞 发表于 2012-11-15 23:16:52

很好的教程!{:10_443:}

Eric、 发表于 2012-11-15 23:46:42

恩 有时间细细看看感谢分享

ROVER95 发表于 2012-11-16 00:05:39

真是难得给力的帖子啊。

被爱,不曾 发表于 2012-11-16 00:31:32

强烈支持楼主ing……

爱羽左翼 发表于 2012-11-16 08:26:28

技术贴啊,拿来学习下

green015 发表于 2012-11-16 08:36:39

高手真的是很多 很牛 学习了{:10_452:}

Magee八戒 发表于 2012-11-20 13:49:22

{:10_410:}留个脚印~过会回来看
页: [1] 2 3
查看完整版本: litestep中音量控制的制作