Better Way For Scrolling Text

I have scrolling text set with a timer which adds previous text viewed to the screen plus adding one character during each timer event. Unfortunately, the refresh is noticeable in spurts...resulting in a sporatic blinking every so often. Is there a fix or a better way to gradually display text(scrolling) to a form?

Public Sub TextEffect(obj As Object, ByVal sText As String, ByVal lX As Long, ByVal lY As Long, Optional ByVal bLoop As Boolean = False, Optional ByVal lStartSpacing As Long = 128, Optional ByVal lEndSpacing As Long = -1, Optional ByVal oColor As OLE_COLOR = vbWindowText)
' *** Kerning describes the spacing between characters when a font is written out.
' *** By default, fonts have a preset default kerning, but this very easy to modify
' *** under the Win32 API.

' *** The following (rather unusally named?) API function is all you need:

' *** By setting nCharExtra to a negative value, you bring the characters closer together,
' *** and by setting to a positive values the characters space out.
' *** It works with VB's print methods too.

Dim lHDC As Long
Dim i As Long
Dim X As Long
Dim lLen As Long
Dim hBrush As Long
Static tR As RECT
Dim iDir As Long
Dim bNotFirstTime As Boolean
Dim lTime As Long
Dim lIter As Long
Dim bSlowDown As Boolean
Dim lCOlor As Long
Dim bDoIt As Boolean

Do While bDoIt
lTime = timeGetTime
If (i < -3) And Not (bLoop) And Not (bSlowDown) Then
bSlowDown = True
iDir = 1
lIter = (i + 4)
End If
If (i > 128) Then iDir = -1
If Not (bLoop) And iDir = 1 Then
If (i = lEndSpacing) Then
' STop
bDoIt = False
Else
lIter = lIter - 1
If (lIter <= 0) Then
i = i + iDir
lIter = (i + 4)
End If
End If
Else
i = i + iDir
End If

As much as I was impressed with your demo of text animation, it just doesn't work well with the application I am developing. Unfortunately, what I want to do with Visual Basic would be a cinch if I were programming an Active Server Page (due to availabiltiy of multi-line marquee controls available for the web).

I am rejecting the answer due to the fact that my question about the flickering still remains.

Instead of refreshing the screen on every character, refresh only after a line or a preset "cache" of characters.
'use an invisible textbox for a temp cache.
'Create 2 textboxes and make one invisible.
form.text1.visible = false
form.text2.visible = true
'set the multiline property to true.
'send all characters to the invisible textbox first
'create a counter to count characters as they are written to the 'invisible textbox.
global incount as integer
'increment the count on every character.
form.text1.seltext = yourcharacter
incount = incount + 1
'display the "cached" characters when enough have passed.
if incount > 10 then
form.text2.seltext = form.text1.text
form.text1.text = " " 'clear the cache.
incount = 0 'reset the counter
end if

This is very simple and overhead is low.
Just by setting the incount to a max of 2 will reduce screen refreshes by 50 %.
Or you can trigger the screen update with a special character such as "." or "*" or any character you chose:

Background
What I'm presenting in this article is the result of 2 conditions in my work area:
We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…

You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…

Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code.
This l…