It is currently May 27th, 2024, 6:15 pm

Simple Text Marquee

Tips and Tricks from the Rainmeter Community
User avatar
Yincognito
Rainmeter Sage
Posts: 7341
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Simple Text Marquee

Post by Yincognito »

RoseRain wrote: June 19th, 2023, 6:03 am I was wondering if anyone knows how to use this marquee method as a spotify player.
By the way, the process should be similar for the WebNowPlaying plugin you are trying to make it work in the other thread, so once you have it working, this issue can be solved as well like I described above. ;-)
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
User avatar
RoseRain
Posts: 42
Joined: June 30th, 2022, 1:39 pm

Re: Simple Text Marquee

Post by RoseRain »

Yincognito wrote: June 20th, 2023, 3:43 pm By the way, the process should be similar for the WebNowPlaying plugin you are trying to make it work in the other thread, so once you have it working, this issue can be solved as well like I described above. ;-)
Hello. I have a few other player skins, so I have been looking at the code there and adding things to the marquee code from there as a guide, to include the artist, and song titles. Still working on it. Not quite there yet.

Yes, I have been using Rainmeter for a long time. Coding and techincal stuff doesn't come easy to me. I have taken long breaks from Rainmeter, forgetting a lot in the process lol. I apologise if it seemed like I was expecting someone to do it all for me. I certainly don't expect anything, and am very grateful for any replies, or advice.

Thanks for your reply. I appreciate it a lot.
User avatar
Yincognito
Rainmeter Sage
Posts: 7341
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Simple Text Marquee

Post by Yincognito »

RoseRain wrote: June 21st, 2023, 1:11 am Hello. I have a few other player skins, so I have been looking at the code there and adding things to the marquee code from there as a guide, to include the artist, and song titles. Still working on it. Not quite there yet.
Alright, no need to apologize, just wanted to make sure that at least you tried. There's no problem if you didn't succeed yet, but this was so simple that you shouldn't have had any issues in making it work, even if it's not your thing, apart from some expected "glitches" when the track changes.

Here's the NowPlaying code, it works as expected - you should have no problem in replacing the NowPlaying measures with the corresponding WebNowPlaying ones and use them instead in the meters, when you'll set the WebNowPlaying system properly based on the replies from the other thread:

Code: Select all

[Variables]
Player=Winamp
AnimationSpeed=32
Wait=1500
ArtistX=0
TitleX=0

[Rainmeter]
Update=1000
AccurateText=1
DynamicWindowSize=1
OnRefreshAction=[!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 1"][!CommandMeasure Marquee "Execute 2"]
MiddleMouseUpAction=[!Refresh]

---Measures---

[ArtistTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([ArtistText:W]-[Container:W])))
DynamicVariables=1

[TitleTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([TitleText:W]-[Container:W])))
DynamicVariables=1

[Marquee]
Group=Marquee
Measure=Plugin
Plugin=ActionTimer
ActionList1=Repeat MoveArtist,#AnimationSpeed#,[ArtistTextOffset:] | Wait #Wait# | ResetArtist | Wait #Wait# | DoOverArtist | Wait #Wait#
ResetArtist=[!SetVariable ArtistX 0][!UpdateMeasure Marquee][!UpdateMeter ArtistText][!Redraw]
MoveArtist=[!SetVariable ArtistX (#ArtistX#-1)][!UpdateMeasure Marquee][!UpdateMeter ArtistText][!Redraw]
DoOverArtist=[!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Execute 1"]
ActionList2=Repeat MoveTitle,#AnimationSpeed#,[TitleTextOffset:] | Wait #Wait# | ResetTitle | Wait #Wait# | DoOverTitle | Wait #Wait#
ResetTitle=[!SetVariable TitleX 0][!UpdateMeasure Marquee][!UpdateMeter TitleText][!Redraw]
MoveTitle=[!SetVariable TitleX (#TitleX#-1)][!UpdateMeasure Marquee][!UpdateMeter TitleText][!Redraw]
DoOverTitle=[!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 2"]
DynamicVariables=1

[Artist]
Measure=NowPlaying
PlayerName=#Player#
PlayerType=Artist
OnChangeAction=[!SetVariable ArtistX 0][!SetVariable TitleX 0][!UpdateMeterGroup Marquee][!Redraw][!UpdateMeasureGroup Marquee][!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 1"][!CommandMeasure Marquee "Execute 2"]
DynamicVariables=1

[Title]
Measure=NowPlaying
PlayerName=[Artist]
PlayerType=Title
OnChangeAction=[!SetVariable ArtistX 0][!SetVariable TitleX 0][!UpdateMeterGroup Marquee][!Redraw][!UpdateMeasureGroup Marquee][!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 1"][!CommandMeasure Marquee "Execute 2"]
DynamicVariables=1

---Styles---

[Text]
FontFace=Calibri
FontColor=230,230,230
FontSize=15
FontWeight=600
X=0r
Y=0R
AntiAlias=1
DynamicVariables=1

---Meters---

[Background]
Meter=Shape
Shape=Rectangle 1,1,246,84,6 | StrokeWidth 2 | Stroke Color 50,50,50 | Fill Color 15,15,15

[ArtistLabel]
Meter=String
MeterStyle=Text
X=16
Y=16
Text=Artist

[TitleLabel]
Meter=String
MeterStyle=Text
Text=Title

[Container]
Meter=Image
X=82
Y=16
W=150
H=76
SolidColor=255,255,255,255

[ArtistText]
Group=Marquee
Container=Container
Meter=String
MeterStyle=Text
X=#ArtistX#
Y=0r
MeasureName=Artist
Text=%1

[TitleText]
Group=Marquee
Container=Container
Meter=String
MeterStyle=Text
X=#TitleX#
MeasureName=Title
Text=%1
Just like in the original code, the artist and title are both in the same container meter, so repositioning the container will reposition the playing info accordingly. As you can see, the code is very similar to the one from the original sample.
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
User avatar
RoseRain
Posts: 42
Joined: June 30th, 2022, 1:39 pm

Re: Simple Text Marquee

Post by RoseRain »

Yincognito wrote: June 21st, 2023, 10:09 am Just like in the original code, the artist and title are both in the same container meter, so repositioning the container will reposition the playing info accordingly. As you can see, the code is very similar to the one from the original sample.
Thank you very much for this. I like things minimal, so I was able to customise it the way I like, change the style and add the timer as well. I made it transparent on my deskop and made player control buttons too and a small Spotify launcher. Your code really helped me. Thank you! and thank you to keifufu who helped make the timer work.
You do not have the required permissions to view the files attached to this post.
User avatar
Yincognito
Rainmeter Sage
Posts: 7341
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Simple Text Marquee

Post by Yincognito »

RoseRain wrote: June 22nd, 2023, 5:48 am Thank you very much for this. I like things minimal, so I was able to customise it the way I like, change the style and add the timer as well. I made it transparent on my deskop and made player control buttons too and a small Spotify launcher. Your code really helped me. Thank you! and thank you to keifufu who helped make the timer work.
Excellent! Glad you finally achieved what you wanted! :great:
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
blapman007
Posts: 5
Joined: October 25th, 2023, 11:33 am

Re: Simple Text Marquee

Post by blapman007 »

This is possibly a massive necro and I apologise for this, but I tried using this code and it would not work, for someone experiencing the same problem, just add DynamicVariables=1 to the meter, eg:

Code: Select all


[MeterText1]
Meter=String
MeterStyle=StyleText
X=#marquee1#
Y=1
Text=#text1#
DynamicVariables=1

This fixed my problem and it works perfectly now!
Again, sorry for the necro.
User avatar
Yincognito
Rainmeter Sage
Posts: 7341
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Simple Text Marquee

Post by Yincognito »

blapman007 wrote: October 25th, 2023, 6:11 pm This is possibly a massive necro and I apologise for this, but I tried using this code and it would not work, for someone experiencing the same problem, just add DynamicVariables=1 to the meter, eg:

Code: Select all


[MeterText1]
Meter=String
MeterStyle=StyleText
X=#marquee1#
Y=1
Text=#text1#
DynamicVariables=1

This fixed my problem and it works perfectly now!
Again, sorry for the necro.
No worries about the necro, but regarding the issue you mentioned, the original code does work, because it includes the DynamicVariables=1 option in the StyleText meter style. Most likely it didn't work for you because you probably removed that line from the style, either intentionally or accidentally...
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
ZXCVBOT

Re: Simple Text Marquee

Post by ZXCVBOT »

I am doing something wrong, I am not seeing anything now. I used the code given here and changed the things in marquee measure as per my skin:

Here is the complete code:

It is throwing no errors and the variables ArtistX, AlbumX and TrackX stay 0 or blank (if nothing is given). Also, no changes have been made to any measures other than [Marquee] - The one with ActionTimer (which I know nothing of). I also have used DynamicVariables in the meters and Container and Group and used X equal to their respective variables. I also removed the ClipString but no changes happened.

Edit: Changed the Height of the Container. Also, the shape is showing so that skin stays visible and yeah - for Refreshing!

Code: Select all

[Variables]

PlayerName=AIMP
FontName=Segoe UI
FontColor=255,255,255,255

;; Marquee

AnimationSpeed=32
Wait=1500

;; Dynamic Marquee Variables

ArtistX=
AlbumX=
TrackX=

; -----------------------------------------------------------------------------------------

[MeasureTrack]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PlayerName#
PlayerType=Title
Substitute="":""

[MeasureArtist]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PLayerName#
PlayerType=Artist
Substitute="":""

[MeasureAlbum]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PLayerName#
PlayerType=Album
Substitute="":""

;; Marquee-ing Title, Artist, Album

[TitleTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Track:W]-[Container:W])))
DynamicVariables=1

[ArtistTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Artist:W]-[Container:W])))
DynamicVariables=1

[AlbumTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Album:W]-[Container:W])))
DynamicVariables=1

[Container]
Meter=Image
W=([M_Track:W])
H=75
SolidColor=255,255,255,255

[Marquee]
Group=Marquee
Measure=Plugin
Plugin=ActionTimer

; -----------------------------------------------------------------------------------------

ActionList1=Repeat Move M_Artist,#AnimationSpeed#,[ArtistTextOffset:] | Wait #Wait# | Reset M_Artist | Wait #Wait# | DoOver M_Artist | Wait #Wait#

ResetArtist=[!SetVariable ArtistX 0][!UpdateMeasure Marquee][!UpdateMeter M_Artist][!Redraw]

MoveArtist=[!SetVariable ArtistX (#ArtistX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Artist][!Redraw]

DoOverArtist=[!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Execute 1"]

; -----------------------------------------------------------------------------------------

ActionList2=Repeat Move M_Track,#AnimationSpeed#,[TitleTextOffset:] | Wait #Wait# | ResetM_Track | Wait #Wait# | DoOver M_Track | Wait #Wait#

ResetTitle=[!SetVariable TrackX 0][!UpdateMeasure Marquee][!UpdateMeter M_Track][!Redraw]

MoveTitle=[!SetVariable TrackX (#TitleX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Track][!Redraw]

DoOverTitle=[!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 2"]

; -----------------------------------------------------------------------------------------

ActionList2=Repeat Move M_Album,#AnimationSpeed#,[AlbumTextOffset:] | Wait #Wait# | ResetTitle | Wait #Wait# | DoOver M_Album | Wait #Wait#

ResetTitle=[!SetVariable AlbumX 0][!UpdateMeasure Marquee][!UpdateMeter M_Album][!Redraw]

MoveTitle=[!SetVariable AlbumX (#AlbumX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Album][!Redraw]

DoOverTitle=[!CommandMeasure Marquee "Stop 3"][!CommandMeasure Marquee "Execute 3"]

DynamicVariables=1

; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[M_TRACK]
Meter=String
MeasureName=MeasureTrack
;X=(#XPos#+1)
X=#TrackX#
Y=1
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=13
Text=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_ARTIST]
Meter=String
MeasureName=MeasureArtist
;X=(#XPos#+1)
X=#ArtistX#
Y=([M_TRACK:Y])
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=12
Text=%1
TooltipText=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_ALBUM]
Meter=String
MeasureName=MeasureAlbum
;X=(#XPos#+1)
X=#AlbumX#
Y=([M_ARTIST:Y])
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=12
Text=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_Shape]
Meter=Shape
Shape=Rectangle 2,2,382,75,2 | Fill Color 0,0,0,128 | StrokeWidth 1 | Stroke Color 255,255,255,255
LeftMouseUpAction=[!UpdateMeter *][!Refresh]
Where am I going wrong?
  I chose this particular way as I was finding this a bit more easy than raiguard one. Now here I am! I want this marquee to be implemented in Rainmeter as an effect - even if it takes v99.999!  
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5423
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Simple Text Marquee

Post by eclectic-tech »

You have two ActionList2 in the [Marquee] measure; I believe you meant to have: ActionList1, ActionList2, and ActionList3.
Haven't tried any other test...
User avatar
Yincognito
Rainmeter Sage
Posts: 7341
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Simple Text Marquee

Post by Yincognito »

ZXCVBOT wrote: October 30th, 2023, 12:07 pm I am doing something wrong, I am not seeing anything now. I used the code given here and changed the things in marquee measure as per my skin:

Here is the complete code:

It is throwing no errors and the variables ArtistX, AlbumX and TrackX stay 0 or blank (if nothing is given). Also, no changes have been made to any measures other than [Marquee] - The one with ActionTimer (which I know nothing of). I also have used DynamicVariables in the meters and Container and Group and used X equal to their respective variables. I also removed the ClipString but no changes happened.

Edit: Changed the Height of the Container. Also, the shape is showing so that skin stays visible and yeah - for Refreshing!

Code: Select all

[Variables]

PlayerName=AIMP
FontName=Segoe UI
FontColor=255,255,255,255

;; Marquee

AnimationSpeed=32
Wait=1500

;; Dynamic Marquee Variables

ArtistX=
AlbumX=
TrackX=

; -----------------------------------------------------------------------------------------

[MeasureTrack]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PlayerName#
PlayerType=Title
Substitute="":""

[MeasureArtist]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PLayerName#
PlayerType=Artist
Substitute="":""

[MeasureAlbum]
Measure=Plugin
Plugin=NowPlaying
PlayerName=#PLayerName#
PlayerType=Album
Substitute="":""

;; Marquee-ing Title, Artist, Album

[TitleTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Track:W]-[Container:W])))
DynamicVariables=1

[ArtistTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Artist:W]-[Container:W])))
DynamicVariables=1

[AlbumTextOffset]
Group=Marquee
Measure=Calc
Formula=(Max(0,([M_Album:W]-[Container:W])))
DynamicVariables=1

[Container]
Meter=Image
W=([M_Track:W])
H=75
SolidColor=255,255,255,255

[Marquee]
Group=Marquee
Measure=Plugin
Plugin=ActionTimer

; -----------------------------------------------------------------------------------------

ActionList1=Repeat Move M_Artist,#AnimationSpeed#,[ArtistTextOffset:] | Wait #Wait# | Reset M_Artist | Wait #Wait# | DoOver M_Artist | Wait #Wait#

ResetArtist=[!SetVariable ArtistX 0][!UpdateMeasure Marquee][!UpdateMeter M_Artist][!Redraw]

MoveArtist=[!SetVariable ArtistX (#ArtistX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Artist][!Redraw]

DoOverArtist=[!CommandMeasure Marquee "Stop 1"][!CommandMeasure Marquee "Execute 1"]

; -----------------------------------------------------------------------------------------

ActionList2=Repeat Move M_Track,#AnimationSpeed#,[TitleTextOffset:] | Wait #Wait# | ResetM_Track | Wait #Wait# | DoOver M_Track | Wait #Wait#

ResetTitle=[!SetVariable TrackX 0][!UpdateMeasure Marquee][!UpdateMeter M_Track][!Redraw]

MoveTitle=[!SetVariable TrackX (#TitleX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Track][!Redraw]

DoOverTitle=[!CommandMeasure Marquee "Stop 2"][!CommandMeasure Marquee "Execute 2"]

; -----------------------------------------------------------------------------------------

ActionList2=Repeat Move M_Album,#AnimationSpeed#,[AlbumTextOffset:] | Wait #Wait# | ResetTitle | Wait #Wait# | DoOver M_Album | Wait #Wait#

ResetTitle=[!SetVariable AlbumX 0][!UpdateMeasure Marquee][!UpdateMeter M_Album][!Redraw]

MoveTitle=[!SetVariable AlbumX (#AlbumX#-1)][!UpdateMeasure Marquee][!UpdateMeter M_Album][!Redraw]

DoOverTitle=[!CommandMeasure Marquee "Stop 3"][!CommandMeasure Marquee "Execute 3"]

DynamicVariables=1

; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[M_TRACK]
Meter=String
MeasureName=MeasureTrack
;X=(#XPos#+1)
X=#TrackX#
Y=1
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=13
Text=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_ARTIST]
Meter=String
MeasureName=MeasureArtist
;X=(#XPos#+1)
X=#ArtistX#
Y=([M_TRACK:Y])
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=12
Text=%1
TooltipText=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_ALBUM]
Meter=String
MeasureName=MeasureAlbum
;X=(#XPos#+1)
X=#AlbumX#
Y=([M_ARTIST:Y])
W=382
FontFace=#FONTNAME#
FontColor=#FONTCOLOR#
FontSize=12
Text=%1
Group=Marquee
Container=Container
ClipString=1
AntiAlias=1
DynamicVariables=1

[M_Shape]
Meter=Shape
Shape=Rectangle 2,2,382,75,2 | Fill Color 0,0,0,128 | StrokeWidth 1 | Stroke Color 255,255,255,255
LeftMouseUpAction=[!UpdateMeter *][!Refresh]
Where am I going wrong?
  I chose this particular way as I was finding this a bit more easy than raiguard one. Now here I am! I want this marquee to be implemented in Rainmeter as an effect - even if it takes v99.999!  
From the top of my head on a first look at your code, you made several mistakes, in 3 categories:

1) Visibility:
Since [Container] precedes [M_Track] in the code, [M_Track:W] is not known when initially parsing the [Container] meter during during the 1st skin update at load time and is in effect 0, with subsequent skin updates not altering the result since [Container] lacks DynamicVariables=1 to be able to "see" the value of [M_Track:W] after the 1st update. This is why you don't see anything, since the container has a zero width and masks/hides everything. The solution is to reorder meters properly in the code (just think logically what would you draw first on a piece of paper, cause the order matters in the code): M_Shape first as the background, then Container with its W=[M_Shape:W] or some other hardcoded value at your choosing and dynamic variables if using the former, then the other meters showing the track / artist / album (careful here, because the way you set their Y options makes them overlap one another, so try adding something in those Y formulas or use relative positioning like Y=10R or something to place them at some distance based on the previous meter's similar coordinates)

2) Animation:
Not using or removing an ActionTimer measure from the original code that's using it to increment positional values very frequently to generate the appearance of "moving" will effectively lack any animation whatsoever - it's like removing or disabling an engine from a car and expecting it to still drive you where you need to. I know, you know nothing of ActionTimer, so I suppose you want to do this using a low skin update rate... but you lack that too: I don't see an Update=32 in the [Rainmeter] section from your code, to make stuff happen in "fast forward / motion", so to speak (the way most classic animation work, in both anime, television or computers), and that AnimationSpeed variable is useless if you don't add it in the proper places, like as the value of your skin update, e.g. Update=#AnimationSpeed# in the [Rainmeter] section.

Even more so, not only the fast forward / motion system is missing, but you also don't have any motion in the first place, since you don't increment those #TrackX#, #ArtistX# and #AlbumX# anywhere in your code, given the fact that the ActionTimer measure that was doing it is not used. So, you need to create appropriate self-incrementing Calc measures and then use their values as the X positions for your moving meters, e.g.

Code: Select all

[TrackX]
Measure=Calc
Formula=(TrackX+1)
...
...
[M_Track]
...
X=[TrackX]
DynamicVariables=1
or alternatively, using just variables

Code: Select all

[ChangePositions]
Measure=Calc
OnUpdateAction=[!SetVariable TrackX (#TrackX#+1)]...
...
...
[M_Track]
...
X=#TrackX#
DynamicVariables=1
3) Other:
You can limit / clamp the positional values to the extent of the difference between the width of meters and the width of container directly in the Formula option of the Calcs recommended above or the !SetVariable formulas, by using (Clamp(...,0,Max(0,...))), so the Offset measures are not necessarily needed in this case. However, to replicate the "do over" effect that is repeating the incrementing when it reaches the values of those Max() constructs, you should probably use some % aka modulo formula instead of standard Clamp(), since the latter will keep the value at the max for ever when it is reached, in effect only doing the animation once. Also, in your M_Shape, it's either LeftMouseUpAction=[!UpdateMeter *][!Redraw] to update meters and redraw the skin during the same refresh/load cycle, or just LeftMouseUpAction=[!Refresh] if you really want to refresh instead and you don't care about keeping stuff in the same refresh/load cycle. It's not that it's wrong the way you wrote it, but it's pointless to update meters when you're doing a refresh anyway after that - it's like closing down your player all the times before restarting your computer, ignoring the fact that after a restart it will initially be closed anyway.

Let me know if you can figure out the changes you must do by yourself or you need some actual code sample on the above. ;-)

P.S. I doubt the singular marquee will be ever implemented as an "effect" in Rainmeter, considering that the tools for you to implement it are already implemented in Rainmeter, so to speak. It's all about the skin implementation, if you know what I mean (see what I just "implemented" here?)... :D :sly:
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth