By sending appropriate messages to a multi-line TextBox control you can read and modify its formatting rectangle – that is, the inner portion of the control where the user can type. Modifying the size and position of this area can be useful, for example, to leave a left margin where you can add line numbers or other text markers. Here’s is the complete source code for the two routines that read and modify the formatting rectangle:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _ hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As LongPrivate Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypeConst EM_GETRECT = &HB2Const EM_SETRECT = &HB3' Get the formatting rectangle.Sub TextBoxGetRect(tb As TextBox, Left As Long, Top As Long, Right As Long, _ Bottom As Long) Dim lpRect As RECT SendMessage tb.hwnd, EM_GETRECT, 0, lpRect Left = lpRect.Left Top = lpRect.Top Right = lpRect.Right Bottom = lpRect.BottomEnd Sub' Set the formatting rectangle and refresh the control.Sub TextBoxSetRect(tb As TextBox, ByVal Left As Long, ByVal Top As Long, _ ByVal Right As Long, ByVal Bottom As Long) Dim lpRect As RECT lpRect.Left = Left lpRect.Top = Top lpRect.Right = Right lpRect.Bottom = Bottom SendMessage tb.hwnd, EM_SETRECT, 0, lpRectEnd Sub