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

Share the Post:
data observability

Data Observability Explained

Data is the lifeblood of any successful business, as it is the driving force behind critical decision-making, insight generation, and strategic development. However, due to its intricate nature, ensuring the

Heading photo, Metadata.

What is Metadata?

What is metadata? Well, It’s an odd concept to wrap your head around. Metadata is essentially the secondary layer of data that tracks details about the “regular” data. The regular

XDR solutions

The Benefits of Using XDR Solutions

Cybercriminals constantly adapt their strategies, developing newer, more powerful, and intelligent ways to attack your network. Since security professionals must innovate as well, more conventional endpoint detection solutions have evolved