0

我制作了一个小部件,应该告诉我我的班次完成的百分比,但它不是自动刷新的,所以如果我想要当前值,我必须手动刷新皮肤。我怎样才能让它自动刷新?

我尝试手动设置 Update=,添加 OnUpdateAction 和 [!Redraw] 以及其他一些我很遗憾没有保存的东西,因为它们不起作用,所以现在我不记得它们了。(下面的代码省略了元数据、xy 坐标以及与此问题无关的变量和值,例如字体设置。)

[Rainmeter]
MiddleMouseDownAction=[!WriteKeyValue Variables OffWorkTime1 #OffWorkTime2#][!WriteKeyValue Variables OffWorkTime2 #OffWorkTime3#][!WriteKeyValue Variables OffWorkTime3 #OffWorkTime4#][!WriteKeyValue Variables OffWorkTime4 #OffWorkTime5#][!WriteKeyValue Variables OffWorkTime5 #OffWorkTime1#][!Refresh]
OnUpdateAction=[!UpdateMeasure MeasurePercElaps][!UpdateMeter MeterPercentDisplay][!WriteKeyValue Variables OffWorkTime1 #OffWorkTime1#][!WriteKeyValue Variables OffWorkTime2 #OffWorkTime2#][!WriteKeyValue Variables OffWorkTime3 #OffWorkTime3#][!WriteKeyValue Variables OffWorkTime4 #OffWorkTime4#][!WriteKeyValue Variables OffWorkTime5 #OffWorkTime5#][!Redraw]
LeftMouseDownAction=[!UpdateMeasure MeasurePercElaps][!UpdateMeter MeterPercentDisplay][!Redraw]
Update=200

[Variables]
OffWorkTime1=870
OffWorkTime2=900
OffWorkTime3=990
OffWorkTime4=1140
OffWorkTime5=1260
HR=[MeasureHour]
MN=[MeasureMin]
PElaps=[MeasurePercElaps:0%]

;MEASURES===================

[MeasureHour]
measure=time
format=%H

[MeasureMin]
measure=time
format=%M

[MeasurePercElaps]
measure=calc
formula=(((540 - (#OffWorkTime1# - ((#HR# * 60) + #MN#))) / 540) * 100)
MinValue=0
MaxValue=100

;METERS===================

[MeterBarPercent]
meter=bar
MeasureName=MeasurePercElaps
W=201
h=23
ValueRemainder=100
BarColor=84,165,196,255
BarOrientation=Horizontal
DynamicVariables=1

[MeterPercentDisplay]
meter=string
MeasureName=MeasurePercElaps
AntiAlias=1
NumOfDecimals=1
DynamicVariables=1
Postfix=% COMPLETE

它应该在每个更新周期自动刷新,但我可以让它刷新显示的值的唯一方法是手动刷新它。它在刷新时给出了正确的值,所以我知道公式没有错误,但它只是由于某种原因没有自动更新。我放在那里的 LeftMouseDownAction= 东西也不起作用。您的任何指示将不胜感激。

~δelta

4

1 回答 1

1

您需要采取DynamicVariables=1措施,[MeasurePercElaps]以使其不断更新。

以下脚本或多或少是您想要实现的目标,但我只是使用一个公式来计算 1 分钟内剩余的 % 秒数,以获得即时效果。

;MEASURES===================

[MeasureHour]
measure=Time
format=%H

[MeasureMin]
measure=Time
format=%M

[MeasureSec]
measure=Time
format=%S

[MeasurePercElaps]
measure=Calc
;formula=(((540 - (#OffWorkTime1# - ((#HR# * 60) + #MN#))) / 540) * 100)
formula=((60.0-[MeasureSec])/60.0)*100.0
MinValue=0
MaxValue=100
DynamicVariables=1

[MeterBarPercent]
meter=Bar
MeasureName=MeasurePercElaps
AntiAlias=1
FontFace=#FontFace#
FontSize=12
SolidColor=47,47,47,255
StringAlign=Left
X=0
Y=0
W=190
H=20
ValueRemainder=100
BarColor=84,165,196,255
BarOrientation=Horizontal
DynamicVariables=1

[MeterPercentDisplay]
meter=String
MeasureName=MeasurePercElaps
AntiAlias=1
FontFace=#FontFace#
FontSize=12
FontColor=255,255,255,255
StringAlign=Left
X=0
Y=0
W=190
AntiAlias=1
NumOfDecimals=1
Postfix=% COMPLETE
DynamicVariables=1

条形表应如下所示:

在此处输入图像描述

由于[MeasurePercElaps]now 可以自行更新,因此不再需要LeftMouseDownActionin the 。[Rainmeter]如果你仍然把它放在那里,它会阻止你在桌面区域的任何地方移动皮肤,并且你将无法打开皮肤的弹出菜单。

OnUpdateAction如果您需要让您的OffWorkTime变量在下一次皮肤加载/重新加载时保持不变,您可以保留。但是,我不明白这一点,因为您只保存在皮肤会话期间始终不变的变量。这就是!WriteKeyValuebang 正在做的事情。

另一方面,MiddleMouseDownAction是相当多余的。

于 2019-05-26T02:28:51.660 回答