locked
Как сделать сглаживание прокрутки в RichTextBox? RRS feed

  • Общие обсуждения

  • Попробуйте воспользоваться двумя функциями Winows API: GetScrollPos и PostMessage. Функция GetScrollPos используется для получения текущей позиции RichTextBox, PostMessage используется для помещения сообщения о прокрутке в очередь сообщений, ассоциированную с потоком, который создал окно.

    Code Block
        <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="PostMessage")> _
        Public Shared Function PostMessage(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
        End Function
     
        <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetScrollPos")> _
        Public Shared Function GetScrollPos(ByVal hwnd As Integer, ByVal nBar As Integer) As Integer
        End Function
        Public Const WM_VSCROLL As Integer = 277
        Public Const SB_THUMBPOSITION As Integer = 4
        Public Const SBS_VERT As Integer = 1
     
        Private previousPos As Integer = 0
     
        Private Sub RTBAutoScroll_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            Me.RichTextBox1.[Select](0, 0)
            Me.RichTextBox1.ScrollToCaret()
            Me.Timer1.Interval = 300
            AddHandler Me.Timer1.Tick, AddressOf timer1_Tick
     
            Dim td As New DateTime()
            Me.Text = td.ToString()
        End Sub
     
        Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
            Dim currentPos As Integer = GetScrollPos(CInt(Me.richTextBox1.Handle), SBS_VERT)
            If previousPos <> currentPos OrElse currentPos = 0 Then
                previousPos = currentPos
                PostMessage(CInt(Me.richTextBox1.Handle), WM_VSCROLL, SB_THUMBPOSITION + 65536 * (currentPos + 1), 0)
            End If
        End Sub
     
        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If Button1.Text = "Auto Scroll" Then
                Button1.Text = "Pause"
                Timer1.Enabled = True
            ElseIf Button1.Text = "Pause" Then
                Button1.Text = "Auto Scroll"
                Timer1.Enabled = False
            End If
                End Sub
    


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 23:24 MSDN Forums consolidation (От:Разработка Windows-приложений)
    24 марта 2010 г. 15:54
    Модератор