当前位置:主页>Visual Basic教程>文章内容
文本框中光标位置的获得
来源: 作者: 发布时间:2007-04-29  
在很多的编辑软件中有这样一个功能,即当用户在编辑区中输入字符或者按动鼠标使得光标的位置改变时,在编辑软件下方的状态栏中就能显示出光标所在位置的行和列的值。下面就介绍如何用VB编程实现在文本框中的这一功能。

  首先,在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下运行通过。

->


 
上一篇:如何在VB中判断Windows9x的运行模式   下一篇:VB5.0中实现鼠标拖放
 
  相关文章
·如何在VB中判断Windows9x的运行模式
·VB5.0中实现鼠标拖放
·制作VB另类按钮
·VB调用C程序动态链接库的方法
·在VB中制作单独程序封面的两种方法
·在VB中异步执行程序
·用VB开发CAI软件的小经验
·VB中实现菜单分割
·VB常见问题解答(1)
·调用API函数设计ABOUT窗口
·FLIC动画文件的播放程序设计
·给应用程序添加“日积月累”对话框
 
【关闭窗口】
推荐本站资源
最新文章