会哭的梧桐树 发表于 2013-7-30 15:05:09

【官网文档翻译】基础教程-Basic Tutorials-

本帖最后由 会哭的梧桐树 于 2013-7-30 15:40 编辑

说明:
本文是对Rainmeter英文官网上,帮助文档的Basic Tutorials部分的翻译。由随心小哥翻译,感谢他。@suixin812

请尊重原文的版权,尽可能避免下载、转载与传播本文。

本文主要内容:详细讲解了三类皮肤的简单代码编写。

-Basic Tutorials-基本教程简述
这套教程从制作第一个简单的皮肤开始,深度解析了Rainmeter皮肤的原理和构造,并依此集中阐述了这些基本的皮肤要素: Meter皮肤的显示控件。用于构建能够被看到被击触的物体。

Measure皮肤的信息控件。用于从电脑或互联网上收集信息。

Bangs皮肤的交互元素。用于向Rainmeter或其他程序发送指令。

Update皮肤的频率时钟。用于控制皮肤计时与皮肤事件的同步。

Variable皮肤的数据元素。用于处理储存了各种信息的独立字符串。

这套教程还在不断编写中。


一、Launcher【注意:这auncher类似于dock。】

创建一个新皮肤
首先,请确定你已经在Creating Skins中阅读了如何制作一个简单的“HelloWorld”皮肤,并且已经学会了如何在Skins文件夹中创建.ini皮肤文件和如何刷新Rainmeter使其显示你新建的皮肤。那么让我们在Skins文件夹中再次新建一个文件夹,用来存放下面教程中所有制作的皮肤。我们要把它们放在一个根配置文件夹下,这样我们之后就可以研究如何在皮肤间共享设定和资源。
在Windows资源管理器中新建文件夹Tutorials。然后在这个文件夹中新建文件夹Launcher。在Tutorials\Launcher文件夹中新建空白文本文档。在Windows资源管理器中,你可以在文件夹右键,选择“新建→文本文档”来新建。将其重命名为Launcher.ini,确定扩展名为.ini而非.ini.txt。现在,单击任务栏系统通知区的RM图标来打开管理窗口。点击左下方的“刷新全部”按钮,这样你就可以在列表中看到你新建的Tutorials/Launcher配置。找打Launcher.ini,右键“编辑”。然后皮肤会用你默认的文本编辑器打开。不要在此时加载皮肤,没有任何代码的皮肤是无法加载的。
构建Launcher皮肤首先,就像之前“Hello World”皮肤一样,添加节点并控制皮肤刷新率。

Update=1000


然后,添加我们的第一个Meter。

Meter=StringX=5Y=5FontFace=Trebuchet MSFontSize=14FontColor=255,255,255,255StringStyle=BoldAntiAlias=1Text=NotepadSolidColor=0,0,0,1LeftMouseUpAction=["C:\Windows\System32\Notepad.exe"]


注意我们在添加一个Meter时首先要做的两件事:添加节点标签“[节点名]”和告诉Rainmeter这个Meter的类型。
Meter=String
这是一个String类Meter,最常用到的Meter类型之一。它被用于在屏幕上显示文字。像位置、大小、颜色和字体之类的文字格式可以通过通用Meter选项和String类Meter特有的选项来设置。让我们看一下我们在这里用到的选项。

•                X和Y:这两者控制了Meter相对于整个皮肤的位置。我们这里写的代码的意思是:Meter距离皮肤左边缘5像素,距离皮肤上边缘5像素。•                FontFace:文本的字体•                FontSize:文本的字号
•                FontColor:文字的颜色
•                StringStyle:控制文字的样式。这里我们用的是粗体样式。
•                AntiAlias:抗锯齿设置。对文字进行平滑处理,以提高显示质量。

然后我们定义我们想要显示的文字,将Text选项设置为“Text=Notepad”。String类Meter同样可以使用Measure值作为文本来显示,这点在之后的教程将详细讲述。我们最后添加的这两个选项是让这个Meter成为“Launcher(启动器)”而不是只在屏幕上显示文字的关键。•       SolidColor=0,0,0,1:这是一个小技巧。它通过在文字本后添加一个看不到的填充矩形,从而让文字更容易被点击。•       LeftMouseUpAction=["C:\Windows\System32\Notepad.exe"]•       这是一个鼠标动作(MouseAction),它定义了当Meter被鼠标单击时执行的操作。在这里,我们将启动位于C:\Windows\System32\中的程序Notepad.exe(记事本)。我们将在以后的教程中详细介绍更多的动作选项和Bang指令。让我们加载一下我们的皮肤看看效果。在管理窗口的列表中找到Launcher.ini,单击右上方的“加载”按钮。记得先保存。



你可以把皮肤拖拽到任何你喜欢的位置。Rainmeter将在皮肤下次加载时还原这个位置。你也可以右键单击皮肤改变它的皮肤选项。现在我们完成了我们第一个Meter和一个有功能的皮肤。在文字Notepad上单击,记事本程序就会启动。恭喜你!稍微休息一下。
•再添加新的Meter下面让我们再添加一个新的Meter来启动另一个程序。这个Meet而的格式和之前的Meter非常相似,但我们要用到一些新东西来让它的位置更精确。

Meter=StringX=0rY=2RFontFace=Trebuchet MSFontSize=14FontColor=255,255,255,255StringStyle=BoldSolidColor=0,0,0,1AntiAlias=1Text=PaintLeftMouseUpAction=["MSPaint.exe"]

这有一个非常重要的改变在Meter的X和Y选项上。记住X和Y设置了Meter相对于整个皮肤的位置。
在这里我们用到了相对位置来让X选项相对于上一个Meter左边缘0像素;(与X类似),Y选项相对于上一个Meter下边缘2像素。尽管我们也可以使用固定数值,但使用相对位置会使得我们在调整Meter布局时更加容易。


我们更具第二个程序设置了相应的Text和LeftMouseUpAction选项。现在让我们在管理窗口中右上方的刷新按钮来看一下我们的修改。在这里你同样也可以右键单击屏幕上的皮肤,选择刷新。新的Meter类型:Image类现在我们换个方向,介绍一种新的Meter类型。我们的下一个Meter将用来显示图片。单击后将启动一个程序Meter=ImageImageName=#@#Images\Calc.pngW=32H=32X=0rY=2RLeftMouseUpAction=["Calc.exe"]
我们新建一个节点,并设置Meter选项为“Meter=Image”。我们要在皮肤中包含图片文件,所以我们要先做下面的事情:

•       首先,我们需要创建一个文件夹来存放所有教程皮肤的图片。这个文件夹不仅用于现在的Launcher皮肤,更要在后面用到。

•       在Windows资源管理器中,在“Skins\Tutorials\”路径下新建文件夹“@Resources”。@Resources文件夹是一个位于皮肤或套装皮肤更配置下的特殊文件夹,用于存放图像、音频、字体、inc文件和其他在皮肤间共享的资源。

•       在“Skins\Tutorials\@Resources”文件夹中新建文件夹Images,将下面的图片保存到“Skins\Tutorials\@Resources\Images”中。



现在让我们回到皮肤代码中来。我们在ImageName选项用到了“#@#”来代表@Resources文件夹的路径,以及其子文件夹Images和图像文件calc.png。Meter将加载并显示这张图片。

然后我们觉得原始图像文件128x128像素的大小有些太大了。因此我们使用W和H(宽和高)选项将图片大小调整成32x32像素来显示。与String类Meter一样,Image类Meter的选项也可以分为通用Meter选项和专用于Image类Meter的选项。

就像在上面String类Meter做的那样,用相对位置和X、Y选项来将图片定位在之前Meter的下方。

ImageName=#@#Images\Calc.pngW=32H=32X=0rY=2R

然后,就像之前String类Meter那样,将LeftMouseUpAction选项设置成LeftMouseUpAction=["Calc.exe"]。这样当图片被单击时,Windows计算器就会被启动。



保存修改并刷新皮肤。单击图片来启动Windows计算器。

通过这样你就能够使用图片,但还是让我们在图片旁边增加一个文字标签。创建一个文本Meter,就像前面做的。

Meter=StringX=0RY=6rFontFace=Trebuchet MSFontSize=14FontColor=146,197,94,255StringStyle=BoldSolidColor=0,0,0,1AntiAlias=1Text=CalculatorLeftMouseUpAction=["Calc.exe"]

注意我们用了X和Y选项来对Meter进行定位,使其与上一个Meter(图片Meter)右边缘对齐,并且低于它的上边缘6像素。这样我们就差不多把Meter对齐在图片中部。

我们添加了与之前图片Meter一样的LeftMouseUpAction,这样无论我们单击图片还是文字,程序都会起动。娱乐一下,我们也修改了文字的FontColor。
https://bbs.rainmeter.cn/forum.php?mod=image&aid=158977&size=300x300&key=cdab7890fdd3ac63&nocache=yes&type=fixnone

保存修改,然后刷新皮肤。

让皮肤就这样透明的悬浮在桌面上也可以,但还是让我们在整个皮肤背后放一个漂亮的灰色背景。

Rainmeter一个非常重要的概念是“层覆盖”的概念。哪一个Meter显示在屏幕上面,哪一个Meter显示在屏幕下面这取决于Meter的代码在皮肤ini文件的书写位置。既然我们要把背景Meter放在所有Meter后面,我们就需要把它的代码放在它的代码放在其它要显示在前面的Meter的上面。

所以,让我们回到皮肤顶部,就在节点后面,在第一个文本Meter 的前面,插入新的背景图片Meter。

Update=1000
Meter=ImageW=145H=95SolidColor=60,60,60,255
Meter=StringX=5Y=5FontFace=Trebuchet MSFontSize=14FontColor=255,255,255,255StringStyle=BoldSolidColor=0,0,0,1AntiAlias=1Text=NotepadLeftMouseUpAction=["C:\Windows\System32\Notepad.exe"]
我们设置了特别的W和H(宽和高)让Meter足够大能够覆盖所有其它Meter的范围。没有设置X和Y选项,这样Meter将从整个皮肤的最左上角开始。然后我们设置了“SolidColor=60,60,60,255”。

这样的代码在没有ImageName的Image类Meter中将以W和H选项作为大小绘制一个填充矩形。(对于有图片的Image类Meter将填充图片的透明部分。)


保存修改,并刷新皮肤。干得漂亮!你已经完成了一个功能性很强的Launcher皮肤。下面你可以按照之前的样式继续添加项目,根据你的喜好调整文本和图片的格式选项,重新调整布局,最终形成一个功能与创意间距的独特皮肤。


二、Clock(时间皮肤)
首先,请确定你已经在Creating Skins中阅读了如何制作一个简单的“Hello World”皮肤,并且已经学会了如何在Skins文件夹中创建.ini皮肤文件和如何刷新Rainmeter使其显示你新建的皮肤。

在之前的学习后,你应该已经在Skins下创建了名为Tutorials的文件夹。下面我们要在它的下面新建一个文件夹来创建我们的新皮肤。在Skins\Tutorials\下新建名为Clock的文件夹。在Tutorials\Clock文件夹中新建空白文本文档。

在Windows资源管理器中,你可以在文件夹右键,选择“新建→文本文档”来新建。将其重命名为Clock.ini,确定扩展名为.ini而非.ini.txt。

现在,单击任务栏系统通知区的RM图标来打开管理窗口。点击左下方的“刷新全部”按钮,这样你就可以在列表中看到你新建的Tutorials/Clock配置。找到Clock.ini,右键“编辑”。然后皮肤会用你默认的文本编辑器打开。

不要在此时加载皮肤,没有任何代码的皮肤是无法加载的。


1、构建Clock皮肤
本教程将介绍在皮肤中使用Measure。在Rainmeter中,Measure用于从你的电脑系统、文本文档、网站和其他来源中获取信息。此外,我们将使用String类Meter的更多特性,并将再次涉及在皮肤中使用动作选项和Bang命令。

首先,一如我们在之前教程中所做的,添加节点来控制皮肤更新率。


Update=1000

现在,让我们添加第一个Measure,在这里是一个时间类Measure用于从你的电脑中返回系统时间。
Measure=Time
Format=%#I:%M

请务必查阅Time Measure的手册资料以了解Format选项是如何设置以获取你想要的时间格式的。

在这个Measure我们使用的格式是“12小时制的时:分”。让我们添加Meter来显示Measure获取的数据。
首先,我们通过添加一个设置了一系列通用的文本格式选项的节点来使用Meter的MeterStyle选项。这样我们就不需要在之后创建的皮肤中不断重复书写这些代码。下面我们添加Meter 。


FontFace=Trebuchet MS
FontColor=255,245,207,255
SolidColor=0,0,0,1
StringStyle=Bold
StringAlign=Right
AntiAlias=1


Meter=String
MeterStyle=TextStyle
MeasureName=MeasureTime
X=165
Y=0
FontSize=40

一起使用Measure和Meter的关键是使用MeasureName选项将绑定到Meter上。这样做意味着Meter将显示每次更新时Measure的返回值。

让我们加载一下皮肤看看效果。在管理窗口的列表中找到Clock.ini,单击右上方的“加载”按钮。


你可以把皮肤拖拽到任何你喜欢的位置。Rainmeter将在皮肤下次加载时还原这个位置。你可以右键单击皮肤改变它的皮肤选项。

2、增加更多的Measure和Meter
我们下面要在皮肤不同的Meter中显示不同的系统时间,让我们创建更多的Measure获取不同样式的信息。返回到节点后,添加新的Measure。Measure=TimeFormat=%S
Measure=TimeFormat=%p
Measure=TimeFormat=%B
Measure=TimeFormat=%#d
Measure=TimeFormat=%Y
Measure=TimeFormat=%A现在,让我们开始构建用于显示这些不同Measure返回值的Meter。返回皮肤底部添加新的Meter。
Meter=StringMeterStyle=TextStyleMeasureName=MeasureSecondsX=204Y=8FontSize=18FontColor=255,231,135,255
注意,在这里我们使用“MeasureName=MeasureSeconds”选项将Meter与对应的Measure绑定。如果向上看,你会看到在节点有很多我们为文本Meter定义的格式选项,我们想要让他们在Meter间共享,而不是一遍又一遍地重复书写。其中之一是StringAlign选项,它根据Meter的X和Y选项控制文字的对齐方式。在这里,我们将所有Meter设为右对齐。在后面你了解我们这样设置的原因。在上一个Meter 中我们同样设置的右对齐,这样皮肤最右边缘的X坐标是165。因此在这个Meter中我们把最右边缘调整为204。此外,我们想让这个Meter具有不同的颜色。因此我们在这个Meter下设定“FontColor=255,231,135,255”来“覆盖重写”掉我们在节点下的选项“FontColor=255,245,207,255”保存并刷新皮肤,让我们看一下变化。

继续在皮肤底部创建Meter来显示从Measure返回的信息。Meter=StringMeterStyle=TextStyleMeasureName=MeasureAMPMX=204Y=30FontSize=16FontColor=255,231,135,255
Meter=StringMeterStyle=TextStyleMeasureName=MeasureMonthNameMeasureName2=MeasureDayOfMonthMeasureName3=MeasureYearX=204Y=0RFontSize=13Text=%1 %2, %3
Meter=StringMeterStyle=TextStyleMeasureName=MeasureDayOfWeekX=204Y=0RFontSize=13
正如你所看到的,在下面中我们将多个Measure绑定到Meter。
Meter=StringMeterStyle=TextStyleMeasureName=MeasureMonthNameMeasureName2=MeasureDayOfMonthMeasureName3=MeasureYearX=204Y=0RFontSize=13Text=%1 %2, %3
因为我们在这个Meter中用到了三个Measure,所以我们用MeasureName、MeasureName2、MeasureName3选项将这三个Measure分别绑定到Meter上。然后我们在Text选项中使用“%1 %2, %3”来显示这三个Measure。


保存并刷新皮肤,让我们看一下变化。现在你可以看到为什么我们将所有文字Meter右对齐。当时间变长或变短时,我们不想Meter的位置随之发生改变,我们想让Meter保持工整。下面的图片显示了当时间变长时整个皮肤的样子。


让我们像之前教程那样添加一个背景图片。回到所有Meter的上面,添加一个新的Image类Meter。
Meter=ImageW=210H=107SolidColor=60,60,60,255
FontFace=Trebuchet MSFontColor=255,245,207,255SolidColor=0,0,0,1StringStyle=BoldStringAlign=RightAntiAlias=1

保存并刷新皮肤,让我们看一下变化。恭喜你,十分漂亮的时钟皮肤。



3、额外加分的工作下面我们将为我们的时钟增加一些新特性,这样我们就会再次接触在皮肤中使用“动作选项”和“Bang命令”。首先,让我们添加一个当鼠标滑过在上,显示时间会在12小时制和24小时制间切换的功能。找到这个Meter,添加这几行代码。
Meter=StringMeterStyle=TextStyleMeasureName=MeasureTimeX=165Y=0FontSize=40MouseOverAction=[!SetOption MeasureTimeFormat "%H:%M"][!UpdateMeasure MeasureTime][!UpdateMeter *][!Redraw]MouseLeaveAction=[!SetOption MeasureTimeFormat "%#I:%M"][!UpdateMeasure MeasureTime][!UpdateMeter *][!Redraw]
这里我们用到了一对鼠标动作和一系列Bang命令。当我们鼠标移到Meter上时,指令!SetOption改变了的Format选项,使其从获取12小时制的时间(%I)变为获取24小时制时间(%H)。然后我们用到!UpdateMeasure、!UpdateMeter和!Redraw使得改变在鼠标移过时立即生效,而不用等到皮肤的下次更新。当我们鼠标移出Meter时,同一套Bang指令将各式重新设成12小时制并更新。


鼠标移出


鼠标移入


下面,我们要为我们的时钟加点声音。当整点时,皮肤将播放一个悬摆座钟敲响的音频文件。首先,我们需要获取音频文件并将其放在你的皮肤文件夹中合适的位置。在下面链接邮件保存为HourChime.wav到你的电脑,将其存放在“Skins\Tutorials\@Resources”下新建的文件夹“Sound”中。这样音频文件为“SKins\Tutorials\@Resources\Sound\HourChime.wav”.
下载HourChime.wav(链接)Download HourChime.wav
现在我们添加一个新的Measure来控制什么时候播放声音。让我们回到皮肤顶部,就在之前的下面,添加Measure。
Measure=TimeFormat=%#I:%M
Measure=TimeFormat=%MIfEqualValue=0IfEqualAction=


从系统时间中获取分钟(%M),然后使用条件动作(IfAction)在每次更新时检查Measure的值。当值等于0(“IfEqualValue=0”),与之对应的“IfEqualAction=”就会被执行。Bang指令Play用于加载和播放HourChime.wav文件。

修改完成后保存并刷新皮肤。恭喜你!一个外观漂亮、功能强大、让人厌烦的时钟皮肤完成了!
三、System(系统信息皮肤)介绍

在本节教程中,我们将涵盖一些新的东西。首先我们将介绍两个新的Measure类型和两个新的Meter类型,以及他们各自的选项。

我们将接触Measure中UpdateDivider的用法,并将使用变量来设置、使用和改变被Measure和Meter的共享的选项值。

在这个皮肤要用到很多东西,所以我们在下面简单介绍一下最终效果,方便你在制作皮肤过程中知道自己进行到了哪一步。首先,让我们看一下最后皮肤的样子。



在本节教程中,我们要做的是测量CPU的使用率和硬盘的空间。然后我们会用Roundline类Meter来显示使用率。

我们会用Line类Meter来持续监视CPU使用率,并显示硬盘空间的信息。

你说你只在图片上看到一个硬盘?恩……啊……
1、构建System皮肤
首先就像我们之前教程做的那样,添加节点来控制皮肤的更新率。


Update=1000

下面我们要做的是为皮肤定义一些变量。变量用于构建一个值,使这个值可以通过用#号包围的变量名(如#变量名#,中英皆可)来在皮肤中不断被使用。

DarkBlue=27,63,107,255MediumBlue=92,135,209,255LightBlue=207,224,255,255LightRed=250,148,135,255AlmostBlack=40,40,40,255CurrentDrive=C:Drive1=C:Drive2=D:
现在在这里我们作弊一下。在之前的教程,我们都是在教程的最后才用图片Meter为皮肤设置来了填充背景。这次让我们直接来设置背景,这样我们就能在这里首次用到上面设定的变量。
Meter=ImageX=0Y=0W=185H=110SolidColor=#AlmostBlack#
注意我们这里在Meter的SolidColor选项用到了变量#AlmostBlack#。因此这个Meter就会使用我们之前在节点下定义的值“AlmostBlack=40,40,40,255”。记住如果你在Image类Meter中定义SolidColor但不定义ImageName或MeasureName选项,那么这个Meter将根据W和H(宽和高)选项来简单的画一个矩形。让我们加载一下我们的皮肤看看效果。在管理窗口的列表中找到System.ini,单击右上方的“加载”按钮。



现在还没什么能看到的。下面让我们创建一个Measure来在每次更新时以百分比获取CPU使用量。 Measure=CPU
现在是介绍新Meter类型的时候了。

我们要使用Roundline类Meter以填充圆环的方式在屏幕上显示的返回值。用下面的代码创建一个新节点。

Meter=RoundlineMeasureName=MeasureCPUX=5Y=8W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#LightBlue#AntiAlias=1
刷新皮肤,这样我们就能看到这些选项的效果。


旋转线Meter在这里绘制了以Meter的W和H选项为旋转中心的一条线段的旋转路径。我们定义了Meter(也就是圆)的大小为40x40 px。记住这里定义的是外直径长度40像素,也就是从圆心到圆外侧边缘为20像素。

2、Roundline - 关于角度我们首先要定义两个选项来控制Meter的工作方式。我们需要告诉Roundline当0值时线段的指向(起始点)。这要用到StartAngle选项。我们还要告诉Roundline当满值时填充多少的圆环(当值为100%时线段的总旋转路径)。这要用到RotationAngle选项。正如你看到的,我们设置StartAngle为“StartAngle=(Rad(270))”,RotationAngle为“RotationAngle=(Rad(360))”。让我们花点时间来解释这个。

Roundline类Meter的角度选项全部为弧度制。与角度制一样,弧度制是一种描述夹角大小的度量。简单的说,弧度制将周角(360°)定义为2π,平角(180°)定义为π,直角(90°)定义为π/2,其他角度同理分割。此外,弧度制也可以理解为在一个半径为1的圆内,一个角所对应的圆弧的长度;即,1弧度为半径为1的圆内,弧长为1的弧所对应的圆心角。与时钟不同,弧度制的起始方向为x轴正方向,即正右方向。Roundline使用顺时针方向。
在这里强烈建议你仔细阅读Radians Guide中的解释。

在StartAngle中,我们告诉Roundline Meter的起始点为正右方沿顺时针旋转270°的弧度制(弧度1.5π)后的方向。这样我们将起始点移到了Meter的正上方向,这才是我们想要的结果。

然后,我们设置RotationAngle选项为360°的弧度制(弧度2π),告诉Roundline线段在圆内从StartAngle定义的起始点开始总旋转路径为整个圆。当Measure的值为100%时,我们要让整个圆环被填充。

(注意我们这里用到了Rad(x)函数来将角度制(容易在脑中构想的)转化成弧度制(这个函数用于数学,不太好理解))

3、Roundline - 线段的选项在默认情况下,Roundline类Meter会从Meter的中心向外绘制一条线段,根据Measure的值决定指向。但这里我们不想要一个“指针”,而是希望绘制填充一个圆环。下面是我们在这里用到的一些选项。
•       LineStart=15
•       告诉Roundline我们想让线段从距离Meter中心15像素的位置开始(圆环内径)。
•       LineLength=20
•       设置线段的总长度为20像素(圆环外半径)。我们的Meter总共宽40像素,但从中心到外边缘只有20像素的宽度。

这两个选项的效果是绘制了一条从距离中心15像素点开始绘制的,延伸到距离中心20像素的线段。也就是说线段实际kuan5像素(圆环带宽)。
•       Solid=1
•       告诉Roundline我们不是想要一个单独的线段,而是一个从0%代表的位置到当前Measure返回值代表的位置之间的一个填充体。

所以我们得到的是一个根据返回值变化的填充圆环,而非一个“指针”。

然后我们用到在一开始在下定义的一个变量。我们想设置圆环的颜色为漂亮的亮蓝色,就是我们之前定义的“LightBlue=207,224,255,255”。

因此我们在旋转线Meter中设置选项“LineColor=#LightBlue#”。

干得漂亮!Roundline在Rainmeter中是一个非常有用非常灵活的一种Meter。一旦你开始了解学习这些选项,你会发现很多有创意的Roundline用法。

稍微休息一下。

4、继续构建皮肤Roundline类Meter看起来似乎很有趣,让我们再添加一个Roundline类Meter作为前者的背景。在你的代码中,向上移到之前添加的节点之上,添加一个新的Meter节点。
记住,我们想让这个Meter在“下面”,因此我们需要在.ini皮肤代码的节点的“前面”添加新Meter的代码。
Meter=RoundlineX=5Y=8W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#MediumBlue#AntiAlias=1
我们在这里创建了另一个Roundline类Meter,与之前相同的X和Y坐标,但却在后面。所有的选项都与相同,除了这里没有用MeasureName选项将Measure“绑定”到这个Meter。Roundline将默认使用100%,这样我们就得到了一个完整的圆环作为背景。
哦,我们同样在线的颜色上使用了另一个变量。刷新皮肤,让我们看一看变化。
你的整个皮肤的代码现在应该是这个样子:
Update=1000
DarkBlue=27,63,107,255MediumBlue=92,135,209,255LightBlue=207,224,255,255LightRed=250,148,135,255AlmostBlack=40,40,40,255CurrentDrive=C:Drive1=C:Drive2=D:
Measure=CPU
Meter=ImageX=0Y=0W=185H=110SolidColor=#AlmostBlack#
Meter=RoundlineX=5Y=8W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#MediumBlue#AntiAlias=1
Meter=RoundlineMeasureName=MeasureCPUX=5Y=8W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#LightBlue#AntiAlias=1
下面我们要创建一个String类Meter来显示我们从中得到的确切值,并把它放在圆环的中心。
我们在之前的教程中已经介绍了文本Meter的使用与定位,所以让我们直接在皮肤代码的最后添加下面的这个新节点。
Meter=StringMeasureName=MeasureCPUFontFace=Segoe UIFontSize=8FontColor=#LightBlue#X=26Y=28StringAlign=CenterCenterStringStyle=BoldAntiAlias=1Text=%1%
保存并刷新皮肤,让我们看看新的Meter。
https://bbs.rainmeter.cn/forum.php?mod=image&aid=159009&size=300x300&key=829621426e3cf066&nocache=yes&type=fixnone

你知道的,如果文字的颜色随着CPU使用率的到达某个值而发生变化,那么会看起来很好。我们可以当返回值大于等于25%时把颜色变成红色,当小于25%时返回蓝色。
让我们返回代码开头附近,并且找到名为的measure,然后为它添加一下新东西。
Measure=CPUIfAboveValue=24IfAboveAction=[!SetOption MeterCPUPercentFontColor #LightRed#][!UpdateMeter *][!Redraw]IfBelowValue=25IfBelowAction=[!SetOption MeterCPUPercentFontColor #LightBlue#][!UpdateMeter *][!Redraw]
这里使用条件动作(IfAction)来实现这一效果:•       当Measure的返回值超过24时,使用!SetOption指令将的FontColor选项设为我们之前在下定义的#LightRed#。•       当Measure的返回值低于25时,使用!SetOption指令将FontColor选项设置为我们之前在下定义的#LightBlue#,也就是返回原本的颜色。
https://bbs.rainmeter.cn/forum.php?mod=image&aid=159010&size=300x300&key=8080085546ddb4ed&nocache=yes&type=fixnone


5、Line类Meter

下面我们要接触Rainmeter中的另一类Meter——Line。
Line类Meter将一个或多个Measure随时间返回的百分值显示为一系列点,并将其连接起来作为一张折线图。
为皮肤添加一个新的节点。Meter=LineMeasureName=MeasureCPUX=49Y=8W=130H=38LineCount=1LineColor=#LightBlue#LineWidth=1HorizontalLines=1HorizontalLineColor=#AlmostBlack#SolidColor=#DarkBlue#
Line类Meter是非常清晰容易理解的。它通过MeasureName来“绑定”一个或多个Measure,并使用像LineWidth(线粗)和LineColor(线色)来控制Meter的外观。线条随着时间在Meter的W和H选项定义的图表区域内绘制。
附加的HorizontalLines(水平线条)和HorizontalLineColor(水平线颜色)选项为图表绘制背景线条。最后SolidColor选项定义了整个Meter的背景颜色。
刷新皮肤让我们看一下。让皮肤运行一段时间,这样你就会看到线条的运动。


我们应该在折线Meter上方一个标签,这样就能很清楚的显示它在测量的是什么。我们之前详细研究过String类Meter,这样我们直接添加一个并看一下结果。
Meter=StringFontFace=Segoe UIFontSize=15FontColor=#LightBlue#X=48Y=4StringStyle=BoldAntiAlias=1Text=CPU


6、测量磁盘
是时候为我们的皮肤引进一种新的Measure类型了。我们下面要测量你的一个磁盘的总空间、已用空间和剩余空间。
我们将用一个与之前在CPU测量中用到的几乎一样的旋转线Meter来显示使用空间。然后会在它的旁边将总空间和剩余空间用String类Meter显示出来。
首先,让我们建立我们需要的Measure。返回皮肤代码的上端,在我们刚开始创建的下面添加新的Measure。
Measure=FreeDiskSpaceDrive=#CurrentDrive#Total=1IgnoreRemovable=0DynamicVariables=1UpdateDivider=-1
Measure=FreeDiskSpaceDrive=#CurrentDrive#IgnoreRemovable=0DynamicVariables=1UpdateDivider=5
Measure=FreeDiskSpaceDrive=#CurrentDrive#InvertMeasure=1IgnoreRemovable=0DynamicVariables=1UpdateDivider=5
FreeDiskSpace类Measure用于获取磁盘的空间使用信息。下面解释一下我们使用到的这几个选项:
•                Drive=#CurrentDrive#•                这个选项告诉Measure测量哪一个磁盘。在这里,我们使用之前设定的变量,将值设为了“C:”
•                IgnoreRemovable=0•                默认地,FreeDiskSpace将忽略像USB或光驱等移动磁盘。设置IgnoreRemovable=0来允许测量这些磁盘。
•                InvertMeasure=1•                默认地,FreeDiskSpace将测量一个磁盘的剩余空间。为了测量已用空间,你需要用到通用Measure选项InvertMeasure=1来反向测量。
除此之外,我们还在Measure中用到了另外两个之前没有见过的选项。
DynamicVariables用于告诉Measure或Meter在当前节点每次更新时,当前节点用到的所有变量的值都需要重新确认。为了让Rainmeter占用尽可能少的电脑资源,只有在皮肤加载构建Measure或Meter时Rainmeter才会确定变量的值;Rainmeter不会为Measure和Meter确认变量值是否发生动态变化,除非这个选项被开启。后面你会明白为什么我们需要在FreeDiskSpace类Measure中使用这个选项。
UpdateDivider用于控制Measure或Meter的更新频率。整个皮肤的Update被设置在皮肤顶端节点下,定义了皮肤每多少毫秒更新一次。在我们的这个皮肤中,“Update=1000”也就是每秒更新。
我们设定在FreeDiskSpace中设定的“UpdateDivider=5”选项用来告诉Rainmeter这些Measure皮肤每更新5次时更新一次,在这里就是5秒一次。对于任何不需要随着Update更新而更新的Measure都需要考虑是否需要设定UpdateDivider来减少Rainmeter的工作量并节约电脑资源。在这里,无疑让FreeDiskSpace每秒钟读取一次磁盘信息时没有必要的。
你可以通过阅读Upate Guide以获得更多详细解释。
好了,我们的Measure都已经建好了,按字节提供了各种我们的磁盘空间测量数据。需要注意的一点是FreeDiskSpace类Measure实际上自动设定了Measure的最大值和最小值,所以它的值可以在像Roundline需要百分比的Meter中使用。为皮肤添加下列Meter。
Meter=RoundlineX=5Y=63W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#MediumBlue#AntiAlias=1
Meter=RoundlineMeasureName=MeasureDriveUsedX=5Y=63W=40H=40StartAngle=(Rad(270))RotationAngle=(Rad(360))LineStart=15LineLength=20Solid=1LineColor=#LightBlue#AntiAlias=1
Meter=StringFontFace=Segoe UIFontSize=10FontColor=#LightBlue#X=26Y=83StringAlign=CenterCenterStringStyle=BoldPercentual=1AntiAlias=1DynamicVariables=1Text=#CurrentDrive#这些Meter和之前我们添加用于显示CPU使用率的圆环状Roundline真的非常相似。
我们将RoundlineMeter和绑定到一起来显示使用空间量;与之前显示Measure的返回值不同,在圆环的中心显示了表示当前我们测量的磁盘盘符的变量#CurrentDrive#。我们再次在这个标签中设置了“DynamicVariables=1”。
马上你就知道为什么了。保存并刷新皮肤看一下效果。

https://bbs.rainmeter.cn/forum.php?mod=image&aid=159013&size=300x300&key=b2949e164f447039&nocache=yes&type=fixnone

最后,我们通过创建一个有SolidColor没有MeasureName选项的Image类Meter,来制作一个漂亮的背景来与的背景搭配;然后创建一些String类Meter来显示磁盘总空间和剩余空间。将这些Meter添加到皮肤底部。保存并刷新。
Meter=ImageX=49Y=63W=130H=38SolidColor=#DarkBlue#

Meter=StringFontFace=Segoe UIFontSize=11FontColor=#LightBlue#X=50Y=64StringStyle=BoldStringAlign=LeftAutoScale=1AntiAlias=1Text=Total:

Meter=StringMeasureName=MeasureDriveTotalFontFace=Segoe UIFontSize=11FontColor=#LightBlue#X=180Y=64StringStyle=BoldStringAlign=RightAutoScale=1AntiAlias=1Text=%1B

Meter=StringFontFace=Segoe UIFontSize=11FontColor=#LightBlue#X=50Y=81W=130H=18ClipString=1StringStyle=BoldAutoScale=1AntiAlias=1Text=Free:

Meter=StringMeasureName=MeasureDriveFreeFontFace=Segoe UIFontSize=11FontColor=#LightBlue#X=180Y=81StringStyle=BoldStringAlign=RightAutoScale=1AntiAlias=1Text=%1B
这些Meter用到的一个新的选项需要解释一下。FreeDiskSpace Measure从磁盘获取空间值的单位是字节。对于我们绝大多数人来说,这个数字实在是太大而且太长,这不是我们想要在皮肤上显示的数字。
文本Meter中的AutoScale选项将对数字进行自动缩放成MB、GB、TB等等,并在数字后添加M、G、T的标签。
我们在文本的最后添加了额外的固定字符“B”,这样就会显示成例如“931 GB”。让我们看一下。
https://bbs.rainmeter.cn/forum.php?mod=image&aid=159014&size=300x300&key=ebd325d6ff041b6e&nocache=yes&type=fixnone


7、什么是动态变量?
下面我们要解释一下之前在一些Meter和Measure中使用DynamicVariables=1的原因。我们的“终极目标”是当鼠标移到皮肤上时,皮肤将动态改变我们测量的磁盘。
如果你回到节点,你会看到下面:
CurrentDrive=C:Drive1=C:Drive2=D:然后在我们的FreeDiskSpace类Measure 、和中,我们设定Drive选项为变量#CurrentDrive#。因此一开始,Measure都在测量C:盘。我们想做的是,当鼠标移到皮肤上时,设置#CurrentDrive#等于变量#Drive2#的值;当鼠标移走时,返回#Drive1#。
为了实现这一效果,我们需要为皮肤添加新的鼠标动作以及由其触发的相应Bang指令。
让我们回到节点,紧接在所有Measure下的第一个Meter。添加鼠标动作这几行。
Meter=ImageX=0Y=0W=185H=110SolidColor=#AlmostBlack#MouseOverAction=[!SetVariable CurrentDrive#Drive2#][!UpdateMeasure *][!UpdateMeter *][!Redraw]MouseLeaveAction=[!SetVariable CurrentDrive#Drive1#][!UpdateMeasure *][!UpdateMeter *][!Redraw]
这些设置的意思是:•       当鼠标移到背景Meter上时,使用!SetVariable指令来将变量CurrentDrive值改变为变量Drive2的值。
•       当鼠标移出背景Meter时,,使用!SetVariable指令来将变量CurrentDrive值改变为变量Drive1的值,也就是返回初始值。
•       然后我们使用!UpdateMeasure、!UpdateMeter和!Redraw指令来让改变当鼠标移入或移出时立即生效,而不用等待皮肤的下次更新。
这就是我们为什么在使用#CurrentDrive#变量的Measure和Meter中添加DynamicVariables=1的原因。
这一选项使得Measure和Meter在节点每次更新时确认变量的值,所以当我们使用!SetVariable改变了变量的值后它们也会相应变化。
我们最后到了这里。干的漂亮!下面是你的最终皮肤的截图,第一个是鼠标从皮肤移出时,第二个是鼠标移入皮肤时。




鼠标移出

鼠标移入


suixin812 发表于 2013-7-30 15:09:59

噗……你就不舍得分开发

Soliv_ctx 发表于 2013-7-30 15:14:14

又密又麻(⊙_⊙)

会哭的梧桐树 发表于 2013-7-30 15:43:53

suixin812 发表于 2013-7-30 15:09
噗……你就不舍得分开发

我舍不得怎么破~~~

会哭的梧桐树 发表于 2013-7-30 15:44:16

本帖最后由 会哭的梧桐树 于 2013-7-30 15:45 编辑

Soliv_ctx 发表于 2013-7-30 15:14
又密又麻(⊙_⊙)
排版乱了而已... 重新排了哦。

Real_聪 发表于 2013-7-30 15:56:06

支持+前排留名+前辈求艹

语笑嫣然 发表于 2013-7-30 16:19:09

我来啦,大家都辛苦了,希望正式文档早日发布

出没_请注意 发表于 2013-7-30 17:18:17

华尔街的神 发表于 2013-7-30 17:22:50

下下来看看~~~

asian橙子 发表于 2013-7-30 17:55:34



辛苦辛苦,给你们捶捶背。
页: [1] 2
查看完整版本: 【官网文档翻译】基础教程-Basic Tutorials-