Article ID: 147887
Article Last Modified on 7/13/2004
r& = SendMessage& (hWnd&, EM_LINESCROLL, wParam&, lParam&)
hWnd& The window handle of the text box.
wParam& Parameter not used.
lParam& The low-order 2 bytes specify the number of vertical lines to
scroll. The high-order 2 bytes specify the number of horizontal
columns to scroll. A positive value for lParam& causes text to
scroll upward or to the left. A negative value causes text to
scroll downward or to the right.
r& Indicates the number of lines actually scrolled.
The SendMessage API function requires the window handle (hWnd& above) of
the text box. To get the window handle of the text box, use the hWnd
property of the text box. For instance, if your text box's name is text1,
text1.hWnd returns the window handle of that text box. Calling SendMessage
to scroll text vertically does not require a vertical scroll bar, but the
length of text within the text box should exceed the text box height.
#If Win32 Then
Declare Function PutFocus Lib "user32" Alias "SetFocus" (ByVal _
hwnd As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As _
Integer, ByVal lParam As Long) As Long
#Else
Declare Function PutFocus% Lib "user" Alias "SetFocus" (ByVal hWd%)
Declare Function SendMessage& Lib "user" (ByVal hWd%, ByVal wMsg%, _
ByVal wParam%, ByVal lParam&)
#End If
Sub InitializeTextBox ()
Text1.Text = ""
For i% = 1 To 50
Text1.Text = Text1.Text + "This is line " + Str$(i%)
' Add 15 words to a line of text.
For j% = 1 to 10
Text1.Text = Text1.Text + " Word "+ Str$(j%)
Next j%
' Force a carriage return (CR) and linefeed (LF).
Text1.Text = Text1.Text + Chr$(13) + Chr$(10)
x% = DoEvents()
Next i%
End Sub
Sub Form_Load ()
Call InitializeTextBox
End Sub
Function ScrollText&(TextBox As Control, vLines As Integer)
#If Win32 Then
Dim Success As Long
Dim SavedWnd As Long
Dim R As Long
Const EM_LINESCROLL = &HB6
#Else
Dim Success As Integer
Dim SavedWnd As Integer
Dim R As Integer
Const EM_LINESCROLL = &H406
#End If
' Get the window handle of the control that currently has the
' focus, Command1 or Command2.
SavedWnd = Screen.ActiveControl.hwnd
Lines& = vLines
' Set the focus to the passed control (text control).
TextBox.SetFocus
' Scroll the lines.
Success = SendMessage(TextBox.hwnd, EM_LINESCROLL, 0, Lines&)
' Restore the focus to the original control, Command1 or
' Command2.
R = PutFocus(SavedWnd)
' Return the number of lines actually scrolled.
ScrollText& = Success
End Function
Sub Command1_Click ()
' Scroll text 5 vertical lines upward.
Num& = ScrollText&(Text1, 5)
End Sub
Keywords: kbhowto kbwndw kbprogramming KB147887