请问如何实时的获得光标在文本框中的行数及列数?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2318/2318803.xml?temp=.959942
    http://expert.csdn.net/Expert/topic/2250/2250384.xml?temp=.6102869
      

  2.   

    Option Explicit
    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_GETSEL = &HB0
    Const EM_LINEFROMCHAR = &HC9
    Const EM_LINEINDEX = &HBB' 获得文本框中光标的所在位置
    ' hwnd 为文本框的句柄, LineNo 为光标所在的行数, ColNo 为光标所在的列数
    Sub GetTextCursorPos(ByVal hwnd As Long, ByRef LineNo As Long, ByRef ColNo As Long)
    Dim i As Long, j As Long, k As Long
    Dim lParam As Long, wParam As Long
    i = SendMessage(hwnd, EM_GETSEL, wParam, lParam)
    j = i / 2 ^ 16                                      '取得目前光标前面有多少个字节
    LineNo = SendMessage(hwnd, EM_LINEFROMCHAR, j, 0)   '取得前面有多少行
    LineNo = LineNo + 1
    k = SendMessage(hwnd, EM_LINEINDEX, -1, 0)          '取得目前光标所在行前面有多少个字节
    ColNo = j - k + 1
    End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim LineNo As Long, ColNo As Long
    GetTextCursorPos Text1.hwnd, LineNo, ColNo
    Debug.Print LineNo, ColNo
    End Sub
      

  3.   

    得到位置很简单,发送编辑框消息(EM_……)就行了
    (现在在网吧上网,没有MSDN,不好写代码)实时的获得就有点麻烦了(这是VB设计体系的问题),需要用SubClass技术处理编辑框的消息,在 键盘、鼠标、复制粘贴 消息处理后 重新度取 位置