Files
2026-08-27 11:04:21 -06:00

5750 lines
189 KiB
VB.net

Option Strict On
Imports System.Drawing.Text
Imports System.Drawing.Drawing2D
Imports System.ComponentModel
'' DO NOT REMOVE CREDITS! IF YOU USE PLEASE CREDIT! ''
''' <summary>
''' LogIn GDI+ Theme
''' Creator: Xertz (HF)
''' Version: 1.4
''' Control Count: 28
''' Date Created: 18/12/2013
''' Date Changed: 07/09/2014
''' UID: 1602992
''' For any bugs / errors, PM me.
''' </summary>
''' <remarks></remarks>
Module DrawHelpers
#Region "Functions"
Public Function RoundRectangle(ByVal Rectangle As Rectangle, ByVal Curve As Integer) As GraphicsPath
Dim P As GraphicsPath = New GraphicsPath()
Dim ArcRectangleWidth As Integer = Curve * 2
P.AddArc(New Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90)
P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90)
P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90)
P.AddArc(New Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90)
P.AddLine(New Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), New Point(Rectangle.X, Curve + Rectangle.Y))
Return P
End Function
Public Function RoundRect(x!, y!, w!, h!, Optional r! = 0.3, Optional TL As Boolean = True, Optional TR As Boolean = True, Optional BR As Boolean = True, Optional BL As Boolean = True) As GraphicsPath
Dim d! = Math.Min(w, h) * r, xw = x + w, yh = y + h
RoundRect = New GraphicsPath
With RoundRect
If TL Then .AddArc(x, y, d, d, 180, 90) Else .AddLine(x, y, x, y)
If TR Then .AddArc(xw - d, y, d, d, 270, 90) Else .AddLine(xw, y, xw, y)
If BR Then .AddArc(xw - d, yh - d, d, d, 0, 90) Else .AddLine(xw, yh, xw, yh)
If BL Then .AddArc(x, yh - d, d, d, 90, 90) Else .AddLine(x, yh, x, yh)
.CloseFigure()
End With
End Function
Enum MouseState As Byte
None = 0
Over = 1
Down = 2
Block = 3
End Enum
#End Region
End Module
Public Class LogInThemeContainer
Inherits ContainerControl
#Region "Declarations"
Private _CloseChoice As __CloseChoice = __CloseChoice.Form
Private _FontSize As Integer = 12
Private ReadOnly _Font As Font = New Font("Segoe UI", _FontSize)
Private MouseXLoc As Integer
Private MouseYLoc As Integer
Private CaptureMovement As Boolean = False
Private Const MoveHeight As Integer = 35
Private MouseP As Point = New Point(0, 0)
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
Private _BaseColour As Color = Color.FromArgb(35, 35, 35)
Private _ContainerColour As Color = Color.FromArgb(54, 54, 54)
Private _BorderColour As Color = Color.FromArgb(60, 60, 60)
Private _HoverColour As Color = Color.FromArgb(42, 42, 42)
#End Region
#Region "Size Handling"
Private _LockWidth As Integer
Protected Property LockWidth() As Integer
Get
Return _LockWidth
End Get
Set(ByVal value As Integer)
_LockWidth = value
If Not LockWidth = 0 AndAlso IsHandleCreated Then Width = LockWidth
End Set
End Property
Private _LockHeight As Integer
Protected Property LockHeight() As Integer
Get
Return _LockHeight
End Get
Set(ByVal value As Integer)
_LockHeight = value
If Not LockHeight = 0 AndAlso IsHandleCreated Then Height = LockHeight
End Set
End Property
Private Frame As Rectangle
Protected NotOverridable Overrides Sub OnSizeChanged(ByVal e As EventArgs)
If _Movable AndAlso Not _ControlMode Then
Frame = New Rectangle(7, 7, Width - 14, 35)
End If
Invalidate()
MyBase.OnSizeChanged(e)
End Sub
Protected Overrides Sub SetBoundsCore(ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal specified As BoundsSpecified)
If Not _LockWidth = 0 Then width = _LockWidth
If Not _LockHeight = 0 Then height = _LockHeight
MyBase.SetBoundsCore(x, y, width, height, specified)
End Sub
#End Region
#Region "State Handling"
Private State As MouseState = MouseState.None
Private Sub SetState(ByVal current As MouseState)
State = current
Invalidate()
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If Not (_IsParentForm AndAlso ParentForm.WindowState = FormWindowState.Maximized) Then
If _Sizable AndAlso Not _ControlMode Then InvalidateMouse()
End If
MyBase.OnMouseMove(e)
SetState(MouseState.Over)
End Sub
Protected Overrides Sub OnEnabledChanged(ByVal e As EventArgs)
If Enabled Then SetState(MouseState.None) Else SetState(MouseState.Block)
MyBase.OnEnabledChanged(e)
End Sub
Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs)
SetState(MouseState.Over)
MyBase.OnMouseEnter(e)
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
SetState(MouseState.Over)
MyBase.OnMouseUp(e)
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
SetState(MouseState.None)
If GetChildAtPoint(PointToClient(MousePosition)) IsNot Nothing Then
If _Sizable AndAlso Not _ControlMode Then
Cursor = Cursors.Default
Previous = 0
End If
End If
MyBase.OnMouseLeave(e)
End Sub
Private GetMouseLocation As Point
Private OldSize As Size
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left Then SetState(MouseState.Down)
If Not (_IsParentForm AndAlso ParentForm.WindowState = FormWindowState.Maximized OrElse _ControlMode) Then
If _Movable AndAlso Frame.Contains(e.Location) Then
Capture = False
WM_LMBUTTONDOWN = True
DefWndProc(Messages(0))
ElseIf _Sizable AndAlso Not Previous = 0 Then
Capture = False
WM_LMBUTTONDOWN = True
DefWndProc(Messages(Previous))
End If
End If
GetMouseLocation = PointToClient(MousePosition)
If GetMouseLocation.X > Width - 39 AndAlso GetMouseLocation.X < Width - 16 AndAlso GetMouseLocation.Y < 22 Then
If _AllowClose Then
If _CloseChoice = __CloseChoice.Application Then
Environment.Exit(0)
Else
ParentForm.Close()
End If
End If
ElseIf GetMouseLocation.X > Width - 64 AndAlso GetMouseLocation.X < Width - 41 AndAlso GetMouseLocation.Y < 22 Then
If _AllowMaximize Then
Select Case FindForm.WindowState
Case FormWindowState.Maximized
FindForm.WindowState = FormWindowState.Normal
Case FormWindowState.Normal
OldSize = Size
FindForm.WindowState = FormWindowState.Maximized
End Select
End If
ElseIf GetMouseLocation.X > Width - 89 AndAlso GetMouseLocation.X < Width - 66 AndAlso GetMouseLocation.Y < 22 Then
If _AllowMinimize Then
Select Case FindForm.WindowState
Case FormWindowState.Normal
OldSize = Size
FindForm.WindowState = FormWindowState.Minimized
Case FormWindowState.Maximized
FindForm.WindowState = FormWindowState.Minimized
End Select
End If
End If
MyBase.OnMouseDown(e)
End Sub
Private Messages(8) As Message
Private Sub InitializeMessages()
Messages(0) = Message.Create(Parent.Handle, 161, New IntPtr(2), IntPtr.Zero)
For I As Integer = 1 To 8
Messages(I) = Message.Create(Parent.Handle, 161, New IntPtr(I + 9), IntPtr.Zero)
Next
End Sub
Private GetIndexPoint As Point
Private B1, B2, B3, B4 As Boolean
Private Function GetMouseIndex() As Integer
GetIndexPoint = PointToClient(MousePosition)
B1 = GetIndexPoint.X < 6
B2 = GetIndexPoint.X > Width - 6
B3 = GetIndexPoint.Y < 6
B4 = GetIndexPoint.Y > Height - 6
If B1 AndAlso B3 Then Return 4
If B1 AndAlso B4 Then Return 7
If B2 AndAlso B3 Then Return 5
If B2 AndAlso B4 Then Return 8
If B1 Then Return 1
If B2 Then Return 2
If B3 Then Return 3
If B4 Then Return 6
Return 0
End Function
Private Current, Previous As Integer
Private Sub InvalidateMouse()
Current = GetMouseIndex()
If Current = Previous Then Return
Previous = Current
Select Case Previous
Case 0
Cursor = Cursors.Default
Case 1, 2
Cursor = Cursors.SizeWE
Case 3, 6
Cursor = Cursors.SizeNS
Case 4, 8
Cursor = Cursors.SizeNWSE
Case 5, 7
Cursor = Cursors.SizeNESW
End Select
End Sub
Private WM_LMBUTTONDOWN As Boolean
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If WM_LMBUTTONDOWN AndAlso m.Msg = 513 Then
WM_LMBUTTONDOWN = False
SetState(MouseState.Over)
If Not _SmartBounds Then Return
If IsParentMdi Then
CorrectBounds(New Rectangle(Point.Empty, Parent.Parent.Size))
Else
Try : CorrectBounds(Screen.FromControl(Parent).WorkingArea) : Catch : End Try
End If
End If
End Sub
Private Sub CorrectBounds(ByVal bounds As Rectangle)
If Parent.Width > bounds.Width Then Parent.Width = bounds.Width
If Parent.Height > bounds.Height Then Parent.Height = bounds.Height
Dim X As Integer = Parent.Location.X
Dim Y As Integer = Parent.Location.Y
If X < bounds.X Then X = bounds.X
If Y < bounds.Y Then Y = bounds.Y
Dim Width As Integer = bounds.X + bounds.Width
Dim Height As Integer = bounds.Y + bounds.Height
If X + Parent.Width > Width Then X = Width - Parent.Width
If Y + Parent.Height > Height Then Y = Height - Parent.Height
''Weird allows proper full screen
' Parent.Size = New Size(Width, Height)
If FindForm.WindowState = FormWindowState.Maximized Or FindForm.WindowState = FormWindowState.Minimized Then
Parent.Size = OldSize
End If
End Sub
Protected NotOverridable Overrides Sub OnHandleCreated(ByVal e As EventArgs)
If Not _LockWidth = 0 Then Width = _LockWidth
If Not _LockHeight = 0 Then Height = _LockHeight
If Not _ControlMode Then MyBase.Dock = DockStyle.Fill
End Sub
Protected NotOverridable Overrides Sub OnParentChanged(ByVal e As EventArgs)
MyBase.OnParentChanged(e)
If Parent Is Nothing Then Return
_IsParentForm = TypeOf Parent Is Form
If Not _ControlMode Then
InitializeMessages()
Parent.BackColor = BackColor
End If
End Sub
#End Region
#Region "Properties"
Enum __CloseChoice
Form
Application
End Enum
Public Property CloseChoice As __CloseChoice
Get
Return _CloseChoice
End Get
Set(value As __CloseChoice)
_CloseChoice = value
End Set
End Property
Private _Movable As Boolean = True
Property Movable() As Boolean
Get
Return _Movable
End Get
Set(ByVal value As Boolean)
_Movable = value
End Set
End Property
Private _Sizable As Boolean = True
Property Sizable() As Boolean
Get
Return _Sizable
End Get
Set(ByVal value As Boolean)
_Sizable = value
End Set
End Property
Private _ControlMode As Boolean
Protected Property ControlMode() As Boolean
Get
Return _ControlMode
End Get
Set(ByVal v As Boolean)
_ControlMode = v
Invalidate()
End Set
End Property
Private _SmartBounds As Boolean = True
Property SmartBounds() As Boolean
Get
Return _SmartBounds
End Get
Set(ByVal value As Boolean)
_SmartBounds = value
End Set
End Property
Private _IsParentForm As Boolean
Protected ReadOnly Property IsParentForm As Boolean
Get
Return _IsParentForm
End Get
End Property
Protected ReadOnly Property IsParentMdi As Boolean
Get
If Parent Is Nothing Then Return False
Return Parent.Parent IsNot Nothing
End Get
End Property
<Category("Control")>
Public Property FontSize As Integer
Get
Return _FontSize
End Get
Set(value As Integer)
_FontSize = value
End Set
End Property
Private _AllowMinimize As Boolean = True
<Category("Control")>
Public Property AllowMinimize As Boolean
Get
Return _AllowMinimize
End Get
Set(value As Boolean)
_AllowMinimize = value
End Set
End Property
Private _AllowMaximize As Boolean = True
<Category("Control")>
Public Property AllowMaximize As Boolean
Get
Return _AllowMaximize
End Get
Set(value As Boolean)
_AllowMaximize = value
End Set
End Property
Private _ShowIcon As Boolean = True
<Category("Control")>
Public Property ShowIcon As Boolean
Get
Return _ShowIcon
End Get
Set(value As Boolean)
_ShowIcon = value
Invalidate()
End Set
End Property
Private _AllowClose As Boolean = True
<Category("Control")>
Public Property AllowClose As Boolean
Get
Return _AllowClose
End Get
Set(value As Boolean)
_AllowClose = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property HoverColour As Color
Get
Return _HoverColour
End Get
Set(value As Color)
_HoverColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ContainerColour As Color
Get
Return _ContainerColour
End Get
Set(value As Color)
_ContainerColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
Me.DoubleBuffered = True
Me.BackColor = _BaseColour
Me.Dock = DockStyle.Fill
End Sub
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
ParentForm.FormBorderStyle = FormBorderStyle.None
ParentForm.AllowTransparency = False
ParentForm.TransparencyKey = Color.Fuchsia
ParentForm.FindForm.StartPosition = FormStartPosition.CenterScreen
Dock = DockStyle.Fill
Invalidate()
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.FillRectangle(New SolidBrush(_BaseColour), New Rectangle(0, 0, Width, Height))
.FillRectangle(New SolidBrush(_ContainerColour), New Rectangle(2, 35, Width - 4, Height - 37))
.DrawRectangle(New Pen(_BorderColour), New Rectangle(0, 0, Width, Height))
Dim ControlBoxPoints() As Point = {New Point(Width - 90, 0), New Point(Width - 90, 22), New Point(Width - 15, 22), New Point(Width - 15, 0)}
.DrawLines(New Pen(_BorderColour), ControlBoxPoints)
.DrawLine(New Pen(_BorderColour), Width - 65, 0, Width - 65, 22)
GetMouseLocation = PointToClient(MousePosition)
Select Case State
Case MouseState.Over
If GetMouseLocation.X > Width - 39 AndAlso GetMouseLocation.X < Width - 16 AndAlso GetMouseLocation.Y < 22 Then
.FillRectangle(New SolidBrush(_HoverColour), New Rectangle(Width - 39, 0, 23, 22))
ElseIf GetMouseLocation.X > Width - 64 AndAlso GetMouseLocation.X < Width - 41 AndAlso GetMouseLocation.Y < 22 Then
.FillRectangle(New SolidBrush(_HoverColour), New Rectangle(Width - 64, 0, 23, 22))
ElseIf GetMouseLocation.X > Width - 89 AndAlso GetMouseLocation.X < Width - 66 AndAlso GetMouseLocation.Y < 22 Then
.FillRectangle(New SolidBrush(_HoverColour), New Rectangle(Width - 89, 0, 23, 22))
End If
End Select
.DrawLine(New Pen(_BorderColour), Width - 40, 0, Width - 40, 22)
''Close Button
.DrawLine(New Pen(_FontColour, 2), Width - 33, 6, Width - 22, 16)
.DrawLine(New Pen(_FontColour, 2), Width - 33, 16, Width - 22, 6)
''Minimize Button
.DrawLine(New Pen(_FontColour), Width - 83, 16, Width - 72, 16)
''Maximize Button
.DrawLine(New Pen(_FontColour), Width - 58, 16, Width - 47, 16)
.DrawLine(New Pen(_FontColour), Width - 58, 16, Width - 58, 6)
.DrawLine(New Pen(_FontColour), Width - 47, 16, Width - 47, 6)
.DrawLine(New Pen(_FontColour), Width - 58, 6, Width - 47, 6)
.DrawLine(New Pen(_FontColour), Width - 58, 7, Width - 47, 7)
If _ShowIcon Then
.DrawIcon(FindForm.Icon, New Rectangle(6, 6, 22, 22))
.DrawString(Text, _Font, New SolidBrush(_FontColour), New RectangleF(31, 0, Width - 110, 35), New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near})
Else
.DrawString(Text, _Font, New SolidBrush(_FontColour), New RectangleF(4, 0, Width - 110, 35), New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near})
End If
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
<DefaultEvent("TextChanged")>
Public Class LogInUserTextBox
Inherits Control
#Region "Declarations"
Private State As MouseState = MouseState.None
Private WithEvents TB As TextBox
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
#End Region
#Region "TextBox Properties"
Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
<Category("Options")>
Property TextAlign() As HorizontalAlignment
Get
Return _TextAlign
End Get
Set(ByVal value As HorizontalAlignment)
_TextAlign = value
If TB IsNot Nothing Then
TB.TextAlign = value
End If
End Set
End Property
Private _MaxLength As Integer = 32767
<Category("Options")>
Property MaxLength() As Integer
Get
Return _MaxLength
End Get
Set(ByVal value As Integer)
_MaxLength = value
If TB IsNot Nothing Then
TB.MaxLength = value
End If
End Set
End Property
Private _ReadOnly As Boolean
<Category("Options")>
Property [ReadOnly]() As Boolean
Get
Return _ReadOnly
End Get
Set(ByVal value As Boolean)
_ReadOnly = value
If TB IsNot Nothing Then
TB.ReadOnly = value
End If
End Set
End Property
Private _UseSystemPasswordChar As Boolean
<Category("Options")>
Property UseSystemPasswordChar() As Boolean
Get
Return _UseSystemPasswordChar
End Get
Set(ByVal value As Boolean)
_UseSystemPasswordChar = value
If TB IsNot Nothing Then
TB.UseSystemPasswordChar = value
End If
End Set
End Property
Private _Multiline As Boolean
<Category("Options")>
Property Multiline() As Boolean
Get
Return _Multiline
End Get
Set(ByVal value As Boolean)
_Multiline = value
If TB IsNot Nothing Then
TB.Multiline = value
If value Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
End If
End Set
End Property
<Category("Options")>
Overrides Property Text As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
If TB IsNot Nothing Then
TB.Text = value
End If
End Set
End Property
<Category("Options")>
Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
MyBase.Font = value
If TB IsNot Nothing Then
TB.Font = value
TB.Location = New Point(3, 5)
TB.Width = Width - 35
If Not _Multiline Then
Height = TB.Height + 11
End If
End If
End Set
End Property
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If Not Controls.Contains(TB) Then
Controls.Add(TB)
End If
End Sub
Private Sub OnBaseTextChanged(ByVal s As Object, ByVal e As EventArgs)
Text = TB.Text
End Sub
Private Sub OnBaseKeyDown(ByVal s As Object, ByVal e As KeyEventArgs)
If e.Control AndAlso e.KeyCode = Keys.A Then
TB.SelectAll()
e.SuppressKeyPress = True
End If
If e.Control AndAlso e.KeyCode = Keys.C Then
TB.Copy()
e.SuppressKeyPress = True
End If
End Sub
Protected Overrides Sub OnResize(ByVal e As EventArgs)
TB.Location = New Point(5, 5)
TB.Width = Width - 35
If _Multiline Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
MyBase.OnResize(e)
End Sub
#End Region
#Region "Colour Properties"
<Category("Colours")>
Public Property BackgroundColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : TB.Focus() : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.Transparent
TB = New TextBox
TB.Height = 190
TB.Font = New Font("Segoe UI", 10)
TB.Text = Text
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
TB.MaxLength = _MaxLength
TB.Multiline = False
TB.ReadOnly = _ReadOnly
TB.UseSystemPasswordChar = _UseSystemPasswordChar
TB.BorderStyle = BorderStyle.None
TB.Location = New Point(5, 5)
TB.Width = Width - 35
AddHandler TB.TextChanged, AddressOf OnBaseTextChanged
AddHandler TB.KeyDown, AddressOf OnBaseKeyDown
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim GP As GraphicsPath
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
GP = RoundRectangle(Base, 6)
.FillPath(New SolidBrush(Color.FromArgb(42, 42, 42)), GP)
.DrawPath(New Pen(New SolidBrush(Color.FromArgb(35, 35, 35)), 2), GP)
GP.Dispose()
.FillPie(New SolidBrush(FindForm.BackColor), New Rectangle(Width - 25, Height - 23, Height + 25, Height + 25), 180, 90)
.DrawPie(New Pen(Color.FromArgb(35, 35, 35), 2), New Rectangle(Width - 25, Height - 23, Height + 25, Height + 25), 180, 90)
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
<DefaultEvent("TextChanged")>
Public Class LogInPassTextBox
Inherits Control
#Region "Declarations"
Private State As MouseState = MouseState.None
Private WithEvents TB As TextBox
Private _BaseColour As Color = Color.FromArgb(255, 255, 255)
Private _TextColour As Color = Color.FromArgb(50, 50, 50)
Private _BorderColour As Color = Color.FromArgb(180, 187, 205)
#End Region
#Region "TextBox Properties"
Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
<Category("Options")>
Property TextAlign() As HorizontalAlignment
Get
Return _TextAlign
End Get
Set(ByVal value As HorizontalAlignment)
_TextAlign = value
If TB IsNot Nothing Then
TB.TextAlign = value
End If
End Set
End Property
Private _MaxLength As Integer = 32767
<Category("Options")>
Property MaxLength() As Integer
Get
Return _MaxLength
End Get
Set(ByVal value As Integer)
_MaxLength = value
If TB IsNot Nothing Then
TB.MaxLength = value
End If
End Set
End Property
Private _ReadOnly As Boolean
<Category("Options")>
Property [ReadOnly]() As Boolean
Get
Return _ReadOnly
End Get
Set(ByVal value As Boolean)
_ReadOnly = value
If TB IsNot Nothing Then
TB.ReadOnly = value
End If
End Set
End Property
Private _UseSystemPasswordChar As Boolean
<Category("Options")>
Property UseSystemPasswordChar() As Boolean
Get
Return _UseSystemPasswordChar
End Get
Set(ByVal value As Boolean)
_UseSystemPasswordChar = value
If TB IsNot Nothing Then
TB.UseSystemPasswordChar = value
End If
End Set
End Property
Private _Multiline As Boolean
<Category("Options")>
Property Multiline() As Boolean
Get
Return _Multiline
End Get
Set(ByVal value As Boolean)
_Multiline = value
If TB IsNot Nothing Then
TB.Multiline = value
If value Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
End If
End Set
End Property
<Category("Options")>
Overrides Property Text As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
If TB IsNot Nothing Then
TB.Text = value
End If
End Set
End Property
<Category("Options")>
Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
MyBase.Font = value
If TB IsNot Nothing Then
TB.Font = value
TB.Location = New Point(3, 5)
TB.Width = Width - 35
If Not _Multiline Then
Height = TB.Height + 11
End If
End If
End Set
End Property
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If Not Controls.Contains(TB) Then
Controls.Add(TB)
End If
End Sub
Private Sub OnBaseTextChanged(ByVal s As Object, ByVal e As EventArgs)
Text = TB.Text
End Sub
Private Sub OnBaseKeyDown(ByVal s As Object, ByVal e As KeyEventArgs)
If e.Control AndAlso e.KeyCode = Keys.A Then
TB.SelectAll()
e.SuppressKeyPress = True
End If
If e.Control AndAlso e.KeyCode = Keys.C Then
TB.Copy()
e.SuppressKeyPress = True
End If
End Sub
Protected Overrides Sub OnResize(ByVal e As EventArgs)
TB.Location = New Point(5, 5)
TB.Width = Width - 35
If _Multiline Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
MyBase.OnResize(e)
End Sub
#End Region
#Region "Colour Properties"
<Category("Colours")>
Public Property BackgroundColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : TB.Focus() : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.Transparent
TB = New TextBox
TB.Height = 190
TB.Font = New Font("Segoe UI", 10)
TB.Text = Text
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
TB.MaxLength = _MaxLength
TB.Multiline = False
TB.ReadOnly = _ReadOnly
TB.UseSystemPasswordChar = _UseSystemPasswordChar
TB.BorderStyle = BorderStyle.None
TB.Location = New Point(5, 5)
TB.Width = Width - 35
AddHandler TB.TextChanged, AddressOf OnBaseTextChanged
AddHandler TB.KeyDown, AddressOf OnBaseKeyDown
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim GP As GraphicsPath
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
GP = RoundRectangle(Base, 6)
.FillPath(New SolidBrush(Color.FromArgb(42, 42, 42)), GP)
.DrawPath(New Pen(New SolidBrush(Color.FromArgb(35, 35, 35)), 2), GP)
GP.Dispose()
.FillPie(New SolidBrush(FindForm.BackColor), New Rectangle(Width - 25, Height - 60, Height + 25, Height + 25), 90, 90)
.DrawPie(New Pen(Color.FromArgb(35, 35, 35), 2), New Rectangle(Width - 25, Height - 60, Height + 25, Height + 25), 90, 90)
.FillEllipse(New SolidBrush(_TextColour), New Rectangle(10, 5, 10, 7))
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInLogButton
Inherits Control
#Region "Declarations"
Private State As MouseState = MouseState.None
Private _ArcColour As Color = Color.FromArgb(43, 43, 43)
Private _ArrowColour As Color = Color.FromArgb(235, 233, 234)
Private _ArrowBorderColour As Color = Color.FromArgb(170, 170, 170)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _HoverColour As Color = Color.FromArgb(0, 130, 169)
Private _PressedColour As Color = Color.FromArgb(0, 145, 184)
Private _NormalColour As Color = Color.FromArgb(0, 160, 199)
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Colour Properties"
<Category("Colours")>
Public Property ArcColour As Color
Get
Return _ArcColour
End Get
Set(value As Color)
_ArcColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property ArrowColour As Color
Get
Return _ArrowColour
End Get
Set(value As Color)
_ArrowColour = value
End Set
End Property
<Category("Colours")>
Public Property ArrowBorderColour As Color
Get
Return _ArrowBorderColour
End Get
Set(value As Color)
_ArrowBorderColour = value
End Set
End Property
<Category("Colours")>
Public Property HoverColour As Color
Get
Return _HoverColour
End Get
Set(value As Color)
_HoverColour = value
End Set
End Property
<Category("Colours")>
Public Property PressedColour As Color
Get
Return _PressedColour
End Get
Set(value As Color)
_PressedColour = value
End Set
End Property
<Category("Colours")>
Public Property NormalColour As Color
Get
Return _NormalColour
End Get
Set(value As Color)
_NormalColour = value
End Set
End Property
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Size = New Size(50, 50)
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(50, 50)
BackColor = Color.FromArgb(54, 54, 54)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim GP, GP1 As New GraphicsPath
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
Dim P() As Point = {New Point(18, 22), New Point(28, 22), New Point(28, 18), New Point(34, 25), New Point(28, 32), New Point(28, 28), New Point(18, 28)}
Select Case State
Case MouseState.None
.FillEllipse(New SolidBrush(Color.FromArgb(56, 56, 56)), New Rectangle(CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 3, Height - 3 - 3))
.DrawArc(New Pen(New SolidBrush(_ArcColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 3, Height - 3 - 3, -90, 360)
.DrawEllipse(New Pen(_BorderColour), New Rectangle(1, 1, Height - 3, Height - 3))
.FillEllipse(New SolidBrush(_NormalColour), New Rectangle(CInt(3 / 2) + 3, CInt(3 / 2) + 3, Height - 11, Height - 11))
.FillPolygon(New SolidBrush(_ArrowColour), P)
.DrawPolygon(New Pen(_ArrowBorderColour), P)
Case MouseState.Over
.DrawArc(New Pen(New SolidBrush(_ArcColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 3, Height - 3 - 3, -90, 360)
.DrawEllipse(New Pen(_BorderColour), New Rectangle(1, 1, Height - 3, Height - 3))
.FillEllipse(New SolidBrush(_HoverColour), New Rectangle(6, 6, Height - 13, Height - 13))
.FillPolygon(New SolidBrush(_ArrowColour), P)
.DrawPolygon(New Pen(_ArrowBorderColour), P)
Case MouseState.Down
.DrawArc(New Pen(New SolidBrush(_ArcColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 3, Height - 3 - 3, -90, 360)
.DrawEllipse(New Pen(_BorderColour), New Rectangle(1, 1, Height - 3, Height - 3))
.FillEllipse(New SolidBrush(_PressedColour), New Rectangle(6, 6, Height - 13, Height - 13))
.FillPolygon(New SolidBrush(_ArrowColour), P)
.DrawPolygon(New Pen(_ArrowBorderColour), P)
End Select
GP.Dispose()
GP1.Dispose()
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
<DefaultEvent("CheckedChanged")>
Public Class LogInCheckBox
Inherits Control
#Region "Declarations"
Private _Checked As Boolean
Private State As MouseState = MouseState.None
Private _CheckedColour As Color = Color.FromArgb(173, 173, 174)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BackColour As Color = Color.FromArgb(42, 42, 42)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
#End Region
#Region "Colour & Other Properties"
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BackColour
End Get
Set(value As Color)
_BackColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property CheckedColour As Color
Get
Return _CheckedColour
End Get
Set(value As Color)
_CheckedColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
MyBase.OnTextChanged(e)
Invalidate()
End Sub
Property Checked() As Boolean
Get
Return _Checked
End Get
Set(ByVal value As Boolean)
_Checked = value
Invalidate()
End Set
End Property
Event CheckedChanged(ByVal sender As Object)
Protected Overrides Sub OnClick(ByVal e As EventArgs)
_Checked = Not _Checked
RaiseEvent CheckedChanged(Me)
MyBase.OnClick(e)
End Sub
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 22
End Sub
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Cursor = Cursors.Hand
Size = New Size(100, 22)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
Dim Base As New Rectangle(0, 0, 20, 20)
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(Color.FromArgb(54, 54, 54))
.FillRectangle(New SolidBrush(_BackColour), Base)
.DrawRectangle(New Pen(_BorderColour), New Rectangle(1, 1, 18, 18))
Select Case State
Case MouseState.Over
.FillRectangle(New SolidBrush(Color.FromArgb(50, 49, 51)), Base)
.DrawRectangle(New Pen(_BorderColour), New Rectangle(1, 1, 18, 18))
End Select
If Checked Then
Dim P() As Point = {New Point(4, 11), New Point(6, 8), New Point(9, 12), New Point(15, 3), New Point(17, 6), New Point(9, 16)}
.FillPolygon(New SolidBrush(_CheckedColour), P)
End If
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(24, 1, Width, Height - 2), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center})
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInNormalTextBox
Inherits Control
#Region "Declarations"
Private State As MouseState = MouseState.None
Private WithEvents TB As TextBox
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _Style As Styles = Styles.NotRounded
Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
Private _MaxLength As Integer = 32767
Private _ReadOnly As Boolean
Private _UseSystemPasswordChar As Boolean
Private _Multiline As Boolean
#End Region
#Region "TextBox Properties"
Enum Styles
Rounded
NotRounded
End Enum
<Category("Options")>
Property TextAlign() As HorizontalAlignment
Get
Return _TextAlign
End Get
Set(ByVal value As HorizontalAlignment)
_TextAlign = value
If TB IsNot Nothing Then
TB.TextAlign = value
End If
End Set
End Property
<Category("Options")>
Property MaxLength() As Integer
Get
Return _MaxLength
End Get
Set(ByVal value As Integer)
_MaxLength = value
If TB IsNot Nothing Then
TB.MaxLength = value
End If
End Set
End Property
<Category("Options")>
Property [ReadOnly]() As Boolean
Get
Return _ReadOnly
End Get
Set(ByVal value As Boolean)
_ReadOnly = value
If TB IsNot Nothing Then
TB.ReadOnly = value
End If
End Set
End Property
<Category("Options")>
Property UseSystemPasswordChar() As Boolean
Get
Return _UseSystemPasswordChar
End Get
Set(ByVal value As Boolean)
_UseSystemPasswordChar = value
If TB IsNot Nothing Then
TB.UseSystemPasswordChar = value
End If
End Set
End Property
<Category("Options")>
Property Multiline() As Boolean
Get
Return _Multiline
End Get
Set(ByVal value As Boolean)
_Multiline = value
If TB IsNot Nothing Then
TB.Multiline = value
If value Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
End If
End Set
End Property
<Category("Options")>
Overrides Property Text As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
If TB IsNot Nothing Then
TB.Text = value
End If
End Set
End Property
<Category("Options")>
Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
MyBase.Font = value
If TB IsNot Nothing Then
TB.Font = value
TB.Location = New Point(3, 5)
TB.Width = Width - 6
If Not _Multiline Then
Height = TB.Height + 11
End If
End If
End Set
End Property
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If Not Controls.Contains(TB) Then
Controls.Add(TB)
End If
End Sub
Private Sub OnBaseTextChanged(ByVal s As Object, ByVal e As EventArgs)
Text = TB.Text
End Sub
Private Sub OnBaseKeyDown(ByVal s As Object, ByVal e As KeyEventArgs)
If e.Control AndAlso e.KeyCode = Keys.A Then
TB.SelectAll()
e.SuppressKeyPress = True
End If
If e.Control AndAlso e.KeyCode = Keys.C Then
TB.Copy()
e.SuppressKeyPress = True
End If
End Sub
Protected Overrides Sub OnResize(ByVal e As EventArgs)
TB.Location = New Point(5, 5)
TB.Width = Width - 10
If _Multiline Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
MyBase.OnResize(e)
End Sub
Public Property Style As Styles
Get
Return _Style
End Get
Set(value As Styles)
_Style = value
End Set
End Property
Public Sub SelectAll()
TB.Focus()
TB.SelectAll()
End Sub
#End Region
#Region "Colour Properties"
<Category("Colours")>
Public Property BackgroundColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : TB.Focus() : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.Transparent
TB = New TextBox
TB.Height = 190
TB.Font = New Font("Segoe UI", 10)
TB.Text = Text
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
TB.MaxLength = _MaxLength
TB.Multiline = False
TB.ReadOnly = _ReadOnly
TB.UseSystemPasswordChar = _UseSystemPasswordChar
TB.BorderStyle = BorderStyle.None
TB.Location = New Point(5, 5)
TB.Width = Width - 35
AddHandler TB.TextChanged, AddressOf OnBaseTextChanged
AddHandler TB.KeyDown, AddressOf OnBaseKeyDown
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
Dim GP As GraphicsPath
Dim Base As New Rectangle(0, 0, Width, Height)
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
TB.BackColor = Color.FromArgb(42, 42, 42)
TB.ForeColor = Color.FromArgb(255, 255, 255)
Select Case _Style
Case Styles.Rounded
GP = RoundRectangle(Base, 6)
.FillPath(New SolidBrush(Color.FromArgb(42, 42, 42)), GP)
.DrawPath(New Pen(New SolidBrush(Color.FromArgb(35, 35, 35)), 2), GP)
GP.Dispose()
Case Styles.NotRounded
.FillRectangle(New SolidBrush(Color.FromArgb(42, 42, 42)), New Rectangle(0, 0, Width - 1, Height - 1))
.DrawRectangle(New Pen(New SolidBrush(Color.FromArgb(35, 35, 35)), 2), New Rectangle(0, 0, Width, Height))
End Select
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInRadialProgressBar
Inherits Control
#Region "Declarations"
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _ProgressColour As Color = Color.FromArgb(23, 119, 151)
Private _Value As Integer = 0
Private _Maximum As Integer = 100
Private _StartingAngle As Integer = 110
Private _RotationAngle As Integer = 255
Private ReadOnly _Font As Font = New Font("Segoe UI", 20)
#End Region
#Region "Properties"
<Category("Control")>
Public Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(V As Integer)
Select Case V
Case Is < _Value
_Value = V
End Select
_Maximum = V
Invalidate()
End Set
End Property
<Category("Control")>
Public Property Value() As Integer
Get
Select Case _Value
Case 0
Return 0
Case Else
Return _Value
End Select
End Get
Set(V As Integer)
Select Case V
Case Is > _Maximum
V = _Maximum
Invalidate()
End Select
_Value = V
Invalidate()
End Set
End Property
Public Sub Increment(ByVal Amount As Integer)
Value += Amount
End Sub
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property ProgressColour As Color
Get
Return _ProgressColour
End Get
Set(value As Color)
_ProgressColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Control")>
Public Property StartingAngle As Integer
Get
Return _StartingAngle
End Get
Set(value As Integer)
_StartingAngle = value
End Set
End Property
<Category("Control")>
Public Property RotationAngle As Integer
Get
Return _RotationAngle
End Get
Set(value As Integer)
_RotationAngle = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(78, 78)
BackColor = Color.FromArgb(54, 54, 54)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
With G
.TextRenderingHint = TextRenderingHint.AntiAliasGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
Select Case _Value
Case 0
.DrawArc(New Pen(New SolidBrush(_BorderColour), 1 + 5), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle - 3, _RotationAngle + 5)
.DrawArc(New Pen(New SolidBrush(_BaseColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle, _RotationAngle)
.DrawString(CStr(_Value), _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 1)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case _Maximum
.DrawArc(New Pen(New SolidBrush(_BorderColour), 1 + 5), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle - 3, _RotationAngle + 5)
.DrawArc(New Pen(New SolidBrush(_BaseColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle, _RotationAngle)
.DrawArc(New Pen(New SolidBrush(_ProgressColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle, _RotationAngle)
.DrawString(CStr(_Value), _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 1)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case Else
.DrawArc(New Pen(New SolidBrush(_BorderColour), 1 + 5), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle - 3, _RotationAngle + 5)
.DrawArc(New Pen(New SolidBrush(_BaseColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle, _RotationAngle)
.DrawArc(New Pen(New SolidBrush(_ProgressColour), 1 + 3), CInt(3 / 2) + 1, CInt(3 / 2) + 1, Width - 3 - 4, Height - 3 - 3, _StartingAngle, CInt((_RotationAngle / _Maximum) * _Value))
.DrawString(CStr(_Value), _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 1)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
End Select
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
<DefaultEvent("CheckedChanged")>
Public Class LogInRadioButton
Inherits Control
#Region "Declarations"
Private _Checked As Boolean
Private State As MouseState = MouseState.None
Private _HoverColour As Color = Color.FromArgb(50, 49, 51)
Private _CheckedColour As Color = Color.FromArgb(173, 173, 174)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BackColour As Color = Color.FromArgb(54, 54, 54)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
#End Region
#Region "Colour & Other Properties"
<Category("Colours")>
Public Property HighlightColour As Color
Get
Return _HoverColour
End Get
Set(value As Color)
_HoverColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BackColour
End Get
Set(value As Color)
_BackColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property CheckedColour As Color
Get
Return _CheckedColour
End Get
Set(value As Color)
_CheckedColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
Event CheckedChanged(ByVal sender As Object)
Property Checked() As Boolean
Get
Return _Checked
End Get
Set(value As Boolean)
_Checked = value
InvalidateControls()
RaiseEvent CheckedChanged(Me)
Invalidate()
End Set
End Property
Protected Overrides Sub OnClick(e As EventArgs)
If Not _Checked Then Checked = True
MyBase.OnClick(e)
End Sub
Private Sub InvalidateControls()
If Not IsHandleCreated OrElse Not _Checked Then Return
For Each C As Control In Parent.Controls
If C IsNot Me AndAlso TypeOf C Is LogInRadioButton Then
DirectCast(C, LogInRadioButton).Checked = False
Invalidate()
End If
Next
End Sub
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
InvalidateControls()
End Sub
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 22
End Sub
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Cursor = Cursors.Hand
Size = New Size(100, 22)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(1, 1, Height - 2, Height - 2)
Dim Circle As New Rectangle(6, 6, Height - 12, Height - 12)
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(_BackColour)
.FillEllipse(New SolidBrush(_BackColour), Base)
.DrawEllipse(New Pen(_BorderColour, 2), Base)
If Checked Then
Select Case State
Case MouseState.Over
.FillEllipse(New SolidBrush(_HoverColour), New Rectangle(2, 2, Height - 4, Height - 4))
End Select
.FillEllipse(New SolidBrush(_CheckedColour), Circle)
Else
Select Case State
Case MouseState.Over
.FillEllipse(New SolidBrush(_HoverColour), New Rectangle(2, 2, Height - 4, Height - 4))
End Select
End If
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(24, 3, Width, Height), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInLabel
Inherits Label
#Region "Declaration"
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
#End Region
#Region "Property & Event"
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
Protected Overrides Sub OnTextChanged(e As EventArgs)
MyBase.OnTextChanged(e) : Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Font = New Font("Segoe UI", 9)
ForeColor = _FontColour
BackColor = Color.Transparent
Text = Text
End Sub
#End Region
End Class
Public Class LogInButton
Inherits Control
#Region "Declarations"
Private ReadOnly _Font As New Font("Segoe UI", 9)
Private _ProgressColour As Color = Color.FromArgb(0, 191, 255)
Private _BorderColour As Color = Color.FromArgb(25, 25, 25)
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
Private _MainColour As Color = Color.FromArgb(42, 42, 42)
Private _HoverColour As Color = Color.FromArgb(52, 52, 52)
Private _PressedColour As Color = Color.FromArgb(47, 47, 47)
Private State As New MouseState
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Properties"
<Category("Colours")>
Public Property ProgressColour As Color
Get
Return _ProgressColour
End Get
Set(value As Color)
_ProgressColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _MainColour
End Get
Set(value As Color)
_MainColour = value
End Set
End Property
<Category("Colours")>
Public Property HoverColour As Color
Get
Return _HoverColour
End Get
Set(value As Color)
_HoverColour = value
End Set
End Property
<Category("Colours")>
Public Property PressedColour As Color
Get
Return _PressedColour
End Get
Set(value As Color)
_PressedColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(75, 30)
BackColor = Color.Transparent
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.InterpolationMode = CType(7, InterpolationMode)
.Clear(BackColor)
Select Case State
Case MouseState.None
.FillRectangle(New SolidBrush(_MainColour), New Rectangle(0, 0, Width, Height))
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case MouseState.Over
.FillRectangle(New SolidBrush(_HoverColour), New Rectangle(0, 0, Width, Height))
.DrawRectangle(New Pen(_BorderColour, 1), New Rectangle(1, 1, Width - 2, Height - 2))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case MouseState.Down
.FillRectangle(New SolidBrush(_PressedColour), New Rectangle(0, 0, Width, Height))
.DrawRectangle(New Pen(_BorderColour, 1), New Rectangle(1, 1, Width - 2, Height - 2))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
End Select
End With
End Sub
#End Region
End Class
Public Class LogInButtonWithProgress
Inherits Control
#Region "Declarations"
Private _Value As Integer = 0
Private _Maximum As Integer = 100
Private _Font As New Font("Segoe UI", 9)
Private _ProgressColour As Color = Color.FromArgb(0, 191, 255)
Private _BorderColour As Color = Color.FromArgb(25, 25, 25)
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
Private _MainColour As Color = Color.FromArgb(42, 42, 42)
Private _HoverColour As Color = Color.FromArgb(52, 52, 52)
Private _PressedColour As Color = Color.FromArgb(47, 47, 47)
Private State As New MouseState
#End Region
#Region "Mouse States"
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
#End Region
#Region "Properties"
<Category("Colours")>
Public Property ProgressColour As Color
Get
Return _ProgressColour
End Get
Set(value As Color)
_ProgressColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _MainColour
End Get
Set(value As Color)
_MainColour = value
End Set
End Property
<Category("Colours")>
Public Property HoverColour As Color
Get
Return _HoverColour
End Get
Set(value As Color)
_HoverColour = value
End Set
End Property
<Category("Colours")>
Public Property PressedColour As Color
Get
Return _PressedColour
End Get
Set(value As Color)
_PressedColour = value
End Set
End Property
<Category("Control")>
Public Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(V As Integer)
Select Case V
Case Is < _Value
_Value = V
End Select
_Maximum = V
Invalidate()
End Set
End Property
<Category("Control")>
Public Property Value() As Integer
Get
Select Case _Value
Case 0
Return 0
Case Else
Return _Value
End Select
End Get
Set(V As Integer)
Select Case V
Case Is > _Maximum
V = _Maximum
Invalidate()
End Select
_Value = V
Invalidate()
End Set
End Property
Public Sub Increment(ByVal Amount As Integer)
Value += Amount
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(75, 30)
BackColor = Color.Transparent
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
Select Case State
Case MouseState.None
.FillRectangle(New SolidBrush(_MainColour), New Rectangle(0, 0, Width, Height - 4))
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height - 4))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case MouseState.Over
.FillRectangle(New SolidBrush(_HoverColour), New Rectangle(0, 0, Width, Height - 4))
.DrawRectangle(New Pen(_BorderColour, 1), New Rectangle(1, 1, Width - 2, Height - 5))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Case MouseState.Down
.FillRectangle(New SolidBrush(_PressedColour), New Rectangle(0, 0, Width, Height - 4))
.DrawRectangle(New Pen(_BorderColour, 1), New Rectangle(1, 1, Width - 2, Height - 5))
.DrawString(Text, _Font, Brushes.White, New Point(CInt(Width / 2), CInt(Height / 2 - 2)), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
End Select
Select Case _Value
Case 0
Case _Maximum
.FillRectangle(New SolidBrush(_ProgressColour), New Rectangle(0, Height - 4, Width, Height - 4))
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
Case Else
.FillRectangle(New SolidBrush(_ProgressColour), New Rectangle(0, Height - 4, CInt(Width / _Maximum * _Value), Height - 4))
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
End Select
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInGroupBox
Inherits ContainerControl
#Region "Declarations"
Private _MainColour As Color = Color.FromArgb(47, 47, 47)
Private _HeaderColour As Color = Color.FromArgb(42, 42, 42)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
#End Region
#Region "Properties"
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property HeaderColour As Color
Get
Return _HeaderColour
End Get
Set(value As Color)
_HeaderColour = value
End Set
End Property
<Category("Colours")>
Public Property MainColour As Color
Get
Return _MainColour
End Get
Set(value As Color)
_MainColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(160, 110)
Font = New Font("Segoe UI", 10, FontStyle.Bold)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(Color.FromArgb(54, 54, 54))
.FillRectangle(New SolidBrush(_MainColour), New Rectangle(0, 28, Width, Height))
.FillRectangle(New SolidBrush(_HeaderColour), New Rectangle(0, 0, CInt(.MeasureString(Text, Font).Width + 7), 28))
.DrawString(Text, Font, New SolidBrush(_TextColour), New Point(5, 5))
Dim P() As Point = {New Point(0, 0), New Point(CInt(.MeasureString(Text, Font).Width + 7), 0), New Point(CInt(.MeasureString(Text, Font).Width + 7), 28),
New Point(Width - 1, 28), New Point(Width - 1, Height - 1), New Point(1, Height - 1), New Point(1, 1)}
.DrawLines(New Pen(_BorderColour), P)
.DrawLine(New Pen(_BorderColour, 2), New Point(0, 28), New Point(CInt(.MeasureString(Text, Font).Width + 7), 28))
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInSeperator
Inherits Control
#Region "Declarations"
Private _SeperatorColour As Color = Color.FromArgb(35, 35, 35)
Private _Alignment As Style = Style.Horizontal
Private _Thickness As Single = 1
#End Region
#Region "Properties"
Enum Style
Horizontal
Verticle
End Enum
<Category("Control")>
Public Property Thickness As Single
Get
Return _Thickness
End Get
Set(value As Single)
_Thickness = value
End Set
End Property
<Category("Control")>
Public Property Alignment As Style
Get
Return _Alignment
End Get
Set(value As Style)
_Alignment = value
End Set
End Property
<Category("Colours")>
Public Property SeperatorColour As Color
Get
Return _SeperatorColour
End Get
Set(value As Color)
_SeperatorColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.Transparent
Size = New Size(20, 20)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(0, 0, Width - 1, Height - 1)
With G
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
Select Case _Alignment
Case Style.Horizontal
.DrawLine(New Pen(_SeperatorColour, _Thickness), New Point(0, CInt(Height / 2)), New Point(Width, CInt(Height / 2)))
Case Style.Verticle
.DrawLine(New Pen(_SeperatorColour, _Thickness), New Point(CInt(Width / 2), 0), New Point(CInt(Width / 2), Height))
End Select
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInNumeric
Inherits Control
#Region "Variables"
Private State As MouseState = MouseState.None
Private MouseXLoc, MouseYLoc As Integer
Private _Value As Long
Private _Minimum As Long = 0
Private _Maximum As Long = 9999999
Private BoolValue As Boolean
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _ButtonColour As Color = Color.FromArgb(47, 47, 47)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _SecondBorderColour As Color = Color.FromArgb(0, 191, 255)
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
#End Region
#Region "Properties & Events"
Public Property Value As Long
Get
Return _Value
End Get
Set(value As Long)
If value <= _Maximum And value >= _Minimum Then _Value = value
Invalidate()
End Set
End Property
Public Property Maximum As Long
Get
Return _Maximum
End Get
Set(value As Long)
If value > _Minimum Then _Maximum = value
If _Value > _Maximum Then _Value = _Maximum
Invalidate()
End Set
End Property
Public Property Minimum As Long
Get
Return _Minimum
End Get
Set(value As Long)
If value < _Maximum Then _Minimum = value
If _Value < _Minimum Then _Value = Minimum
Invalidate()
End Set
End Property
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
MouseXLoc = e.Location.X
MouseYLoc = e.Location.Y
Invalidate()
If e.X < Width - 47 Then Cursor = Cursors.IBeam Else Cursor = Cursors.Hand
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
If MouseXLoc > Width - 47 AndAlso MouseXLoc < Width - 3 Then
If MouseXLoc < Width - 23 Then
If (Value + 1) <= _Maximum Then _Value += 1
Else
If (Value - 1) >= _Minimum Then _Value -= 1
End If
Else
BoolValue = Not BoolValue
Focus()
End If
Invalidate()
End Sub
Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
MyBase.OnKeyPress(e)
Try
If BoolValue Then _Value = CLng(CStr(CStr(_Value) & e.KeyChar.ToString()))
If _Value > _Maximum Then _Value = _Maximum
Invalidate()
Catch : End Try
End Sub
Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
MyBase.OnKeyDown(e)
If e.KeyCode = Keys.Back Then
Value = 0
End If
End Sub
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 24
End Sub
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ButtonColour As Color
Get
Return _ButtonColour
End Get
Set(value As Color)
_ButtonColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property SecondBorderColour As Color
Get
Return _SecondBorderColour
End Get
Set(value As Color)
_SecondBorderColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Font = New Font("Segoe UI", 10)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
Dim Base As New Rectangle(0, 0, Width, Height)
Dim CenterSF As New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center}
With g
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.Clear(BackColor)
.FillRectangle(New SolidBrush(_BaseColour), Base)
.FillRectangle(New SolidBrush(_ButtonColour), New Rectangle(Width - 48, 0, 48, Height))
.DrawRectangle(New Pen(_BorderColour, 2), Base)
.DrawLine(New Pen(_SecondBorderColour), New Point(Width - 48, 1), New Point(Width - 48, Height - 2))
.DrawLine(New Pen(_BorderColour), New Point(Width - 24, 1), New Point(Width - 24, Height - 2))
.DrawLine(New Pen(_FontColour), New Point(Width - 36, 7), New Point(Width - 36, 17))
.DrawLine(New Pen(_FontColour), New Point(Width - 31, 12), New Point(Width - 41, 12))
.DrawLine(New Pen(_FontColour), New Point(Width - 17, 13), New Point(Width - 7, 13))
.DrawString(CStr(Value), Font, New SolidBrush(_FontColour), New Rectangle(5, 1, Width, Height), New StringFormat() With {.LineAlignment = StringAlignment.Center})
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
Public Class LogInColourTable
Inherits ProfessionalColorTable
#Region "Declarations"
Private _BackColour As Color = Color.FromArgb(42, 42, 42)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _SelectedColour As Color = Color.FromArgb(47, 47, 47)
#End Region
#Region "Properties"
<Category("Colours")>
Public Property SelectedColour As Color
Get
Return _SelectedColour
End Get
Set(value As Color)
_SelectedColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property BackColour As Color
Get
Return _BackColour
End Get
Set(value As Color)
_BackColour = value
End Set
End Property
Public Overrides ReadOnly Property ButtonSelectedBorder() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property CheckBackground() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property CheckPressedBackground() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property CheckSelectedBackground() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property ImageMarginGradientBegin() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property ImageMarginGradientEnd() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property ImageMarginGradientMiddle() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property MenuBorder() As Color
Get
Return _BorderColour
End Get
End Property
Public Overrides ReadOnly Property MenuItemBorder() As Color
Get
Return _BackColour
End Get
End Property
Public Overrides ReadOnly Property MenuItemSelected() As Color
Get
Return _SelectedColour
End Get
End Property
Public Overrides ReadOnly Property SeparatorDark() As Color
Get
Return _BorderColour
End Get
End Property
Public Overrides ReadOnly Property ToolStripDropDownBackground() As Color
Get
Return _BackColour
End Get
End Property
#End Region
End Class
Public Class LogInListBox
Inherits Control
#Region "Variables"
Private WithEvents ListB As New ListBox
Private _Items As String() = {""}
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _SelectedColour As Color = Color.FromArgb(55, 55, 55)
Private _ListBaseColour As Color = Color.FromArgb(47, 47, 47)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
#End Region
#Region "Properties"
<Category("Control")>
Public Property Items As String()
Get
Return _Items
End Get
Set(value As String())
_Items = value
ListB.Items.Clear()
ListB.Items.AddRange(value)
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property SelectedColour As Color
Get
Return _SelectedColour
End Get
Set(value As Color)
_SelectedColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ListBaseColour As Color
Get
Return _ListBaseColour
End Get
Set(value As Color)
_ListBaseColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
Public ReadOnly Property SelectedItem() As String
Get
Return CStr(ListB.SelectedItem)
End Get
End Property
Public ReadOnly Property SelectedIndex() As Integer
Get
Return ListB.SelectedIndex
If ListB.SelectedIndex < 0 Then Exit Property
End Get
End Property
Public Sub Clear()
ListB.Items.Clear()
End Sub
Public Sub ClearSelected()
For i As Integer = (ListB.SelectedItems.Count - 1) To 0 Step -1
ListB.Items.Remove(ListB.SelectedItems(i))
Next
End Sub
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If Not Controls.Contains(ListB) Then
Controls.Add(ListB)
End If
End Sub
Sub AddRange(ByVal items As Object())
ListB.Items.Remove("")
ListB.Items.AddRange(items)
End Sub
Sub AddItem(ByVal item As Object)
ListB.Items.Remove("")
ListB.Items.Add(item)
End Sub
#End Region
#Region "Draw Control"
Sub Drawitem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles ListB.DrawItem
If e.Index < 0 Then Exit Sub
e.DrawBackground()
e.DrawFocusRectangle()
With e.Graphics
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.InterpolationMode = InterpolationMode.HighQualityBicubic
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
If InStr(e.State.ToString, "Selected,") > 0 Then
.FillRectangle(New SolidBrush(_SelectedColour), New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height - 1))
.DrawString(" " & ListB.Items(e.Index).ToString(), New Font("Segoe UI", 9, FontStyle.Bold), New SolidBrush(_TextColour), e.Bounds.X, e.Bounds.Y + 2)
Else
.FillRectangle(New SolidBrush(_ListBaseColour), New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
.DrawString(" " & ListB.Items(e.Index).ToString(), New Font("Segoe UI", 8), New SolidBrush(_TextColour), e.Bounds.X, e.Bounds.Y + 2)
End If
.Dispose()
End With
End Sub
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
ListB.DrawMode = DrawMode.OwnerDrawFixed
ListB.ScrollAlwaysVisible = False
ListB.HorizontalScrollbar = False
ListB.BorderStyle = BorderStyle.None
ListB.BackColor = _BaseColour
ListB.Location = New Point(3, 3)
ListB.Font = New Font("Segoe UI", 8)
ListB.ItemHeight = 20
ListB.Items.Clear()
ListB.IntegralHeight = False
Size = New Size(130, 100)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.Clear(BackColor)
ListB.Size = New Size(Width - 6, Height - 5)
.FillRectangle(New SolidBrush(_BaseColour), Base)
.DrawRectangle(New Pen(_BorderColour, 3), New Rectangle(0, 0, Width, Height - 1))
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
Public Class LogInTitledListBox
Inherits Control
#Region "Variables"
Private WithEvents ListB As New ListBox
Private _Items As String() = {""}
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _SelectedColour As Color = Color.FromArgb(55, 55, 55)
Private _ListBaseColour As Color = Color.FromArgb(47, 47, 47)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _TitleFont As New Font("Segeo UI", 10, FontStyle.Bold)
#End Region
#Region "Properties"
<Category("Control")>
Public Property TitleFont As Font
Get
Return _TitleFont
End Get
Set(value As Font)
_TitleFont = value
End Set
End Property
<Category("Control")>
Public Property Items As String()
Get
Return _Items
End Get
Set(value As String())
_Items = value
ListB.Items.Clear()
ListB.Items.AddRange(value)
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property SelectedColour As Color
Get
Return _SelectedColour
End Get
Set(value As Color)
_SelectedColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ListBaseColour As Color
Get
Return _ListBaseColour
End Get
Set(value As Color)
_ListBaseColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
Public ReadOnly Property SelectedItem() As String
Get
Return CStr(ListB.SelectedItem)
End Get
End Property
Public ReadOnly Property SelectedIndex() As Integer
Get
Return ListB.SelectedIndex
If ListB.SelectedIndex < 0 Then Exit Property
End Get
End Property
Public Sub Clear()
ListB.Items.Clear()
End Sub
Public Sub ClearSelected()
For i As Integer = (ListB.SelectedItems.Count - 1) To 0 Step -1
ListB.Items.Remove(ListB.SelectedItems(i))
Next
End Sub
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
If Not Controls.Contains(ListB) Then
Controls.Add(ListB)
End If
End Sub
Sub AddRange(ByVal items As Object())
ListB.Items.Remove("")
ListB.Items.AddRange(items)
End Sub
Sub AddItem(ByVal item As Object)
ListB.Items.Remove("")
ListB.Items.Add(item)
End Sub
#End Region
#Region "Draw Control"
Sub Drawitem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles ListB.DrawItem
If e.Index < 0 Then Exit Sub
e.DrawBackground()
e.DrawFocusRectangle()
With e.Graphics
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.InterpolationMode = InterpolationMode.HighQualityBicubic
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
If InStr(e.State.ToString, "Selected,") > 0 Then
.FillRectangle(New SolidBrush(_SelectedColour), New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height - 1))
.DrawString(" " & ListB.Items(e.Index).ToString(), New Font("Segoe UI", 9, FontStyle.Bold), New SolidBrush(_TextColour), e.Bounds.X, e.Bounds.Y + 2)
Else
.FillRectangle(New SolidBrush(_ListBaseColour), New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
.DrawString(" " & ListB.Items(e.Index).ToString(), New Font("Segoe UI", 8), New SolidBrush(_TextColour), e.Bounds.X, e.Bounds.Y + 2)
End If
.Dispose()
End With
End Sub
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
ListB.DrawMode = DrawMode.OwnerDrawFixed
ListB.ScrollAlwaysVisible = False
ListB.HorizontalScrollbar = False
ListB.BorderStyle = BorderStyle.None
ListB.BackColor = BaseColour
ListB.Location = New Point(3, 28)
ListB.Font = New Font("Segoe UI", 8)
ListB.ItemHeight = 20
ListB.Items.Clear()
ListB.IntegralHeight = False
Size = New Size(130, 100)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.Clear(BackColor)
ListB.Size = New Size(Width - 6, Height - 30)
.FillRectangle(New SolidBrush(BaseColour), Base)
.DrawRectangle(New Pen((_BorderColour), 3), New Rectangle(0, 0, Width, Height - 1))
.DrawLine(New Pen((_BorderColour), 2), New Point(0, 27), New Point(Width - 1, 27))
.DrawString(Text, _TitleFont, New SolidBrush(_TextColour), New Rectangle(2, 5, Width - 5, 20), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
Public Class LogInContextMenu
Inherits ContextMenuStrip
#Region "Declarations"
Private _FontColour As Color = Color.FromArgb(55, 255, 255)
#End Region
#Region "Properties"
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
Renderer = New ToolStripProfessionalRenderer(New LogInColourTable())
ShowCheckMargin = False
ShowImageMargin = False
ForeColor = Color.FromArgb(255, 255, 255)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
MyBase.OnPaint(e)
End Sub
#End Region
End Class
Public Class LogInProgressBar
Inherits Control
#Region "Declarations"
Private _ProgressColour As Color = Color.FromArgb(0, 160, 199)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _FontColour As Color = Color.FromArgb(50, 50, 50)
Private _SecondColour As Color = Color.FromArgb(0, 145, 184)
Private _Value As Integer = 0
Private _Maximum As Integer = 100
Private _TwoColour As Boolean = True
#End Region
#Region "Properties"
Public Property SecondColour As Color
Get
Return _SecondColour
End Get
Set(value As Color)
_SecondColour = value
End Set
End Property
<Category("Control")>
Public Property TwoColour As Boolean
Get
Return _TwoColour
End Get
Set(value As Boolean)
_TwoColour = value
End Set
End Property
<Category("Control")>
Public Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(V As Integer)
Select Case V
Case Is < _Value
_Value = V
End Select
_Maximum = V
Invalidate()
End Set
End Property
<Category("Control")>
Public Property Value() As Integer
Get
Select Case _Value
Case 0
Return 0
Invalidate()
Case Else
Return _Value
Invalidate()
End Select
End Get
Set(V As Integer)
Select Case V
Case Is > _Maximum
V = _Maximum
Invalidate()
End Select
_Value = V
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property ProgressColour As Color
Get
Return _ProgressColour
End Get
Set(value As Color)
_ProgressColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
#End Region
#Region "Events"
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 25
End Sub
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Height = 25
End Sub
Public Sub Increment(ByVal Amount As Integer)
Value += Amount
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
Dim ProgVal As Integer = CInt(_Value / _Maximum * Width)
Select Case Value
Case 0
.FillRectangle(New SolidBrush(_BaseColour), Base)
.FillRectangle(New SolidBrush(_ProgressColour), New Rectangle(0, 0, ProgVal - 1, Height))
.DrawRectangle(New Pen(_BorderColour, 3), Base)
Case _Maximum
.FillRectangle(New SolidBrush(_BaseColour), Base)
.FillRectangle(New SolidBrush(_ProgressColour), New Rectangle(0, 0, ProgVal - 1, Height))
If _TwoColour Then
G.SetClip(New Rectangle(0, -10, CInt(Width * _Value / _Maximum - 1), Height - 5))
For i = 0 To (Width - 1) * _Maximum / _Value Step 25
G.DrawLine(New Pen(New SolidBrush(_SecondColour), 7), New Point(CInt(i), 0), New Point(CInt(i - 15), Height))
Next
G.ResetClip()
Else
End If
.DrawRectangle(New Pen(_BorderColour, 3), Base)
Case Else
.FillRectangle(New SolidBrush(_BaseColour), Base)
.FillRectangle(New SolidBrush(_ProgressColour), New Rectangle(0, 0, ProgVal - 1, Height))
If _TwoColour Then
.SetClip(New Rectangle(0, 0, CInt(Width * _Value / _Maximum - 1), Height - 1))
For i = 0 To (Width - 1) * _Maximum / _Value Step 25
.DrawLine(New Pen(New SolidBrush(_SecondColour), 7), New Point(CInt(i), 0), New Point(CInt(i - 10), Height))
Next
.ResetClip()
Else
End If
.DrawRectangle(New Pen(_BorderColour, 3), Base)
End Select
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInRichTextBox
Inherits Control
#Region "Declarations"
Private WithEvents TB As New RichTextBox
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
#End Region
#Region "Properties"
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
#End Region
#Region "Events"
Public Sub AppendText(ByVal AppendingText As String)
TB.Focus()
TB.AppendText(AppendingText)
Invalidate()
End Sub
Overrides Property Text As String
Get
Return TB.Text
End Get
Set(value As String)
TB.Text = value
Invalidate()
End Set
End Property
Protected Overrides Sub OnBackColorChanged(ByVal e As System.EventArgs)
MyBase.OnBackColorChanged(e)
TB.BackColor = BackColor
Invalidate()
End Sub
Protected Overrides Sub OnForeColorChanged(ByVal e As System.EventArgs)
MyBase.OnForeColorChanged(e)
TB.ForeColor = ForeColor
Invalidate()
End Sub
Protected Overrides Sub OnSizeChanged(ByVal e As System.EventArgs)
MyBase.OnSizeChanged(e)
TB.Size = New Size(Width - 10, Height - 11)
End Sub
Protected Overrides Sub OnFontChanged(ByVal e As System.EventArgs)
MyBase.OnFontChanged(e)
TB.Font = Font
End Sub
Sub TextChanges() Handles MyBase.TextChanged
TB.Text = Text
End Sub
#End Region
#Region "Draw Control"
Sub New()
With TB
.Multiline = True
.BackColor = _BaseColour
.ForeColor = _TextColour
.Text = String.Empty
.BorderStyle = BorderStyle.None
.Location = New Point(5, 5)
.Font = New Font("Segeo UI", 9)
.Size = New Size(Width - 10, Height - 10)
End With
Controls.Add(TB)
Size = New Size(135, 35)
DoubleBuffered = True
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g = e.Graphics
Dim Base As New Rectangle(0, 0, Width - 1, Height - 1)
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(_BaseColour)
.DrawRectangle(New Pen(_BorderColour, 2), ClientRectangle)
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInStatusBar
Inherits Control
#Region "Variables"
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _TextColour As Color = Color.White
Private _RectColour As Color = Color.FromArgb(21, 117, 149)
Private _ShowLine As Boolean = True
Private _LinesToShow As LinesCount = LinesCount.One
Private _Alignment As Alignments = Alignments.Left
Private _ShowBorder As Boolean = True
#End Region
#Region "Properties"
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
Enum LinesCount As Integer
One = 1
Two = 2
End Enum
Enum Alignments
Left
Center
Right
End Enum
<Category("Control")>
Public Property Alignment As Alignments
Get
Return _Alignment
End Get
Set(value As Alignments)
_Alignment = value
End Set
End Property
<Category("Control")>
Public Property LinesToShow As LinesCount
Get
Return _LinesToShow
End Get
Set(value As LinesCount)
_LinesToShow = value
End Set
End Property
Public Property ShowBorder As Boolean
Get
Return _ShowBorder
End Get
Set(value As Boolean)
_ShowBorder = value
End Set
End Property
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Dock = DockStyle.Bottom
End Sub
Protected Overrides Sub OnTextChanged(e As EventArgs)
MyBase.OnTextChanged(e) : Invalidate()
End Sub
<Category("Colours")>
Public Property RectangleColor As Color
Get
Return _RectColour
End Get
Set(value As Color)
_RectColour = value
End Set
End Property
Public Property ShowLine As Boolean
Get
Return _ShowLine
End Get
Set(value As Boolean)
_ShowLine = value
End Set
End Property
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
Font = New Font("Segoe UI", 9)
ForeColor = Color.White
Size = New Size(Width, 20)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim G = e.Graphics
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.Clear(BaseColour)
.FillRectangle(New SolidBrush(BaseColour), Base)
If _ShowLine = True Then
Select Case _LinesToShow
Case LinesCount.One
If _Alignment = Alignments.Left Then
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(22, 2, Width, Height), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
ElseIf _Alignment = Alignments.Center Then
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(0, 0, Width, Height), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Else
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(0, 0, Width - 5, Height), New StringFormat With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center})
End If
.FillRectangle(New SolidBrush(_RectColour), New Rectangle(5, 9, 14, 3))
Case LinesCount.Two
If _Alignment = Alignments.Left Then
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(22, 2, Width, Height), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
ElseIf _Alignment = Alignments.Center Then
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(0, 0, Width, Height), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
Else
.DrawString(Text, Font, New SolidBrush(_TextColour), New Rectangle(0, 0, Width - 22, Height), New StringFormat With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center})
End If
.FillRectangle(New SolidBrush(_RectColour), New Rectangle(5, 9, 14, 3))
.FillRectangle(New SolidBrush(_RectColour), New Rectangle(Width - 20, 9, 14, 3))
End Select
Else
.DrawString(Text, Font, Brushes.White, New Rectangle(5, 2, Width, Height), New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
End If
If _ShowBorder Then
.DrawLine(New Pen(_BorderColour, 2), New Point(0, 0), New Point(Width, 0))
Else
End If
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
<DefaultEvent("ToggleChanged")>
Public Class LogInOnOffSwitch
Inherits Control
#Region "Declarations"
Event ToggleChanged(ByVal sender As Object)
Private _Toggled As Toggles = Toggles.NotToggled
Private MouseXLoc As Integer
Private ToggleLocation As Integer = 0
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _NonToggledTextColour As Color = Color.FromArgb(125, 125, 125)
Private _ToggledColour As Color = Color.FromArgb(23, 119, 151)
#End Region
#Region "Properties & Events"
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property NonToggledTextColourderColour As Color
Get
Return _NonToggledTextColour
End Get
Set(value As Color)
_NonToggledTextColour = value
Invalidate()
End Set
End Property
<Category("Colours")>
Public Property ToggledColour As Color
Get
Return _ToggledColour
End Get
Set(value As Color)
_ToggledColour = value
Invalidate()
End Set
End Property
Enum Toggles
Toggled
NotToggled
End Enum
Event ToggledChanged()
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
MouseXLoc = e.Location.X
Invalidate()
If e.X < Width - 40 AndAlso e.X > 40 Then Cursor = Cursors.IBeam Else Cursor = Cursors.Arrow
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
If MouseXLoc > Width - 39 Then
_Toggled = Toggles.Toggled
ToggledValue()
ElseIf MouseXLoc < 39 Then
_Toggled = Toggles.NotToggled
ToggledValue()
End If
Invalidate()
End Sub
Public Property Toggled() As Toggles
Get
Return _Toggled
End Get
Set(ByVal value As Toggles)
_Toggled = value
Invalidate()
End Set
End Property
Private Sub ToggledValue()
If CBool(_Toggled) Then
If ToggleLocation < 100 Then
ToggleLocation += 10
End If
Else
If ToggleLocation > 0 Then
ToggleLocation -= 10
End If
End If
Invalidate()
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True)
BackColor = Color.FromArgb(54, 54, 54)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim G As Graphics = e.Graphics
With G
.Clear(BackColor)
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.InterpolationMode = InterpolationMode.HighQualityBicubic
.FillRectangle(New SolidBrush(_BaseColour), New Rectangle(0, 0, 39, Height))
.FillRectangle(New SolidBrush(_BaseColour), New Rectangle(Width - 40, 0, Width, Height))
.FillRectangle(New SolidBrush(_BaseColour), New Rectangle(38, 9, Width - 40, 5))
Dim P As Point() = {New Point(0, 0), New Point(39, 0), New Point(39, 9), New Point(Width - 40, 9), New Point(Width - 40, 0),
New Point(Width - 2, 0), New Point(Width - 2, Height - 1), New Point(Width - 40, Height - 1),
New Point(Width - 40, 14), New Point(39, 14), New Point(39, Height - 1), New Point(0, Height - 1), New Point()}
.DrawLines(New Pen(_BorderColour, 2), P)
If _Toggled = Toggles.Toggled Then
.FillRectangle(New SolidBrush(_ToggledColour), New Rectangle(CInt(Width / 2), 10, CInt(Width / 2 - 38), 3))
.FillRectangle(New SolidBrush(_ToggledColour), New Rectangle(Width - 39, 2, 36, Height - 5))
.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), New SolidBrush(_TextColour), New Rectangle(2, -1, CInt(Width - 20 + 20 / 3), Height), New StringFormat() With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center})
.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), New SolidBrush(_NonToggledTextColour), New Rectangle(CInt(20 - 20 / 3 - 6), -1, CInt(Width - 20 + 20 / 3), Height), New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center})
ElseIf _Toggled = Toggles.NotToggled Then
.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), New SolidBrush(_TextColour), New Rectangle(CInt(20 - 20 / 3 - 6), -1, CInt(Width - 20 + 20 / 3), Height), New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center})
.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), New SolidBrush(_NonToggledTextColour), New Rectangle(2, -1, CInt(Width - 20 + 20 / 3), Height), New StringFormat() With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center})
End If
.DrawLine(New Pen(_BorderColour, 2), New Point(CInt(Width / 2), 0), New Point(CInt(Width / 2), Height))
End With
End Sub
#End Region
End Class
Public Class LogInComboBox
Inherits ComboBox
#Region "Declarations"
Private _StartIndex As Integer = 0
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BaseColour As Color = Color.FromArgb(42, 42, 42)
Private _FontColour As Color = Color.FromArgb(255, 255, 255)
Private _LineColour As Color = Color.FromArgb(23, 119, 151)
Private _SqaureColour As Color = Color.FromArgb(47, 47, 47)
Private _ArrowColour As Color = Color.FromArgb(30, 30, 30)
Private _SqaureHoverColour As Color = Color.FromArgb(52, 52, 52)
Private State As MouseState = MouseState.None
#End Region
#Region "Properties & Events"
<Category("Colours")>
Public Property LineColour As Color
Get
Return _LineColour
End Get
Set(value As Color)
_LineColour = value
End Set
End Property
<Category("Colours")>
Public Property SqaureColour As Color
Get
Return _SqaureColour
End Get
Set(value As Color)
_SqaureColour = value
End Set
End Property
<Category("Colours")>
Public Property ArrowColour As Color
Get
Return _ArrowColour
End Get
Set(value As Color)
_ArrowColour = value
End Set
End Property
<Category("Colours")>
Public Property SqaureHoverColour As Color
Get
Return _SqaureHoverColour
End Get
Set(value As Color)
_SqaureHoverColour = value
End Set
End Property
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property FontColour As Color
Get
Return _FontColour
End Get
Set(value As Color)
_FontColour = value
End Set
End Property
Public Property StartIndex As Integer
Get
Return _StartIndex
End Get
Set(ByVal value As Integer)
_StartIndex = value
Try
MyBase.SelectedIndex = value
Catch
End Try
Invalidate()
End Set
End Property
Protected Overrides Sub OnTextChanged(e As System.EventArgs)
MyBase.OnTextChanged(e)
Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
Invalidate()
OnMouseClick(e)
End Sub
Protected Overrides Sub OnMouseUp(e As System.Windows.Forms.MouseEventArgs)
Invalidate()
MyBase.OnMouseUp(e)
End Sub
#End Region
#Region "Draw Control"
Sub ReplaceItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
e.DrawBackground()
e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
Dim Rect As New Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width + 1, e.Bounds.Height + 1)
Try
With e.Graphics
If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
.FillRectangle(New SolidBrush(_SqaureColour), Rect)
.DrawString(MyBase.GetItemText(MyBase.Items(e.Index)), Font, New SolidBrush(_FontColour), 1, e.Bounds.Top + 2)
Else
.FillRectangle(New SolidBrush(_BaseColour), Rect)
.DrawString(MyBase.GetItemText(MyBase.Items(e.Index)), Font, New SolidBrush(_FontColour), 1, e.Bounds.Top + 2)
End If
End With
Catch
End Try
e.DrawFocusRectangle()
Invalidate()
End Sub
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.Transparent
DrawMode = DrawMode.OwnerDrawFixed
DropDownStyle = ComboBoxStyle.DropDownList
Width = 163
Font = New Font("Segoe UI", 10)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(BackColor)
Try
Dim Square As New Rectangle(Width - 25, 0, Width, Height)
.FillRectangle(New SolidBrush(_BaseColour), New Rectangle(0, 0, Width - 25, Height))
Select Case State
Case MouseState.None
.FillRectangle(New SolidBrush(_SqaureColour), Square)
Case MouseState.Over
.FillRectangle(New SolidBrush(_SqaureHoverColour), Square)
End Select
.DrawLine(New Pen(_LineColour, 2), New Point(Width - 26, 1), New Point(Width - 26, Height - 1))
Try
.DrawString(Text, Font, New SolidBrush(_FontColour), New Rectangle(3, 0, Width - 20, Height), New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Near})
Catch : End Try
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
Dim P() As Point = {New Point(Width - 17, 11), New Point(Width - 13, 5), New Point(Width - 9, 11)}
.FillPolygon(New SolidBrush(_BorderColour), P)
.DrawPolygon(New Pen(_ArrowColour), P)
Dim P1() As Point = {New Point(Width - 17, 15), New Point(Width - 13, 21), New Point(Width - 9, 15)}
.FillPolygon(New SolidBrush(_BorderColour), P1)
.DrawPolygon(New Pen(_ArrowColour), P1)
Catch
End Try
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInTabControl
Inherits TabControl
#Region "Declarations"
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BackTabColour As Color = Color.FromArgb(54, 54, 54)
Private _BaseColour As Color = Color.FromArgb(35, 35, 35)
Private _ActiveColour As Color = Color.FromArgb(47, 47, 47)
Private _BorderColour As Color = Color.FromArgb(30, 30, 30)
Private _UpLineColour As Color = Color.FromArgb(0, 160, 199)
Private _HorizLineColour As Color = Color.FromArgb(23, 119, 151)
Private CenterSF As New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
#End Region
#Region "Properties"
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property UpLineColour As Color
Get
Return _UpLineColour
End Get
Set(value As Color)
_UpLineColour = value
End Set
End Property
<Category("Colours")>
Public Property HorizontalLineColour As Color
Get
Return _HorizLineColour
End Get
Set(value As Color)
_HorizLineColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property BackTabColour As Color
Get
Return _BackTabColour
End Get
Set(value As Color)
_BackTabColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ActiveColour As Color
Get
Return _ActiveColour
End Get
Set(value As Color)
_ActiveColour = value
End Set
End Property
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Alignment = TabAlignment.Top
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
Font = New Font("Segoe UI", 10)
SizeMode = TabSizeMode.Normal
ItemSize = New Size(240, 32)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g = e.Graphics
With g
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.Clear(_BaseColour)
Try : SelectedTab.BackColor = _BackTabColour : Catch : End Try
Try : SelectedTab.BorderStyle = BorderStyle.FixedSingle : Catch : End Try
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(0, 0, Width, Height))
For i = 0 To TabCount - 1
Dim Base As New Rectangle(New Point(GetTabRect(i).Location.X, GetTabRect(i).Location.Y), New Size(GetTabRect(i).Width, GetTabRect(i).Height))
Dim BaseSize As New Rectangle(Base.Location, New Size(Base.Width, Base.Height))
If i = SelectedIndex Then
.FillRectangle(New SolidBrush(_BaseColour), BaseSize)
.FillRectangle(New SolidBrush(_ActiveColour), New Rectangle(Base.X + 1, Base.Y - 3, Base.Width, Base.Height + 5))
.DrawString(TabPages(i).Text, Font, New SolidBrush(_TextColour), New Rectangle(Base.X + 7, Base.Y, Base.Width - 3, Base.Height), CenterSF)
.DrawLine(New Pen(_HorizLineColour, 2), New Point(Base.X + 3, CInt(Base.Height / 2 + 2)), New Point(Base.X + 9, CInt(Base.Height / 2 + 2)))
.DrawLine(New Pen(_UpLineColour, 2), New Point(Base.X + 3, Base.Y - 3), New Point(Base.X + 3, Base.Height + 5))
Else
.DrawString(TabPages(i).Text, Font, New SolidBrush(_TextColour), BaseSize, CenterSF)
End If
Next
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
Public Class LogInTrackBar
Inherits Control
#Region "Declaration"
Private _Maximum As Integer = 10
Private _Value As Integer = 0
Private CaptureMovement As Boolean = False
Private Bar As Rectangle = New Rectangle(0, 10, Width - 21, Height - 21)
Private Track As Size = New Size(25, 14)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _BarBaseColour As Color = Color.FromArgb(47, 47, 47)
Private _StripColour As Color = Color.FromArgb(42, 42, 42)
Private _StripAmountColour As Color = Color.FromArgb(23, 119, 151)
#End Region
#Region "Properties"
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
<Category("Colours")>
Public Property BarBaseColour As Color
Get
Return _BarBaseColour
End Get
Set(value As Color)
_BarBaseColour = value
End Set
End Property
<Category("Colours")>
Public Property StripColour As Color
Get
Return _StripColour
End Get
Set(value As Color)
_StripColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Colours")>
Public Property StripAmountColour As Color
Get
Return _StripAmountColour
End Get
Set(value As Color)
_StripAmountColour = value
End Set
End Property
Public Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(ByVal value As Integer)
If value > 0 Then _Maximum = value
If value < _Value Then _Value = value
Invalidate()
End Set
End Property
Event ValueChanged()
Public Property Value() As Integer
Get
Return _Value
End Get
Set(ByVal value As Integer)
Select Case value
Case Is = _Value
Exit Property
Case Is < 0
_Value = 0
Case Is > _Maximum
_Value = _Maximum
Case Else
_Value = value
End Select
Invalidate()
RaiseEvent ValueChanged()
End Set
End Property
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
CaptureMovement = False
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
MyBase.OnMouseMove(e)
If CaptureMovement Then
Dim MovementPoint As New Point(e.X, e.Y)
Dim Bar As New Rectangle(10, 10, Width - 21, Height - 21)
Value = CInt(Maximum * ((MovementPoint.X - Bar.X) / Bar.Width))
End If
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
MyBase.OnMouseLeave(e) : CaptureMovement = False
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.FromArgb(54, 54, 54)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g = e.Graphics
With g
.SmoothingMode = SmoothingMode.AntiAlias
.PixelOffsetMode = PixelOffsetMode.HighQuality
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
Bar = New Rectangle(13, 11, Width - 27, Height - 21)
.Clear(BackColor)
.TextRenderingHint = TextRenderingHint.AntiAliasGridFit
.FillRectangle(New SolidBrush(_StripColour), New Rectangle(3, CInt((Height / 2) - 4), Width - 5, 8))
.DrawRectangle(New Pen(_BorderColour, 2), New Rectangle(4, CInt((Height / 2) - 4), Width - 5, 8))
.FillRectangle(New SolidBrush(_StripAmountColour), New Rectangle(4, CInt((Height / 2) - 4), CInt(Bar.Width * (Value / Maximum)) + CInt(Track.Width / 2), 8))
.FillRectangle(New SolidBrush(_BarBaseColour), Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), Bar.Y + CInt((Bar.Height / 2)) - CInt(Track.Height / 2), Track.Width, Track.Height)
.DrawRectangle(New Pen(_BorderColour, 2), Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), Bar.Y + CInt((Bar.Height / 2)) - CInt(Track.Height / 2), Track.Width, Track.Height)
.DrawString(CStr(_Value), New Font("Segoe UI", 6.5, FontStyle.Regular), New SolidBrush(_TextColour), New Rectangle(Bar.X + CInt(Bar.Width * (Value / Maximum)) - CInt(Track.Width / 2), Bar.Y + CInt((Bar.Height / 2)) - CInt(Track.Height / 2), Track.Width - 1, Track.Height), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
<DefaultEvent("Scroll")>
Public Class LogInVerticalScrollBar
Inherits Control
#Region "Declarations"
Private ThumbMovement As Integer
Private TSA As Rectangle
Private BSA As Rectangle
Private Shaft As Rectangle
Private Thumb As Rectangle
Private ShowThumb As Boolean
Private ThumbPressed As Boolean
Private _ThumbSize As Integer = 24
Public _Minimum As Integer = 0
Public _Maximum As Integer = 100
Public _Value As Integer = 0
Public _SmallChange As Integer = 1
Private _ButtonSize As Integer = 16
Public _LargeChange As Integer = 10
Private _ThumbBorder As Color = Color.FromArgb(35, 35, 35)
Private _LineColour As Color = Color.FromArgb(23, 119, 151)
Private _ArrowColour As Color = Color.FromArgb(37, 37, 37)
Private _BaseColour As Color = Color.FromArgb(47, 47, 47)
Private _ThumbColour As Color = Color.FromArgb(55, 55, 55)
Private _ThumbSecondBorder As Color = Color.FromArgb(65, 65, 65)
Private _FirstBorder As Color = Color.FromArgb(55, 55, 55)
Private _SecondBorder As Color = Color.FromArgb(35, 35, 35)
#End Region
#Region "Properties & Events"
<Category("Colours")>
Public Property ThumbBorder As Color
Get
Return _ThumbBorder
End Get
Set(value As Color)
_ThumbBorder = value
End Set
End Property
<Category("Colours")>
Public Property LineColour As Color
Get
Return _LineColour
End Get
Set(value As Color)
_LineColour = value
End Set
End Property
<Category("Colours")>
Public Property ArrowColour As Color
Get
Return _ArrowColour
End Get
Set(value As Color)
_ArrowColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ThumbColour As Color
Get
Return _ThumbColour
End Get
Set(value As Color)
_ThumbColour = value
End Set
End Property
<Category("Colours")>
Public Property ThumbSecondBorder As Color
Get
Return _ThumbSecondBorder
End Get
Set(value As Color)
_ThumbSecondBorder = value
End Set
End Property
<Category("Colours")>
Public Property FirstBorder As Color
Get
Return _FirstBorder
End Get
Set(value As Color)
_FirstBorder = value
End Set
End Property
<Category("Colours")>
Public Property SecondBorder As Color
Get
Return _SecondBorder
End Get
Set(value As Color)
_SecondBorder = value
End Set
End Property
Event Scroll(ByVal sender As Object)
Property Minimum() As Integer
Get
Return _Minimum
End Get
Set(ByVal value As Integer)
_Minimum = value
If value > _Value Then _Value = value
If value > _Maximum Then _Maximum = value
InvalidateLayout()
End Set
End Property
Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(ByVal value As Integer)
If value < _Value Then _Value = value
If value < _Minimum Then _Minimum = value
End Set
End Property
Property Value() As Integer
Get
Return _Value
End Get
Set(ByVal value As Integer)
Select Case value
Case Is = _Value
Exit Property
Case Is < _Minimum
_Value = _Minimum
Case Is > _Maximum
_Value = _Maximum
Case Else
_Value = value
End Select
InvalidatePosition()
RaiseEvent Scroll(Me)
End Set
End Property
Public Property SmallChange() As Integer
Get
Return _SmallChange
End Get
Set(ByVal value As Integer)
Select Case value
Case Is < 1
Case Is >
CInt(_SmallChange = value)
End Select
End Set
End Property
Public Property LargeChange() As Integer
Get
Return _LargeChange
End Get
Set(ByVal value As Integer)
Select Case value
Case Is < 1
Case Else
_LargeChange = value
End Select
End Set
End Property
Public Property ButtonSize As Integer
Get
Return _ButtonSize
End Get
Set(value As Integer)
Select Case value
Case Is < 16
_ButtonSize = 16
Case Else
_ButtonSize = value
End Select
End Set
End Property
Protected Overrides Sub OnSizeChanged(e As EventArgs)
InvalidateLayout()
End Sub
Private Sub InvalidateLayout()
TSA = New Rectangle(0, 1, Width, 0)
Shaft = New Rectangle(0, TSA.Bottom - 1, Width, Height - 3)
ShowThumb = CBool(((_Maximum - _Minimum)))
If ShowThumb Then
Thumb = New Rectangle(1, 0, Width - 3, _ThumbSize)
End If
RaiseEvent Scroll(Me)
InvalidatePosition()
End Sub
Private Sub InvalidatePosition()
Thumb.Y = CInt(((_Value - _Minimum) / (_Maximum - _Minimum)) * (Shaft.Height - _ThumbSize) + 1)
Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left AndAlso ShowThumb Then
If TSA.Contains(e.Location) Then
ThumbMovement = _Value - _SmallChange
ElseIf BSA.Contains(e.Location) Then
ThumbMovement = _Value + _SmallChange
Else
If Thumb.Contains(e.Location) Then
ThumbPressed = True
Return
Else
If e.Y < Thumb.Y Then
ThumbMovement = _Value - _LargeChange
Else
ThumbMovement = _Value + _LargeChange
End If
End If
End If
Value = Math.Min(Math.Max(ThumbMovement, _Minimum), _Maximum)
InvalidatePosition()
End If
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If ThumbPressed AndAlso ShowThumb Then
Dim ThumbPosition As Integer = e.Y - TSA.Height - (_ThumbSize \ 2)
Dim ThumbBounds As Integer = Shaft.Height - _ThumbSize
ThumbMovement = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
Value = Math.Min(Math.Max(ThumbMovement, _Minimum), _Maximum)
InvalidatePosition()
End If
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
ThumbPressed = False
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(24, 50)
End Sub
Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(_BaseColour)
Dim P() As Point = {New Point(CInt(Width / 2), 5), New Point(CInt(Width / 4), 13), New Point(CInt(Width / 2 - 2), 13), New Point(CInt(Width / 2 - 2), Height - 13),
New Point(CInt(Width / 4), Height - 13), New Point(CInt(Width / 2), Height - 5), New Point(CInt(Width - Width / 4 - 1), Height - 13), New Point(CInt(Width / 2 + 2), Height - 13),
New Point(CInt(Width / 2 + 2), 13), New Point(CInt(Width - Width / 4 - 1), 13)}
.FillPolygon(New SolidBrush(_ArrowColour), P)
.FillRectangle(New SolidBrush(_ThumbColour), Thumb)
.DrawRectangle(New Pen(_ThumbBorder), Thumb)
.DrawRectangle(New Pen(_ThumbSecondBorder), Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
.DrawLine(New Pen(_LineColour, 2), New Point(CInt(Thumb.Width / 2 + 1), Thumb.Y + 4), New Point(CInt(Thumb.Width / 2 + 1), Thumb.Bottom - 4))
.DrawRectangle(New Pen(_FirstBorder), 0, 0, Width - 1, Height - 1)
.DrawRectangle(New Pen(_SecondBorder), 1, 1, Width - 3, Height - 3)
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
<DefaultEvent("Scroll")>
Public Class LogInHorizontalScrollBar
Inherits Control
#Region "Declarations"
Private ThumbMovement As Integer
Private LSA As Rectangle
Private RSA As Rectangle
Private Shaft As Rectangle
Private Thumb As Rectangle
Private ShowThumb As Boolean
Private ThumbPressed As Boolean
Private _ThumbSize As Integer = 24
Private _Minimum As Integer = 0
Private _Maximum As Integer = 100
Private _Value As Integer = 0
Private _SmallChange As Integer = 1
Private _ButtonSize As Integer = 16
Private _LargeChange As Integer = 10
Private _ThumbBorder As Color = Color.FromArgb(35, 35, 35)
Private _LineColour As Color = Color.FromArgb(23, 119, 151)
Private _ArrowColour As Color = Color.FromArgb(37, 37, 37)
Private _BaseColour As Color = Color.FromArgb(47, 47, 47)
Private _ThumbColour As Color = Color.FromArgb(55, 55, 55)
Private _ThumbSecondBorder As Color = Color.FromArgb(65, 65, 65)
Private _FirstBorder As Color = Color.FromArgb(55, 55, 55)
Private _SecondBorder As Color = Color.FromArgb(35, 35, 35)
Private ThumbDown As Boolean = False
#End Region
#Region "Properties & Events"
<Category("Colours")>
Public Property ThumbBorder As Color
Get
Return _ThumbBorder
End Get
Set(value As Color)
_ThumbBorder = value
End Set
End Property
<Category("Colours")>
Public Property LineColour As Color
Get
Return _LineColour
End Get
Set(value As Color)
_LineColour = value
End Set
End Property
<Category("Colours")>
Public Property ArrowColour As Color
Get
Return _ArrowColour
End Get
Set(value As Color)
_ArrowColour = value
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property ThumbColour As Color
Get
Return _ThumbColour
End Get
Set(value As Color)
_ThumbColour = value
End Set
End Property
<Category("Colours")>
Public Property ThumbSecondBorder As Color
Get
Return _ThumbSecondBorder
End Get
Set(value As Color)
_ThumbSecondBorder = value
End Set
End Property
<Category("Colours")>
Public Property FirstBorder As Color
Get
Return _FirstBorder
End Get
Set(value As Color)
_FirstBorder = value
End Set
End Property
<Category("Colours")>
Public Property SecondBorder As Color
Get
Return _SecondBorder
End Get
Set(value As Color)
_SecondBorder = value
End Set
End Property
Event Scroll(ByVal sender As Object)
Property Minimum() As Integer
Get
Return _Minimum
End Get
Set(ByVal value As Integer)
_Minimum = value
If value > _Value Then _Value = value
If value > _Maximum Then _Maximum = value
InvalidateLayout()
End Set
End Property
Property Maximum() As Integer
Get
Return _Maximum
End Get
Set(ByVal value As Integer)
If value < _Value Then _Value = value
If value < _Minimum Then _Minimum = value
End Set
End Property
Property Value() As Integer
Get
Return _Value
End Get
Set(ByVal value As Integer)
Select Case value
Case Is = _Value
Exit Property
Case Is < _Minimum
_Value = _Minimum
Case Is > _Maximum
_Value = _Maximum
Case Else
_Value = value
End Select
InvalidatePosition()
RaiseEvent Scroll(Me)
End Set
End Property
Public Property SmallChange() As Integer
Get
Return _SmallChange
End Get
Set(ByVal value As Integer)
Select Case value
Case Is < 1
Case Is >
CInt(_SmallChange = value)
End Select
End Set
End Property
Public Property LargeChange() As Integer
Get
Return _LargeChange
End Get
Set(ByVal value As Integer)
Select Case value
Case Is < 1
Case Else
_LargeChange = value
End Select
End Set
End Property
Public Property ButtonSize As Integer
Get
Return _ButtonSize
End Get
Set(value As Integer)
Select Case value
Case Is < 16
_ButtonSize = 16
Case Else
_ButtonSize = value
End Select
End Set
End Property
Protected Overrides Sub OnSizeChanged(e As EventArgs)
InvalidateLayout()
End Sub
Private Sub InvalidateLayout()
LSA = New Rectangle(0, 1, 0, Height)
Shaft = New Rectangle(LSA.Right + 1, 0, Width - 3, Height)
ShowThumb = CBool(((_Maximum - _Minimum)))
Thumb = New Rectangle(0, 1, _ThumbSize, Height - 3)
RaiseEvent Scroll(Me)
InvalidatePosition()
End Sub
Private Sub InvalidatePosition()
Thumb.X = CInt(((_Value - _Minimum) / (_Maximum - _Minimum)) * (Shaft.Width - _ThumbSize) + 1)
Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left AndAlso ShowThumb Then
If LSA.Contains(e.Location) Then
ThumbMovement = _Value - _SmallChange
ElseIf RSA.Contains(e.Location) Then
ThumbMovement = _Value + _SmallChange
Else
If Thumb.Contains(e.Location) Then
ThumbDown = True
Return
Else
If e.X < Thumb.X Then
ThumbMovement = _Value - _LargeChange
Else
ThumbMovement = _Value + _LargeChange
End If
End If
End If
Value = Math.Min(Math.Max(ThumbMovement, _Minimum), _Maximum)
InvalidatePosition()
End If
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If ThumbDown AndAlso ShowThumb Then
Dim ThumbPosition As Integer = e.X - LSA.Width - (_ThumbSize \ 2)
Dim ThumbBounds As Integer = Shaft.Width - _ThumbSize
ThumbMovement = CInt((ThumbPosition / ThumbBounds) * (_Maximum - _Minimum)) + _Minimum
Value = Math.Min(Math.Max(ThumbMovement, _Minimum), _Maximum)
InvalidatePosition()
End If
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
ThumbDown = False
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Height = 18
End Sub
Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(Color.FromArgb(47, 47, 47))
Dim P() As Point = {New Point(5, CInt(Height / 2)), New Point(13, CInt(Height / 4)), New Point(13, CInt(Height / 2 - 2)), New Point(Width - 13, CInt(Height / 2 - 2)),
New Point(Width - 13, CInt(Height / 4)), New Point(Width - 5, CInt(Height / 2)), New Point(Width - 13, CInt(Height - Height / 4 - 1)), New Point(Width - 13, CInt(Height / 2 + 2)),
New Point(13, CInt(Height / 2 + 2)), New Point(13, CInt(Height - Height / 4 - 1))}
.FillPolygon(New SolidBrush(_ArrowColour), P)
.FillRectangle(New SolidBrush(_ThumbColour), Thumb)
.DrawRectangle(New Pen(_ThumbBorder), Thumb)
.DrawRectangle(New Pen(_ThumbSecondBorder), Thumb.X + 1, Thumb.Y + 1, Thumb.Width - 2, Thumb.Height - 2)
.DrawLine(New Pen((_LineColour), 2), New Point(Thumb.X + 4, (CInt(Thumb.Height / 2 + 1))), New Point(Thumb.Right - 4, (CInt(Thumb.Height / 2 + 1))))
.DrawRectangle(New Pen(_FirstBorder), 0, 0, Width - 1, Height - 1)
.DrawRectangle(New Pen(_SecondBorder), 1, 1, Width - 3, Height - 3)
.InterpolationMode = InterpolationMode.HighQualityBicubic
End With
End Sub
#End Region
End Class
Public Class LogInTitledListBoxWBuiltInScrollBar
Inherits Control
#Region "Declarations"
Private _Items As New List(Of LogInListBoxItem)
Private ReadOnly _SelectedItems As New List(Of LogInListBoxItem)
Private _MultiSelect As Boolean = True
Private ItemHeight As Integer = 24
Private ReadOnly VerticalScrollbar As LogInVerticalScrollBar
Private _BaseColour As Color = Color.FromArgb(55, 55, 55)
Private _SelectedItemColour As Color = Color.FromArgb(50, 50, 50)
Private _NonSelectedItemColour As Color = Color.FromArgb(47, 47, 47)
Private _TitleAreaColour As Color = Color.FromArgb(42, 42, 42)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _SelectedHeight As Integer = 1
#End Region
#Region "Properties"
<Category("Colours")>
Public Property TitleAreaColour As Color
Get
Return _TitleAreaColour
End Get
Set(value As Color)
_TitleAreaColour = value
End Set
End Property
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Control")>
Public Property SelectedHeight As Integer
Get
Return _SelectedHeight
End Get
Set(value As Integer)
If value < 1 Then
_SelectedHeight = Height
Else
_SelectedHeight = value
End If
InvalidateScroll()
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property SelectedItemColour As Color
Get
Return _SelectedItemColour
End Get
Set(value As Color)
_SelectedItemColour = value
End Set
End Property
<Category("Colours")>
Public Property NonSelectedItemColour As Color
Get
Return _NonSelectedItemColour
End Get
Set(value As Color)
_NonSelectedItemColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
Private Sub HandleScroll(ByVal sender As Object)
Invalidate()
End Sub
Private Sub InvalidateScroll()
Debug.Print(CStr(Height))
If CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight)) < CDbl((((_Items.Count) * ItemHeight) / _SelectedHeight)) Then
VerticalScrollbar._Maximum = CInt(Math.Ceiling(((_Items.Count) * ItemHeight) / _SelectedHeight))
ElseIf CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight)) = 0 Then
VerticalScrollbar._Maximum = 1
Else
VerticalScrollbar._Maximum = CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight))
End If
Invalidate()
End Sub
Private Sub InvalidateLayout()
VerticalScrollbar.Location = New Point(Width - VerticalScrollbar.Width - 2, 2)
VerticalScrollbar.Size = New Size(18, Height - 4)
Invalidate()
End Sub
Public Class LogInListBoxItem
Property Text As String
Public Overrides Function ToString() As String
Return Text
End Function
End Class
<System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Content)>
Public Property Items() As LogInListBoxItem()
Get
Return _Items.ToArray()
End Get
Set(ByVal value As LogInListBoxItem())
_Items = New List(Of LogInListBoxItem)(value)
Invalidate()
InvalidateScroll()
End Set
End Property
Public ReadOnly Property SelectedItems() As LogInListBoxItem()
Get
Return _SelectedItems.ToArray()
End Get
End Property
Public Property MultiSelect() As Boolean
Get
Return _MultiSelect
End Get
Set(ByVal value As Boolean)
_MultiSelect = value
If _SelectedItems.Count > 1 Then
_SelectedItems.RemoveRange(1, _SelectedItems.Count - 1)
End If
Invalidate()
End Set
End Property
Public Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
ItemHeight = CInt(Graphics.FromHwnd(Handle).MeasureString("@", Font).Height)
If VerticalScrollbar IsNot Nothing Then
VerticalScrollbar._SmallChange = 1
VerticalScrollbar._LargeChange = 1
End If
MyBase.Font = value
InvalidateLayout()
End Set
End Property
Public Sub AddItem(ByVal Items As String)
Dim Item As New LogInListBoxItem()
Item.Text = Items
_Items.Add(Item)
Invalidate()
InvalidateScroll()
End Sub
Public Sub AddItems(ByVal Items() As String)
For Each I In Items
Dim Item As New LogInListBoxItem()
Item.Text = I
_Items.Add(Item)
Next
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItemAt(ByVal index As Integer)
_Items.RemoveAt(index)
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItem(ByVal item As LogInListBoxItem)
_Items.Remove(item)
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItems(ByVal items As LogInListBoxItem())
For Each I As LogInListBoxItem In items
_Items.Remove(I)
Next
Invalidate()
InvalidateScroll()
End Sub
Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
_SelectedHeight = Height
InvalidateScroll()
InvalidateLayout()
MyBase.OnSizeChanged(e)
End Sub
Private Sub Vertical_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
Focus()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
Focus()
If e.Button = MouseButtons.Left Then
Dim Offset As Integer = CInt(VerticalScrollbar.Value * (VerticalScrollbar.Maximum + (Height - (ItemHeight))))
Dim Index As Integer = ((e.Y + Offset) \ ItemHeight)
If Index > _Items.Count - 1 Then Index = -1
If Not Index = -1 Then
If ModifierKeys = Keys.Control AndAlso _MultiSelect Then
If _SelectedItems.Contains(_Items(Index)) Then
_SelectedItems.Remove(_Items(Index))
Else
_SelectedItems.Add(_Items(Index))
End If
Else
_SelectedItems.Clear()
_SelectedItems.Add(_Items(Index))
End If
Debug.Print(CStr(_SelectedItems(0).Text))
End If
Invalidate()
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
Dim Move As Integer = -((e.Delta * SystemInformation.MouseWheelScrollLines \ 120) * (2 \ 2))
Dim Value As Integer = Math.Max(Math.Min(VerticalScrollbar.Value + Move, VerticalScrollbar.Maximum), VerticalScrollbar.Minimum)
VerticalScrollbar.Value = Value
MyBase.OnMouseWheel(e)
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
VerticalScrollbar = New LogInVerticalScrollBar
VerticalScrollbar.SmallChange = 1
VerticalScrollbar.LargeChange = 1
AddHandler VerticalScrollbar.Scroll, AddressOf HandleScroll
AddHandler VerticalScrollbar.MouseDown, AddressOf Vertical_MouseDown
Controls.Add(VerticalScrollbar)
InvalidateLayout()
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim G = e.Graphics
With G
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(_BaseColour)
Dim AllItems As LogInListBoxItem
Dim Offset As Integer = CInt(VerticalScrollbar.Value * (VerticalScrollbar.Maximum + (Height - (ItemHeight))))
Dim StartIndex As Integer
If Offset = 0 Then StartIndex = 0 Else StartIndex = CInt(Offset \ ItemHeight \ VerticalScrollbar.Maximum)
Dim EndIndex As Integer = Math.Min(StartIndex + (Height \ ItemHeight), _Items.Count - 1)
For I As Integer = StartIndex To _Items.Count - 1
AllItems = Items(I)
Dim Y As Integer = (ItemHeight + (I * ItemHeight) + 1 - Offset) + CInt((ItemHeight / 2) - 8)
If _SelectedItems.Contains(AllItems) Then
.FillRectangle(New SolidBrush(_SelectedItemColour), New Rectangle(0, ItemHeight + (I * ItemHeight) + 1 - Offset, Width - 19, ItemHeight - 1))
Else
.FillRectangle(New SolidBrush(_NonSelectedItemColour), New Rectangle(0, ItemHeight + (I * ItemHeight) + 1 - Offset, Width - 19, ItemHeight - 1))
End If
.DrawLine(New Pen(_BorderColour), 0, (ItemHeight + (I * ItemHeight) + 1 - Offset) + ItemHeight - 1, Width - 18, (ItemHeight + (I * ItemHeight) + 1 - Offset) + ItemHeight - 1)
.DrawString(AllItems.Text, New Font("Segoe UI", 8), New SolidBrush(_TextColour), 9, Y)
.ResetClip()
Next
.FillRectangle(New SolidBrush(_TitleAreaColour), New Rectangle(0, 0, Width, ItemHeight))
.DrawRectangle(New Pen(Color.FromArgb(35, 35, 35)), 1, 1, Width - 3, ItemHeight - 2)
.DrawString(Text, New Font("Segoe UI", 10, FontStyle.Bold), New SolidBrush(_TextColour), New Rectangle(0, 0, Width, ItemHeight + 2), New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center})
.DrawRectangle(New Pen(Color.FromArgb(35, 35, 35), 2), 1, 0, Width - 2, Height - 1)
.DrawLine(New Pen(_BorderColour), 0, ItemHeight, Width, ItemHeight)
.DrawLine(New Pen(_BorderColour, 2), VerticalScrollbar.Location.X - 1, 0, VerticalScrollbar.Location.X - 1, Height)
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
Public Class LogInListBoxWBuiltInScrollBar
Inherits Control
#Region "Declarations"
Private _Items As New List(Of LogInListBoxItem)
Private ReadOnly _SelectedItems As New List(Of LogInListBoxItem)
Private _MultiSelect As Boolean = True
Private ItemHeight As Integer = 24
Private ReadOnly VerticalScrollbar As LogInVerticalScrollBar
Private _BaseColour As Color = Color.FromArgb(55, 55, 55)
Private _SelectedItemColour As Color = Color.FromArgb(50, 50, 50)
Private _NonSelectedItemColour As Color = Color.FromArgb(47, 47, 47)
Private _BorderColour As Color = Color.FromArgb(35, 35, 35)
Private _TextColour As Color = Color.FromArgb(255, 255, 255)
Private _SelectedHeight As Integer = 1
#End Region
#Region "Properties"
<Category("Colours")>
Public Property TextColour As Color
Get
Return _TextColour
End Get
Set(value As Color)
_TextColour = value
End Set
End Property
<Category("Control")>
Public Property SelectedHeight As Integer
Get
Return _SelectedHeight
End Get
Set(value As Integer)
If value < 1 Then
_SelectedHeight = Height
Else
_SelectedHeight = value
End If
InvalidateScroll()
End Set
End Property
<Category("Colours")>
Public Property BaseColour As Color
Get
Return _BaseColour
End Get
Set(value As Color)
_BaseColour = value
End Set
End Property
<Category("Colours")>
Public Property SelectedItemColour As Color
Get
Return _SelectedItemColour
End Get
Set(value As Color)
_SelectedItemColour = value
End Set
End Property
<Category("Colours")>
Public Property NonSelectedItemColour As Color
Get
Return _NonSelectedItemColour
End Get
Set(value As Color)
_NonSelectedItemColour = value
End Set
End Property
<Category("Colours")>
Public Property BorderColour As Color
Get
Return _BorderColour
End Get
Set(value As Color)
_BorderColour = value
End Set
End Property
Private Sub HandleScroll(ByVal sender As Object)
Invalidate()
End Sub
Private Sub InvalidateScroll()
Debug.Print(CStr(Height))
If CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight)) < CDbl((((_Items.Count) * ItemHeight) / _SelectedHeight)) Then
VerticalScrollbar._Maximum = CInt(Math.Ceiling(((_Items.Count) * ItemHeight) / _SelectedHeight))
ElseIf CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight)) = 0 Then
VerticalScrollbar._Maximum = 1
Else
VerticalScrollbar._Maximum = CInt(Math.Round(((_Items.Count) * ItemHeight) / _SelectedHeight))
End If
Invalidate()
End Sub
Private Sub InvalidateLayout()
VerticalScrollbar.Location = New Point(Width - VerticalScrollbar.Width - 2, 2)
VerticalScrollbar.Size = New Size(18, Height - 4)
Invalidate()
End Sub
Public Class LogInListBoxItem
Property Text As String
Public Overrides Function ToString() As String
Return Text
End Function
End Class
<System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Content)>
Public Property Items() As LogInListBoxItem()
Get
Return _Items.ToArray()
End Get
Set(ByVal value As LogInListBoxItem())
_Items = New List(Of LogInListBoxItem)(value)
Invalidate()
InvalidateScroll()
End Set
End Property
Public ReadOnly Property SelectedItems() As LogInListBoxItem()
Get
Return _SelectedItems.ToArray()
End Get
End Property
Public Property MultiSelect() As Boolean
Get
Return _MultiSelect
End Get
Set(ByVal value As Boolean)
_MultiSelect = value
If _SelectedItems.Count > 1 Then
_SelectedItems.RemoveRange(1, _SelectedItems.Count - 1)
End If
Invalidate()
End Set
End Property
Public Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(ByVal value As Font)
ItemHeight = CInt(Graphics.FromHwnd(Handle).MeasureString("@", Font).Height)
If VerticalScrollbar IsNot Nothing Then
VerticalScrollbar._SmallChange = 1
VerticalScrollbar._LargeChange = 1
End If
MyBase.Font = value
InvalidateLayout()
End Set
End Property
Public Sub AddItem(ByVal Items As String)
Dim Item As New LogInListBoxItem()
Item.Text = Items
_Items.Add(Item)
Invalidate()
InvalidateScroll()
End Sub
Public Sub AddItems(ByVal Items() As String)
For Each I In Items
Dim Item As New LogInListBoxItem()
Item.Text = I
_Items.Add(Item)
Next
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItemAt(ByVal index As Integer)
_Items.RemoveAt(index)
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItem(ByVal item As LogInListBoxItem)
_Items.Remove(item)
Invalidate()
InvalidateScroll()
End Sub
Public Sub RemoveItems(ByVal items As LogInListBoxItem())
For Each I As LogInListBoxItem In items
_Items.Remove(I)
Next
Invalidate()
InvalidateScroll()
End Sub
Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
_SelectedHeight = Height
InvalidateScroll()
InvalidateLayout()
MyBase.OnSizeChanged(e)
End Sub
Private Sub Vertical_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
Focus()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
Focus()
If e.Button = MouseButtons.Left Then
Dim Offset As Integer = CInt(VerticalScrollbar.Value * (VerticalScrollbar.Maximum + (Height - (ItemHeight))))
Dim Index As Integer = ((e.Y + Offset) \ ItemHeight)
If Index > _Items.Count - 1 Then Index = -1
If Not Index = -1 Then
If ModifierKeys = Keys.Control AndAlso _MultiSelect Then
If _SelectedItems.Contains(_Items(Index)) Then
_SelectedItems.Remove(_Items(Index))
Else
_SelectedItems.Add(_Items(Index))
End If
Else
_SelectedItems.Clear()
_SelectedItems.Add(_Items(Index))
End If
Debug.Print(CStr(_SelectedItems(0).Text))
End If
Invalidate()
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
Dim Move As Integer = -((e.Delta * SystemInformation.MouseWheelScrollLines \ 120) * (2 \ 2))
Dim Value As Integer = Math.Max(Math.Min(VerticalScrollbar.Value + Move, VerticalScrollbar.Maximum), VerticalScrollbar.Minimum)
VerticalScrollbar.Value = Value
MyBase.OnMouseWheel(e)
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
VerticalScrollbar = New LogInVerticalScrollBar
VerticalScrollbar._SmallChange = 1
VerticalScrollbar._LargeChange = 1
AddHandler VerticalScrollbar.Scroll, AddressOf HandleScroll
AddHandler VerticalScrollbar.MouseDown, AddressOf Vertical_MouseDown
Controls.Add(VerticalScrollbar)
InvalidateLayout()
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Dim g = e.Graphics
With g
.TextRenderingHint = TextRenderingHint.ClearTypeGridFit
.SmoothingMode = SmoothingMode.HighQuality
.PixelOffsetMode = PixelOffsetMode.HighQuality
.Clear(_BaseColour)
Dim AllItems As LogInListBoxItem
Dim Offset As Integer = CInt(VerticalScrollbar.Value * (VerticalScrollbar.Maximum + (Height - (ItemHeight))))
Dim StartIndex As Integer
If Offset = 0 Then StartIndex = 0 Else StartIndex = CInt(Offset \ ItemHeight \ VerticalScrollbar.Maximum)
Dim EndIndex As Integer = Math.Min(StartIndex + (Height \ ItemHeight), _Items.Count - 1)
.DrawLine(New Pen(_BorderColour, 2), VerticalScrollbar.Location.X - 1, 0, VerticalScrollbar.Location.X - 1, Height)
For I As Integer = StartIndex To _Items.Count - 1
AllItems = Items(I)
Dim Y As Integer = ((I * ItemHeight) + 1 - Offset) + CInt((ItemHeight / 2) - 8)
If _SelectedItems.Contains(AllItems) Then
.FillRectangle(New SolidBrush(_SelectedItemColour), New Rectangle(0, (I * ItemHeight) + 1 - Offset, Width - 19, ItemHeight - 1))
Else
.FillRectangle(New SolidBrush(_NonSelectedItemColour), New Rectangle(0, (I * ItemHeight) + 1 - Offset, Width - 19, ItemHeight - 1))
End If
.DrawLine(New Pen(_BorderColour), 0, ((I * ItemHeight) + 1 - Offset) + ItemHeight - 1, Width - 18, ((I * ItemHeight) + 1 - Offset) + ItemHeight - 1)
.DrawString(AllItems.Text, New Font("Segoe UI", 8), New SolidBrush(_TextColour), 9, Y)
.ResetClip()
Next
.DrawRectangle(New Pen(Color.FromArgb(35, 35, 35), 2), 1, 1, Width - 2, Height - 2)
' .DrawLine(New Pen(_BorderColour), 0, ItemHeight, Width, ItemHeight)
.DrawLine(New Pen(_BorderColour, 2), VerticalScrollbar.Location.X - 1, 0, VerticalScrollbar.Location.X - 1, Height)
.InterpolationMode = CType(7, InterpolationMode)
End With
End Sub
#End Region
End Class
<DefaultEvent("SelectedIndexChanged")>
Public Class LogInPaginator
Inherits Control
#Region "Declarations"
Private GP1, GP2 As GraphicsPath
Private R1 As Rectangle
Private SZ1 As Size
Private PT1 As Point
Private P1, P2, P3 As Pen
Private B1, B2 As SolidBrush
#End Region
#Region "Functions"
Public Function RoundRectangle(ByVal Rectangle As Rectangle, ByVal Curve As Integer) As GraphicsPath
Dim P As GraphicsPath = New GraphicsPath()
Dim ArcRectangleWidth As Integer = Curve * 2
P.AddArc(New Rectangle(Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -180, 90)
P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), -90, 90)
P.AddArc(New Rectangle(Rectangle.Width - ArcRectangleWidth + Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 0, 90)
P.AddArc(New Rectangle(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y, ArcRectangleWidth, ArcRectangleWidth), 90, 90)
P.AddLine(New Point(Rectangle.X, Rectangle.Height - ArcRectangleWidth + Rectangle.Y), New Point(Rectangle.X, Curve + Rectangle.Y))
Return P
End Function
Public Function RoundRect(x!, y!, w!, h!, Optional r! = 0.3, Optional TL As Boolean = True, Optional TR As Boolean = True, Optional BR As Boolean = True, Optional BL As Boolean = True) As GraphicsPath
Dim d! = Math.Min(w, h) * r, xw = x + w, yh = y + h
RoundRect = New GraphicsPath
With RoundRect
If TL Then .AddArc(x, y, d, d, 180, 90) Else .AddLine(x, y, x, y)
If TR Then .AddArc(xw - d, y, d, d, 270, 90) Else .AddLine(xw, y, xw, y)
If BR Then .AddArc(xw - d, yh - d, d, d, 0, 90) Else .AddLine(xw, yh, xw, yh)
If BL Then .AddArc(x, yh - d, d, d, 90, 90) Else .AddLine(x, yh, x, yh)
.CloseFigure()
End With
End Function
#End Region
#Region "Properties & Events"
Public Event SelectedIndexChanged(sender As Object, e As EventArgs)
Private _SelectedIndex As Integer
Public Property SelectedIndex() As Integer
Get
Return _SelectedIndex
End Get
Set(ByVal value As Integer)
_SelectedIndex = Math.Max(Math.Min(value, MaximumIndex), 0)
Invalidate()
End Set
End Property
Private _NumberOfPages As Integer
Public Property NumberOfPages() As Integer
Get
Return _NumberOfPages
End Get
Set(ByVal value As Integer)
_NumberOfPages = value
_SelectedIndex = Math.Max(Math.Min(_SelectedIndex, MaximumIndex), 0)
Invalidate()
End Set
End Property
Public ReadOnly Property MaximumIndex As Integer
Get
Return NumberOfPages - 1
End Get
End Property
Private ItemWidth As Integer
Public Overrides Property Font As Font
Get
Return MyBase.Font
End Get
Set(value As Font)
MyBase.Font = value
Invalidate()
End Set
End Property
Private Sub InvalidateItems(ByVal e As PaintEventArgs)
Dim S As Size = e.Graphics.MeasureString("000 ..", Font).ToSize()
ItemWidth = S.Width + 10
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
If e.Button = MouseButtons.Left Then
Dim NewIndex As Integer
Dim OldIndex As Integer = _SelectedIndex
If _SelectedIndex < 4 Then
NewIndex = (e.X \ ItemWidth)
ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
NewIndex = (e.X \ ItemWidth)
Select Case NewIndex
Case 2
NewIndex = OldIndex
Case Is < 2
NewIndex = OldIndex - (2 - NewIndex)
Case Is > 2
NewIndex = OldIndex + (NewIndex - 2)
End Select
Else
NewIndex = MaximumIndex - (4 - (e.X \ ItemWidth))
End If
If (NewIndex < _NumberOfPages) AndAlso (Not NewIndex = OldIndex) Then
SelectedIndex = NewIndex
RaiseEvent SelectedIndexChanged(Me, Nothing)
End If
End If
MyBase.OnMouseDown(e)
End Sub
#End Region
#Region "Draw Control"
Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or
ControlStyles.UserPaint Or ControlStyles.Selectable Or
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
BackColor = Color.FromArgb(54, 54, 54)
Size = New Size(202, 26)
B1 = New SolidBrush(Color.FromArgb(50, 50, 50))
B2 = New SolidBrush(Color.FromArgb(55, 55, 55))
P1 = New Pen(Color.FromArgb(35, 35, 35))
P2 = New Pen(Color.FromArgb(23, 119, 151))
P3 = New Pen(Color.FromArgb(35, 35, 35))
End Sub
Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
InvalidateItems(e)
Dim g = e.Graphics
With g
.Clear(BackColor)
.SmoothingMode = SmoothingMode.AntiAlias
.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
Dim LeftEllipse, RightEllipse As Boolean
If _SelectedIndex < 4 Then
For I As Integer = 0 To Math.Min(MaximumIndex, 4)
RightEllipse = (I = 4) AndAlso (MaximumIndex > 4)
DrawBox(I * ItemWidth, I, False, RightEllipse, g)
Next
ElseIf _SelectedIndex > 3 AndAlso _SelectedIndex < (MaximumIndex - 3) Then
For I As Integer = 0 To 4
LeftEllipse = (I = 0)
RightEllipse = (I = 4)
DrawBox(I * ItemWidth, _SelectedIndex + I - 2, LeftEllipse, RightEllipse, g)
Next
Else
For I As Integer = 0 To 4
LeftEllipse = (I = 0) AndAlso (MaximumIndex > 4)
DrawBox(I * ItemWidth, MaximumIndex - (4 - I), LeftEllipse, False, g)
Next
End If
End With
End Sub
Private Sub DrawBox(ByVal x As Integer, ByVal index As Integer, ByVal leftEllipse As Boolean, ByVal rightEllipse As Boolean, ByVal g As Graphics)
R1 = New Rectangle(x, 0, ItemWidth - 4, Height - 1)
GP1 = RoundRectangle(R1, 4)
GP2 = RoundRectangle(New Rectangle(R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2), 4)
Dim T As String = CStr(index + 1)
If leftEllipse Then T = ".. " & T
If rightEllipse Then T = T & " .."
SZ1 = g.MeasureString(T, Font).ToSize()
PT1 = New Point(R1.X + (R1.Width \ 2 - SZ1.Width \ 2), R1.Y + (R1.Height \ 2 - SZ1.Height \ 2))
If index = _SelectedIndex Then
g.FillPath(B1, GP1)
Dim F As New Font(Font, FontStyle.Underline)
g.DrawString(T, F, Brushes.Black, PT1.X + 1, PT1.Y + 1)
g.DrawString(T, F, Brushes.White, PT1)
F.Dispose()
g.DrawPath(P1, GP2)
g.DrawPath(P2, GP1)
Else
g.FillPath(B2, GP1)
g.DrawString(T, Font, Brushes.Black, PT1.X + 1, PT1.Y + 1)
g.DrawString(T, Font, Brushes.White, PT1)
g.DrawPath(P3, GP2)
g.DrawPath(P1, GP1)
End If
End Sub
#End Region
End Class