文本框中光标位置的获得
首先,在Form中添加一个文本框(TextBox),将其MultiLine属性设置为True,以便输入多行文本;再在Form中添加两个标题栏(Label),以便显示光标位置;然后,在Form的代码窗口中添加程序中的代码。
Option Explici
Const EM_GETSEL = &HB0
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBB
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
Public Sub GetCaretPos(ByVal TextHwnd As Long, LineNo As Long, ColNo As Long)
Dim I As Long, j As Long
Dim lParam As Long, wParam As Long
Dim k As Long
''首先向文本框传递EM_GETSEL消息以获取从起始位置到
''光标所在位置的字符数
I = SendMessage(TextHwnd, EM_GETSEL, wParam, lParam)
j = I / 2 ^ 16
''再向文本框传递EM_LINEFROMCHAR消息根据获得的字符
''数确定光标以获取所在行数
LineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, 0)
LineNo = LineNo + 1
''向文本框传递EM_LINEINDEX消息以获取所在列数
k = SendMessage(TextHwnd, EM_LINEINDEX, -1, 0)
ColNo = j - k + 1
End Sub
Private Sub Form_Load()
Dim LineNo As Long, ColNo As Long
Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub
Private Sub Form_Resize()
Text1.Width = Me.ScaleWidth
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim LineNo As Long, ColNo As Long
Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim LineNo As Long, ColNo As Long
Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub
(程序)
运行上面的程序,在TextBox中输入字符或者按控制键来移动光标时,你可以看到屏幕下面的Label中就能显示出的光标所在的位置。以上程序在Win 95,VB 5.0下运行通过。
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论