Atlanta Custom Software Development 

   Search        Code/Page

User Login



Forgot the Password?
» Web Development
» Maintenance
» Data Integration/BI
» Information Management
» Regular Expr Tester
» Free Tools

Set tab stop positions for a multiline TextBox control

Total Hit ( 1948)

Rate this article:     Poor     Excellent 

 Submit Your Question/Comment about this article



By default, multiline TextBox controls insert a tab stop position every 8 characters; in other words, if you press the Ctrl+Tab key while the focus is inside a multiline TextBox control, the caret advances to position 8,16,24, etc. (If the TextBox is the only control on the form that can receive the focus in that moment, you can also advance to the next tab stop with the Tab key.)

By sending the control a EM_SETTABSTOPS message, you can set individual tab stops at desired positions. You do so by loading an array of Longs with the position of individual tab stops, expressed in dialog units - where each dialog unit is 1/4 of the average character width. Then you pass the array to the SendMessage function, specifying the number of elements in wParam and the first element of the array in lParam. Here's an example:

Click here to copy the following block
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
  hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
  lParam As Any) As Long

' Set tab stops at character position 5, 10, and 20
Dim tabs(2) As Long
tabs(0) = 5 * 4
tabs(1) = 10 * 4
tabs(2) = 20 * 4
SendMessage Text1.hWnd, EM_SETTABSTOPS, 3, tabs(0)

The following routine encapsulates this call for you:

Click here to copy the following block
' Set tab stops. Each element of the array is expressed in dialog units,
' where each dialog unit is 1/4 of the average character width.

Sub TextBoxSetTabStops(tb As TextBox, tabStops() As Long)
  Dim numEls As Long
  numEls = UBound(tabStops) - LBound(tabStops) + 1
  SendMessage tb.hwnd, EM_SETTABSTOPS, numEls, tabStops(LBound(tabStops))
End Sub

The simplest case is when all the tab stops have the same distance, in which case you can use the following routine:

Click here to copy the following block
' Set the tab stop distance, expressed in dialog units.

Sub TextBoxSetTabStopDistance(tb As TextBox, ByVal distance As Long)
  SendMessage tb.hwnd, EM_SETTABSTOPS, 1, distance
End Sub

Submitted By : Nayan Patel  (Member Since : 5/26/2004 12:23:06 PM)

Job Description : He is the moderator of this site and currently working as an independent consultant. He works with, SQL Server and other MS technologies. He is, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting.
View all (893) submissions by this author  (Birth Date : 7/14/1981 )

Home   |  Comment   |  Contact Us   |  Privacy Policy   |  Terms & Conditions   |  BlogsZappySys

© 2008 BinaryWorld LLC. All rights reserved.