I think scripting will be required. I have used a technique in my last two widgets that I think works pretty well, but it is not the only solution. Also, it reverses the scroll direction when it reaches an end of the scrolling text (rather than repeating the text and scrolling in the same direction).
' InfoCrawl settings
' Initial crawl direction
Dim direction
direction = "Left"
' How many pixels to crawl each iteration
Const CRAWL_STEP = 1
' Milliseconds between iterations
Const CRAWL_TIME = 100
' Milliseconds pause between direction change
Const CRAWL_PAUSE = 750
Dim dxCrawlText, dxCrawlCont
Set dxCrawlText = DesktopX.Object("Crawl_Text")
Set dxCrawlCont = DesktopX.Object("Crawl_Container")
' Called when the script is executed
Sub Object_OnScriptEnter
' The text string can be (re)set at any time.
dxCrawlText.Text = "A long string of text that will scroll"
' I like to reset the crawl position too. May not be strictly neccessary
dxCrawlText.Left = 0
Object.SetTimer 444, CRAWL_TIME
End Sub
' Move text Timer
Sub Object_OnTimer444
Select Case direction
Case "Left"
' Has end of text become fully visible?
If dxCrawlText.Right <= dxCrawlCont.Width Then
' Then Pause and reverse
Object.KillTimer 444
direction = "Right"
Object.SetTimer 777, CRAWL_PAUSE
' Needs to be moved some more
Else
dxCrawlText.Left = dxCrawlText.Left - CRAWL_STEP
End If
Case "Right"
' Has beginning of text become fully visible?
If dxCrawlText.Left >= 0 Then
' Then Pause and reverse
Object.KillTimer 444
direction = "Left"
Object.SetTimer 777, CRAWL_PAUSE
' Needs to be moved some more
Else
dxCrawlText.Left = dxCrawlText.Left + CRAWL_STEP
End If
End Select
End Sub
' Crawl text pause between directions
Sub Object_OnTimer777
Object.KillTimer 777
Object.SetTimer 444, CRAWL_TIME
End Sub
Sub Object_OnScriptExit
Object.KillTimer 444
Object.KillTimer 777
Set dxCrawlText = Nothing
Set dxCrawlCont = Nothing
End Sub
The general idea is to set the text object as a contained child of another (non-text) object, then move it a certain direction until conditions are met, and reverse.
Because the text is a contained child of another object, you can set the viewable area by setting the size of the parent object (which can have a transparent image for its graphics if you wish). As the text extends outside those boundries it will become invisible.
Scrolling continously in a single direction would use a similar approach of using a timer to move the text, checking a condition at each step (Has the text been moved completely outside the parent?). But I think you'll need a second, identical text object, so that as one scrolls off it can leap-frog the other and be ready to scroll on again.
Depending on the situation, you may also want to check and include behavior (such as stopping the timers) if the text string is so short it fits entirely within the viewable area.