在文本框里输入字符串,怎样获得光标的位置呀?
解决方案 »
- 编程打印以下图形(语言不限)
- VB6程序使用第三方组件Pdfgll.DLL编写一个函数cffd(),如果将函数cffd()在VB6中建立一个AactivX-DLL项目制作成DLL组件cffd.DLL,那么在C#中引用组件cffd.DLL编写的程序,到客户机上是否只需要cffd.DLL,
- ~~~~~~我的vb程序带MediaPlayer控件,为什么打包安装后,别人机子上的mediaplayer用不起了
- 怎样调用windows2000控制面板的"任务计划"中的“添加任务计划”,另外是否可以在VB6中调用其相关的API?
- 请问谁会用VC写一个系统级的鼠标和键盘按键Hook的dll给VB调用?
- VB中的Excel问题
- 如何让Form2成为Form1的真正子窗体?
- 哪有formulaone book(即f1book)下载即使用文档!急
- 新手初学,关于COS,SIN角度值!
- 一无所知,敬请指教!!
- VB模拟键盘输入的N种方法
- 小弟VB6.0一个百思不的其解的问题,错误提示:VB弹出菜单至少要有一个子菜单
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByRef wParam As Long, _
ByRef lParam As Long _
) As Long'得到光标所在行列数
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_LINEINDEX = &HBB
Private Const EM_GETSEL = &HB0''
''an edit control or a rich edit control
''
''
Public Function GetColRowPos(ByVal hWnd As Long, ByRef osColPos As String, ByRef osRowPos As String) As Integer
On Error GoTo GetColRowPos_Error GetColRowPos = STS_NORMAL Dim LPos As Long
Dim lX As Long
Dim lY As Long
Dim lBegin As Long
Dim lEnd As Long
osColPos = ""
osRowPos = ""
' 得到当前光标所在位置字符的序号
LPos = SendMessage(hWnd, EM_LINEINDEX, ByVal -1, ByVal 0)
' 得到指定字符序号的字符所在行数 (基于0)
lY = SendMessage(hWnd, EM_LINEFROMCHAR, ByVal LPos, ByVal 0)
' 得到所在位置的开始/结束字符序号
Call SendMessage(hWnd, EM_GETSEL, lBegin, lEnd)
lX = lBegin - LPos
If lX = 0 Then
osColPos = "0"
Else
osColPos = Format(lX, "##,###")
End If
osRowPos = Format(lY + 1, "##,###")
GoTo WayOut
GetColRowPos_Error:
gsErrModule = "GetColRowPos"
Call ErrorProc
ErrOut:
GetColRowPos = STS_ERROR
WayOut:
End Function
--------------------------
Private Sub RTxtBox1_SelChange()
Dim LsRow As String
Dim lsCol As String Call GetColRowPos(RTxtBox1.hWnd, lsCol, LsRow) StatusBar1.Panels(3).Text = LsRow
StatusBar1.Panels(4).Text = lsColEnd Sub
来定位到第几个字符的位置,但要获得不太容易也许得用API吧。
然后从列表中选出你的项目。在用selstart的属性来重新定位你的光标位置。。
Option Explicit
Const EM_GETSEL = &HB0
Const EM_LINEFROMCHAR = &HC9
Const EM_LINEINDEX = &HBBPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic 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 SubPrivate Sub Form_Load()
Dim LineNo As Long, ColNo As LongCall GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End SubPrivate Sub Form_Resize()
Text1.Width = Me.ScaleWidth
End SubPrivate Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim LineNo As Long, ColNo As LongCall GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End SubPrivate Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim LineNo As Long, ColNo As LongCall GetCaretPos(Text1.hwnd, LineNo, ColNo)
Label1.Caption = LineNo
Label2.Caption = ColNo
End Sub