|
Language: VB4/32,VB5,VB6 Expertise: Intermediate
Mar 31, 2001
TextBoxGetLineColumn - Get caret position in a multiline TextBox control
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
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBB
' Get the line/column coordinates of a given character (both are zero-based).
' If charIndex is negative, it returns the coordinates of the caret
Sub TextBoxGetLineColumn(tb As TextBox, ByVal charIndex As Long, line As Long, _
column As Long)
If charIndex < 0 Then charIndex = tb.SelStart
' Get the line number.
line = SendMessage(tb.hwnd, EM_LINEFROMCHAR, charIndex, ByVal 0&)
' Get the column number by subtracting the line's start
' index from the caret position
column = tb.SelStart - SendMessage(tb.hwnd, EM_LINEINDEX, line, ByVal 0&)
End Sub
Francesco Balena
|