程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 文本框中光標位置的獲得

文本框中光標位置的獲得

編輯:VB綜合教程
在很多的編輯軟件中有這樣一個功能,即當用戶在編輯區中輸入字符或者按動鼠標使得光標的位置改變時,在編輯軟件下方的狀態欄中就能顯示出光標所在位置的行和列的值。下面就介紹如何用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下運行通過。

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved