文本框中光标位置的获得
2006-02-27 21:08:54 来源:WEB开发网首先,在Form中添加一个文本框(TextBox),将其MultiLine属性设置为True,以便输入多行文本;再在Form中添加两个标题栏(Label),以便显示光标位置;然后,在Form的代码窗口中添加程序中的代码。
OptionExplici
ConstEM_GETSEL=&HB0
ConstEM_LINEFROMCHAR=&HC9
ConstEM_LINEINDEX=&HBB
PRivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
PublicSubGetCaretPos(ByValTextHwndAsLong,LineNoAsLong,ColNoAsLong)
DimIAsLong,jAsLong
DimlParamAsLong,wParamAsLong
DimkAsLong
'首先向文本框传递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
EndSub
PrivateSubForm_Load()
DimLineNoAsLong,ColNoAsLong
CallGetCaretPos(Text1.hwnd,LineNo,ColNo)
Label1.Caption=LineNo
Label2.Caption=ColNo
EndSub
PrivateSubForm_Resize()
Text1.Width=Me.ScaleWidth
EndSub
PrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
DimLineNoAsLong,ColNoAsLong
CallGetCaretPos(Text1.hwnd,LineNo,ColNo)
Label1.Caption=LineNo
Label2.Caption=ColNo
EndSub
PrivateSubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimLineNoAsLong,ColNoAsLong
CallGetCaretPos(Text1.hwnd,LineNo,ColNo)
Label1.Caption=LineNo
Label2.Caption=ColNo
EndSub
(程序)
运行上面的程序,在TextBox中输入字符或者按控制键来移动光标时,你可以看到屏幕下面的Label中就能显示出的光标所在的位置。以上程序在Win95,VB5.0下运行通过。
->更多精彩
赞助商链接