Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.Runtime.InteropServices
- '------------------
- 'Creator: aeonhack
- 'Site: nimoru.com
- 'Created: 6/14/2013
- 'Changed: 6/14/2013
- 'Version: 1.0.0.0
- '------------------
- Public Class BetterRichTextBox
- Inherits RichTextBox
- <DllImport("user32.dll")> _
- Private Shared Function SendMessage( _
- ByVal handle As IntPtr, _
- ByVal message As Integer, _
- ByVal wParam As Integer, _
- ByVal lParam As Integer) As IntPtr
- End Function
- <DllImport("user32.dll", EntryPoint:="GetScrollInfo")> _
- Private Shared Function GetScrollInfo(
- ByVal handle As IntPtr, _
- ByVal bar As Integer, _
- ByRef info As SCROLLINFO) As Boolean
- End Function
- <StructLayout(LayoutKind.Sequential)> _
- Private Structure SCROLLINFO
- Public size As UInteger
- Public mask As UInteger
- Public min As Integer
- Public max As Integer
- Public page As Integer
- Public position As Integer
- Public trackPosition As Integer
- End Structure
- Private Scroll As SCROLLINFO
- Private Function ScrolledToBottom() As Boolean
- Scroll = New SCROLLINFO()
- Scroll.size = CUInt(Marshal.SizeOf(Scroll))
- Scroll.mask = 7
- If Not GetScrollInfo(Handle, 1, Scroll) Then Return True
- Return (Scroll.page = 0) OrElse ((Scroll.page + Scroll.position) >= Scroll.max)
- End Function
- Public Overloads Sub AppendText(ByVal color As Color, ByVal text As String)
- Dim Focus As Boolean = Focused
- Dim SelectionStart As Integer = Me.SelectionStart
- Dim SelectionLength As Integer = Me.SelectionLength
- Dim AutoScroll As Boolean = ScrolledToBottom()
- If Not AutoScroll Then
- If Focus Then Parent.Focus()
- SendMessage(Handle, 1087, 1, 0) 'Hide selection, prevents auto-scrolling
- End If
- Me.SelectionStart = TextLength
- Me.SelectionLength = 0
- Me.SelectionColor = color
- Me.AppendText(text)
- Me.SelectionColor = ForeColor
- Me.SelectionStart = SelectionStart
- Me.SelectionLength = SelectionLength
- If AutoScroll Then
- SendMessage(Handle, 277, 7, 0) 'Reliably scroll to bottom
- Else
- SendMessage(Handle, 1087, 0, 0) 'Unhide selection
- If Focus Then Me.Focus()
- End If
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement