Scripts, tutorials, and general Desktop X help
Intermediate
Published on January 3, 2007 By sViz In DesktopX Tutorials
SCROLLING TEXT

This is a step by step tutorial on how to scroll an object. You can use a regular text object to test out this tutorial

Step 1 get the object moving
Step 2 tell the object where to stop
Step 3 repeat
Step 4 downsize, scroll within a small space
Step 5 feel free to get creative

All you need to do is create objects, name them, and insert the scripts in this tutorial.


STEP 1 - Making an object scroll

Make a text object.
Go to the script of your text object and insert this script. (NOTE: The object will keep scrolling off the screen, don't panic.)

Sub Object_OnScriptEnter
'--Set the starting position in the middle of your screen.
object.top = system.screenheight/2
object.left = system.screenwidth/ 2
‘—Set a timer
object.settimer 1, 10
End Sub

Sub object_ontimer1
'--Move object back 2 pixels everytime the timer fires
object.left= object.left - 2
End Sub


STEP 2- Giving your object boundaries

We want to stop the object when it reaches the edge of the screen.


Sub Object_OnScriptEnter
'--Set the starting position in the middle of your screen.
object.top = system.screenheight/2
object.left = system.screenwidth/ 2
object.settimer 1, 10
End Sub

Sub object_ontimer1
'--If object has reached screen edge stop
If object.left <= 0 then
object.killtimer 1
'--If object has not reached screen edge keep moving
Else
object.left= object.left - 2
End If
End Sub

STEP 3- Scrolling in a loop

We want to make the object go back to the starting position and keep scrolling in a loop.
This time we'll declare the starting positions as variables and use them to set the object's position.

Dim startposX
Dim startposY

startposX = system.screenwidth/ 2
startposY= system.screenheight/ 2

Sub Object_OnScriptEnter
'--Set the starting position in the middle of your screen.
object.top = startposY
object.left = startposX
object.settimer 1, 10
End Sub

Sub object_ontimer1
'--If object has reached screen edge go back to starting position
If object.left <= 0 then
Object.left = startposX
End If
'--Move object back 2 pixels everytime the timer fires
object.left= object.left - 2
End Sub


STEP 4- Small scale scrolling

Now that we're getting the hang of the art of scrolling, let's downsize it to scroll in a smaller area.
This is useful for RSS feeds or media player information.
We need to create another object. Call it "maskobject". Use a plain image. Make it 200 W x 30 H.
Now position the text object inside the mask.
Next go to the text object's properties and set the parent to the mask.

You should have this:



Okay, now for the script.
We want to make it wait before starting to scroll.
We need to make sure the text is completely out of view before starting over.
We need to set a new 'start over' position.

Dim startposX
Dim startposY
Dim startoverpos

startposX = desktopx.object("maskobject").width/2 - object.width/2
startposY= desktopx.object("maskobject").height/2 - object.height/2
startoverpos= desktopx.object("maskobject").width

Sub Object_OnScriptEnter
'--Set the starting position at center of mask
object.top = startposY
object.left = startposX
object.settimer 1, 2000
End Sub

'---2 second pause before scrolling
Sub object_ontimer1
object.settimer 2, 10
object.killtimer 1
End Sub



Sub object_ontimer2
'--If object is completely out of view move to start over position
If object.right <= 0 then
Object.left = startoverpos
End If
'--Move object back 2 pixels everytime the timer fires
object.left= object.left - 2
End Sub





STEP 5- Getting Creative


PAUSE SCROLLING EACH LAP

Now, let's get creative.

Here is a script that will pause the text just before it goes out of view.
The start position is set to the left-most side of the mask.
The text moves 1 pixel at time.

Dim startposX
Dim startposY
Dim startoverpos

startposX = 2
startposY= 10
startoverpos= desktopx.object("mask").width

Sub Object_OnScriptEnter
'--Set the starting position center of mask
object.top = startposY
object.left = startposX
object.settimer 1, 10
End Sub

'---2 second pause before resuming scrolling
Sub object_ontimer2
object.killtimer 2
object.settimer 1, 10
End Sub


Sub object_ontimer1
'--Stop scrolling when object reaches left-most side
If object.left = 1 then
object.killtimer 1
object.settimer 2, 2000
End if
'--If object is completely out of view move to start over position
If object.right <= 1 then
Object.left = startoverpos
End If
'--Move object back 1 pixel everytime the timer fires
object.left= object.left - 1
End Sub



SCROLLING A GROUP

You may have more than one text object you want to scroll along the same space.
This was a challenge I came across while trying to make an RSS feed.

Create a maskobject, 200 W x 30 H.
Create a text object.

Name your text object with the name ending in the number 1.
My text object is called "info1" so when we clone it, the clones will be numbered accordingly (e.g. info2, info3 etc.). This is very important.

Make your text object’s parent the maskobject.
Next, clone your text object as many times as you want.
Group all of your text objects. Call the group "scrollinginfo".

You should have this:



Now, we need to declare how many objects are in the group.
We need to align our objects with equal spacing in between each text object.
We want to pause each object when it reaches the left-most side.
We need to send each object to the ‘end of the line’ when it’s scrolled out of view.
Insert this script into the “maskobject”

Dim startposX
Dim startposY
Dim spacing
Dim objcount

startposX = 2
startposY= 8
spacing= 50
objcount= Desktopx.GroupObjects("scrollinginfo").count

Sub Object_OnScriptEnter
'--Set the starting position and align all objects in group
For Each elem In Desktopx.GroupObjects("scrollinginfo")
elem.top = startposY
Next

For x = 1 To objcount
If x = 1 Then
Desktopx.Object(“info1”).Left = 2
Else
Desktopx.Object("info" & x).left = Desktopx.Object(“info" & x-1).right + spacing
End If
Next

Object.SetTimer 2, 2000
End Sub

'---2 second pause before resuming scrolling
Sub object_ontimer2
object.killtimer 2
object.settimer 1, 10
End Sub


Sub object_ontimer1
'--Move each object in the group
For Each elem In Desktopx.GroupObjects("scrollinginfo")
elem.left = elem.left - 1
'--If an object has scrolled out of view call function to loop the object
If elem.right < 0 Then
Call LoopText
'--Pause when an object reaches the left-most side
‘—This can be commented out if you don’t want to pause
ElseIf elem.left = startposX Then
object.KillTimer 1
object.SetTimer 2, 2000
End If
Next
End Sub

'---Function to identify object that has scrolled out of view and move it to end of the line
Function LoopText

For x= 1 To objcount
If x = 1 Then
'--If first object in group has scrolled out of view, reposition it after the last object in group
If desktopx.object("info" & x).right < 0 Then
desktopx.Object("info" & x).left = desktopx.Object("info" & objcount).right + spacing
End If
Else
'--If any other object in group has scrolled out of view, reposition it after the object that comes before it
If desktopx.Object("info" & x).right < 0 Then
desktopx.Object("info" & x).left = desktopx.Object("info" & x-1).right + spacing
End If
End If
Next
End Function





I also recommend these scrolling scripts by other coders:

Here-- Link
Here-- Link


Thanks for reading. Comments and suggestions are welcome.

"

Comments
on Jan 04, 2007
Thanks, this is a good tute. I just started to learn how to program so am still learning the basics but this should be useful.
on Jan 09, 2007
Just wanted to say thanks for the tutorial. It's great that you are taking the time to help us the new users of DesktopX to learn it internal workings. I noted that the images in this tutorial are broken, and thought you should know. The properties of the images indicate they live on msnuser.com. Unless a person has a membership to msn that person would not be able to see these images. Thought you should know....
on Jan 10, 2007
Unless a person has a membership to msn that person would not be able to see these images.


Oh,no! I didn't know that. As soon as JoeUser allows me back into my blog I'll fix it.(the site is having some issues) Thanks, MichaelG.