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

headbutcher 2003-10-16 08:32:20
请问如何实时的获得光标在文本框中的行数及列数?
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyl910 2003-10-17
  • 打赏
  • 举报
回复
得到位置很简单,发送编辑框消息(EM_……)就行了
(现在在网吧上网,没有MSDN,不好写代码)

实时的获得就有点麻烦了(这是VB设计体系的问题),需要用SubClass技术处理编辑框的消息,在 键盘、鼠标、复制粘贴 消息处理后 重新度取 位置

goodname008 2003-10-17
  • 打赏
  • 举报
回复
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 Long

Const 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 Sub

Private 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
headbutcher 2003-10-17
  • 打赏
  • 举报
回复
老兄啊,那两张网页上面好像都是说怎样读取任意行的内容,可我是要实时的获得光标的位置,这两样好像不同吧。我不懂啊!望明示啊!
踏平扶桑 2003-10-17
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2318/2318803.xml?temp=.959942
http://expert.csdn.net/Expert/topic/2250/2250384.xml?temp=.6102869
qdubit 2003-10-17
  • 打赏
  • 举报
回复
关注!

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧