1,453
社区成员
发帖
与我相关
我的任务
分享Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SendMessageBynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
'先定义两个API函数,上面一个是获取当前第一可见行,下面一个是将当前活动行向下滚动若干行
Private Sub FindStrFromRTxt(FindStr As String, Rtxt As RichTextBox)
'在 Rtxt 中查找 FindStr ,并把 FindStr 所在的行显示在第一可见行
Dim I As Integer
I = Rtxt.GetLineFromChar(Rtxt.Find(FindStr))
'先查找目标字符串所在的行号;注意,这个方法使用之后,当前行会从 0 行移动到目标字符串所在行
'但是目标字符串所在行(当前活动行)是在最后一个可见行,而不是第一个(要是那样的话,下面就不用做了)
Dim RTxtFirstVisibleLine As Integer
RTxtFirstVisibleLine = SendMessage(Rtxt.hwnd, &HCE, 0, 0&)
'获取当前第一可见行位置
SendMessageBynum Rtxt.hwnd, &HB6, 0, I - RTxtFirstVisibleLine '向下滚动i行
'把当前行向下移动 I - RTxtFirstVisibleLine,其实 I - RTxtFirstVisibleLine 就是一页可见行的行数
'相当于把当前页向下翻一页少一行,从而让查找字符串从最后一个可见行移动到第一个可见行
End Sub