Sunteți pe pagina 1din 104

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 = Windows.Forms.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 Windows.Forms.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 Windows.Forms.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 Windows.Forms.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 Windows.Forms.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 Windows.Forms.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 Windows.Forms.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 = Windows.Forms.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 = Windows.Forms.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 = Windows.Forms.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 OnMouseDown(ByVal e As Windows.Forms.MouseEventArgs)


MyBase.OnMouseDown(e)
Dim MovementPoint As New Rectangle(New Point(e.Location.X, e.Location.Y),
New Size(1, 1))
Dim Bar As New Rectangle(10, 10, Width - 21, Height - 21)
If New Rectangle(New Point(Bar.X + CInt(Bar.Width * (Value / Maximum)) -
CInt(Track.Width / 2 - 1), 0), New Size(Track.Width,
Height)).IntersectsWith(MovementPoint) Then
CaptureMovement = True
End If
End Sub

Protected Overrides Sub OnMouseUp(ByVal e As Windows.Forms.MouseEventArgs)


MyBase.OnMouseUp(e)
CaptureMovement = False
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As Windows.Forms.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 = Windows.Forms.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 = Windows.Forms.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.ComponentMod
el.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.ComponentMod
el.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 = Windows.Forms.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

S-ar putea să vă placă și