分是够少的,不过分好象没什麽用。 这是在www.21code.com找到的Option ExplicitPrivate Const EM_CHARFROMPOS& = &HD7 Private Type POINTAPI X As Long Y As Long End TypePrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long' Return the word the mouse is over. Public Function RichWordOver(rtf As RichTextBox, X As Single, Y As Single) As String Dim pt As POINTAPI Dim pos As Integer Dim start_pos As Integer Dim end_pos As Integer Dim ch As String Dim txt As String Dim txtlen As Integer ' 把位置坐标转换为像素. pt.X = X \ Screen.TwipsPerPixelX pt.Y = Y \ Screen.TwipsPerPixelY ' Get the character number pos = SendMessage(rtf.hWnd, EM_CHARFROMPOS, 0&, pt) If pos <= 0 Then Exit Function '查找单词的开始位置. txt = rtf.Text For start_pos = pos To 1 Step -1 ch = Mid$(rtf.Text, start_pos, 1) ' 允许数字,字母,下划线 If Not ( _ (ch >= "0" And ch <= "9") Or _ (ch >= "a" And ch <= "z") Or _ (ch >= "A" And ch <= "Z") Or _ ch = "_" _ ) Then Exit For Next start_pos start_pos = start_pos + 1 '查找单词的结尾 txtlen = Len(txt) For end_pos = pos To txtlen ch = Mid$(txt, end_pos, 1) ' 允许数字,字母,下划线 If Not ( _ (ch >= "0" And ch <= "9") Or _ (ch >= "a" And ch <= "z") Or _ (ch >= "A" And ch <= "Z") Or _ ch = "_" _ ) Then Exit For Next end_pos end_pos = end_pos - 1 If start_pos <= end_pos Then _ RichWordOver = Mid$(txt, start_pos, end_pos - start_pos + 1) End FunctionPrivate Sub Form_Load() rtfTest.Text = "Welcome to use source code provided by Alp Studio" & _ vbCrLf & vbCrLf & "This example program is provided as is with no warranty of any kind" & _ vbCrLf & vbCrLf & "Send the control the EM_CHARFROMPOS message to make it return the character closest to the mouse position." & _ vbCrLf & vbCrLf & "http://dropwater.163.net" End SubPrivate Sub rtftest_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim txt As String txt = RichWordOver(rtfTest, X, Y) If lblCurrentWord.Caption <> txt Then _ lblCurrentWord.Caption = txt End Sub
这是在www.21code.com找到的Option ExplicitPrivate Const EM_CHARFROMPOS& = &HD7
Private Type POINTAPI
X As Long
Y As Long
End TypePrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long' Return the word the mouse is over.
Public Function RichWordOver(rtf As RichTextBox, X As Single, Y As Single) As String
Dim pt As POINTAPI
Dim pos As Integer
Dim start_pos As Integer
Dim end_pos As Integer
Dim ch As String
Dim txt As String
Dim txtlen As Integer ' 把位置坐标转换为像素.
pt.X = X \ Screen.TwipsPerPixelX
pt.Y = Y \ Screen.TwipsPerPixelY ' Get the character number
pos = SendMessage(rtf.hWnd, EM_CHARFROMPOS, 0&, pt)
If pos <= 0 Then Exit Function '查找单词的开始位置.
txt = rtf.Text
For start_pos = pos To 1 Step -1
ch = Mid$(rtf.Text, start_pos, 1)
' 允许数字,字母,下划线
If Not ( _
(ch >= "0" And ch <= "9") Or _
(ch >= "a" And ch <= "z") Or _
(ch >= "A" And ch <= "Z") Or _
ch = "_" _
) Then Exit For
Next start_pos
start_pos = start_pos + 1 '查找单词的结尾
txtlen = Len(txt)
For end_pos = pos To txtlen
ch = Mid$(txt, end_pos, 1)
' 允许数字,字母,下划线
If Not ( _
(ch >= "0" And ch <= "9") Or _
(ch >= "a" And ch <= "z") Or _
(ch >= "A" And ch <= "Z") Or _
ch = "_" _
) Then Exit For
Next end_pos
end_pos = end_pos - 1 If start_pos <= end_pos Then _
RichWordOver = Mid$(txt, start_pos, end_pos - start_pos + 1)
End FunctionPrivate Sub Form_Load()
rtfTest.Text = "Welcome to use source code provided by Alp Studio" & _
vbCrLf & vbCrLf & "This example program is provided as is with no warranty of any kind" & _
vbCrLf & vbCrLf & "Send the control the EM_CHARFROMPOS message to make it return the character closest to the mouse position." & _
vbCrLf & vbCrLf & "http://dropwater.163.net"
End SubPrivate Sub rtftest_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim txt As String txt = RichWordOver(rtfTest, X, Y)
If lblCurrentWord.Caption <> txt Then _
lblCurrentWord.Caption = txt
End Sub