Eventuell hilft Dir das weiter:
Public Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const SB_VERT = 1
Public Const EM_GETRECT = &HB2
Public Const EM_GETSEL = &HB0
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINELENGTH = &HC1
Public Const EM_GETFIRSTVISIBLELINE = &HCE
Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_SCROLLCARET = &HB7
Public Const EM_UNDO = &HC7
Public Const EM_GETLINE = &HC4
Public Const EM_SCROLL = &HB5
Public Const EM_SETTABSTOPS = &HCB
Public Enum RichInfo
RichVisibleLines = 1
RichFirstVisibleLine = 2
RichCurrentLineNo = 3
RichCursorPosition = 4
RichCurrentLineFirstChar = 5
RichCurrentLineLength = 6
RichLineCount = 7
RichLineText = 8
End Enum
Public Function visiblelinescount(incontrol As RichTextBox)
Dim FirstVisibleLine As Long
Dim r As RECT
Dim numberOfLines As Long
Dim numberOfVisibleLines As Long
Dim rectHeight As Long
Dim lineHeight As Long
FirstVisibleLine = SendMessage(incontrol.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
numberOfLines = SendMessage(incontrol.hwnd, EM_GETLINECOUNT, 0, 0)
SendMessage incontrol.hwnd, EM_GETRECT, 0, r
rectHeight = r.Bottom - r.Top
lineHeight = incontrol.Parent.TextHeight("W") / Screen.TwipsPerPixelY
numberOfVisibleLines = rectHeight / lineHeight
If numberOfVisibleLines > numberOfLines Then
numberOfVisibleLines = numberOfLines
End If
visiblelinescount = numberOfVisibleLines - 1
End Function
Public Function GetRichData(Rich As RichTextBox, Getdata As RichInfo)
Dim FirstVisibleLine As Long
Dim VislibleLines As Long
Dim CurrentLine As Long
Dim CursorPos As Long
Dim nLine As Long
Dim FirstChar As Long
Dim RowLength As Long
Dim Buffer() As Byte
Dim LineText As String
Dim Lines() As String
Dim numberOfLines As Long
VisibleLines = visiblelinescount(Rich)
FirstVisibleLine = SendMessage(Rich.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
CursorPos = SendMessage(Rich.hwnd, EM_GETSEL, 0, ByVal 0&) \ 65536
nLine = SendMessage(Rich.hwnd, EM_LINEFROMCHAR, CursorPos, ByVal 0&)
FirstChar = SendMessage(Rich.hwnd, EM_LINEINDEX, nLine, ByVal 0&)
RowLength = SendMessage(Rich.hwnd, EM_LINELENGTH, FirstChar, ByVal 0&)
numberOfLines = SendMessage(Rich.hwnd, EM_GETLINECOUNT, 0, 0)
ReDim Buffer(RowLength + 1)
Buffer(0) = RowLength + 1
SendMessage Rich.hwnd, EM_GETLINE, nLine, Buffer(0)
LineText = Left$(StrConv(Buffer, vbUnicode), RowLength)
Select Case Getdata
Case 1
GetRichData = VisibleLines
Case 2
GetRichData = FirstVisibleLine
Case 3
GetRichData = nLine
Case 4
GetRichData = CursorPos
Case 5
GetRichData = FirstChar
Case 6
GetRichData = RowLength
Case 7
GetRichData = numberOfLines
Case 8
GetRichData = LineText
Case Else
GetRichData = "This should not happen!! Try Again!!"
End Select
End Function Hier bekommst Du eigentlich alle Daten, die Du dazu brauchst.
Musst nur noch die Zeilen hochscrollen.
Gruß
Holger

|