devxlogo

Set tab stop positions for a multiline TextBox control

Set tab stop positions for a multiline TextBox control

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:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _    hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _    lParam As Any) As LongConst EM_SETTABSTOPS = &HCB' Set tab stops at character position 5, 10, and 20Dim tabs(2) As Longtabs(0) = 5 * 4tabs(1) = 10 * 4tabs(2) = 20 * 4SendMessage Text1.hWnd, EM_SETTABSTOPS, 3, tabs(0)

The following routine encapsulates this call for you:

' 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:

' Set the tab stop distance, expressed in dialog units.Sub TextBoxSetTabStopDistance(tb As TextBox, ByVal distance As Long)    SendMessage tb.hwnd, EM_SETTABSTOPS, 1, distanceEnd Sub

See also  Professionalism Starts in Your Inbox: Keys to Presenting Your Best Self in Email
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist