- UID
- 3849
- 主题
- 注册时间
- 2010-6-28
- 在线时间
- 小时
- 最后登录
- 1970-1-1
签到天数: 268 天 [LV.8]以坛为家I
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?点击注册
x
不小心又把SM君以前的视频教程看了一遍,真的感觉很有爱,于是想写点东西,这些东西在模块和litestep的readme里都一带而过,很多东西我也是摸索和揣测,可能会有错误。
对有点计算机语言基础的人应该有点用,即使没接触过计算机语言也没关系,因为真的很简单,我也尽量用通俗的语言去解释,一看就懂。
litestep的编写(不包括Lslua),算不得一种语言,充其量是别人编写好dll后留出公共接口给我们的应用,我们只要了解和阅读那些白话化的命令就好了,但它实际上与c又有着千丝万缕的联系,书写时尽量遵循c的风格和规范,如果要写稍微复杂些的主题,一些基本的东西应该要了解,比如算术运算,逻辑运算,关系运算,转义符的使用,和简单的HTML语言。我们这里稍微说一下IF的使用,Litestep里(不包括Lslua)好像也只有IF 这个条件语句了,switch,while,for语句应该没有,一般人做主题也范不着太复杂,做复杂的都直接用lua了。
Litestep里的IF语句有4种格式,IF---Endif ,IF---Else---Endif,IF---Elseif---Endif,IF---Elseif---Elseif--.......Endif.和c不同,这里的IF和ENDif一定是配对出现的,可以嵌套,可以用goto,但是不建议用,goto是把双轫剑,用得不好容易破坏结构。
IF里的条件表达式可以用关系运算符,比如c里是&&和||,litestep里是and和or。
-==================================================
if globalTime = true
ClockText "<FontSize=30>[time('ii:nn')]</Font> <FontSize=17>[date('dd.mm.yy')]</Font>"
elseif globalTime = false
ClockText "<FontSize=30>[time('hh:nn')]</Font> [date('dd.mm.yy')]"
endif
这里定义了一个时间标签,clock是个显示时间的label(button),litestep里标签和按钮并没有明显的界限,我认为可以做点击动作的就是button,只显示信息不定义动作的就是label。globalTime是个自定义好的变量(严格来说是常量,类似于c的#define),它自定义了true和false两种值,注意这里的值是ASCII值,即使定义为数字它也是ASCII值,不好做算术运算的。<FontSize=30> </Font>这样的是不是眼熟?label的text显示是可以直接用HTML语言和转义符的,也就是说只要是文本,颜色,大小,字体,回车换行,空格,可以在一行里就能很简单的定义了。
litestep对自定义变量很宽松,c里面要求对变量要先定义后使用,LS里好像没有这种问题,因为在这段代码后面再去定义globalTime,加载和使用的时候也是没问题的。但最好还是遵循c的语法规范来使用。
整段话的意思是:如果globalTime值为true,那么clock这个按钮就以30的字体大小显示时间,17的字体大小显示日期。如果globalTime值为false,那么clock这个按钮就以30的字体大小显示时间,clockfonthight定义的字体大小显示日期。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
这里还有一个涉及IF的简单说明用法:传送门
-================================================
再举个完整些的例子吧。之前做了个litestep主题 ,名叫定格。。传送门
它的桌面壁纸变换,各部件伸缩,各部件素材的变换,都用到了IF。这里只截取其中小段以做说明,语句前有分号的语句是无效的。
if styleon=0
xTaskbarImage taskbarBackground1.png
elseif styleon=1
xTaskbarImage taskbarBackground.png
endif
if styleon=0
;ControlOnleftClickup !blue
ControlOnleftClickup !execute [!xTextSaveEvar @$ConfigDir$themevars.rc@ @styleon@ @1@][!WallPaper .center "$WallpaperDir$asd121.jpg"][!wallpaper .change][!refresh]
*WallPaper .center "$WallpaperDir$1456.jpg"
elseif styleon=1
;ControlOnleftClickup !black
ControlOnleftClickup !execute [!xTextSaveEvar @$ConfigDir$themevars.rc@ @styleon@ @0@][!WallPaper .center "$WallpaperDir$1456.jpg"][!wallpaper .change][!refresh]
*WallPaper .center "$WallpaperDir$asd121.jpg"
endif
整段的意思是:如果styleon这个自定义的变量值当前为0,左键点击control这个label时,就把styleon的值置为1,壁纸换为asd121.jpg,任务栏的背景图换为taskbarBackground.png。
如果styleon这个自定义的变量值当前为1,左键点击control这个label时,就把styleon的值置为0,壁纸换为1456.jpg,任务栏的背景图换为taskbarBackground1.png。
当然任务栏的背景图变换不用IF也可以,我们可以用它自己的bang命令,!xTaskbarrefresh xTaskbar xTaskbarimage "$ThemeDir$th\images\taskbarBackground1.png"把这一句写到点击control这个label的动作里就可以了。
这段代码里至少用到了4个模块,xtaskbar,xtextedit,xlabel,lswchanger,具体的命令要去了解这些模块的readme 了,这是玩LS的基础。
=-----------------------------------------------------
总之,如果只需要做个漂亮的界面的话,比如各模块的搭配,堆叠,调整,是非常简单的,不需要任何基础;但是要做复杂的效果甚至人机交互的图形界面,还是需要些计算机知识的。另外在阅读LS和各模块的readme时,多看多想。
再举个简单的例子吧,比如group,我给它的定义是相同属性和行为的集合。
xxxWidth 295
xxxHeight 83
xxxWindowzOrder
xxxBehindWindow xLabel runDialogBox
xxxAlwaysOnTop
xxxStartHidden
label1addtogroup xxx
label2addtogroup xxx
label3addtogroup xxx
label4addtogroup xxx
这段的意思:前面一小段定义了xxx这个group的一些属性,是不是有些像c的struct或c++的class的意味?那么后一小段的label1,label2,label3,label4只用一行代码就有了xxx的这些属性,是不是有些继承的意味?而在之后要写的代码里,label1,label2,label3,label4也可以写出它们自己的行为和属性,是不是有了些派生的意味?
readme里提供的命令都是死的,我们玩的时候一定要灵活运用,也就是通常所说的算法。比如传送门,为了实现拖控时音量的调整的多少,就将handle这个label的X位置移动多少与音量挂钩。
|
评分
-
参与人数 2 | 心动值 +2 |
活跃值 +10 |
技术值 +2 |
收起
理由
|
语笑嫣然
| + 1 |
|
+ 1 |
(-`ω′-) |
萝莉头
| + 1 |
+ 10 |
+ 1 |
加分不解释 |
查看全部评分
|