Imports System.Drawing.Drawing2D, System.ComponentModel
'''
''' Flat UI Theme
''' Coder: iSynthesis (HF)
''' Version: 1.0.1
''' Date Created: 16/06/2013
''' Date Changed: 18/06/2013
''' UID: 374648
'''
'''
Module Helpers
#Region " Variables"
Friend G As Graphics, B As Bitmap
Friend _FlatColor As Color = Color.FromArgb(35, 168, 109)
Friend NearSF As New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near}
Friend CenterSF As New StringFormat() With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
#End Region
#Region " Functions"
Public Function RoundRec(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
'-- Credit: AeonHack
Public Function DrawArrow(x As Integer, y As Integer, flip As Boolean) As GraphicsPath
Dim GP As New GraphicsPath()
Dim W As Integer = 12
Dim H As Integer = 6
If flip Then
GP.AddLine(x + 1, y, x + W + 1, y)
GP.AddLine(x + W, y, x + H, y + H - 1)
Else
GP.AddLine(x, y + H, x + W, y + H)
GP.AddLine(x + W, y + H, x + H, y)
End If
GP.CloseFigure()
Return GP
End Function
#End Region
End Module
#Region " Mouse States"
Enum MouseState As Byte
None = 0
Over = 1
Down = 2
Block = 3
End Enum
#End Region
Class FormSkin : Inherits ContainerControl
#Region " Variables"
Private W, H As Integer
Private Cap As Boolean = False
Private _HeaderMaximize As Boolean = False
Private MousePoint As New Point(0, 0)
Private MoveHeight = 50
#End Region
#Region " Properties"
#Region " Colors"
_
Public Property HeaderColor() As Color
Get
Return _HeaderColor
End Get
Set(value As Color)
_HeaderColor = value
End Set
End Property
_
Public Property BaseColor() As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property BorderColor() As Color
Get
Return _BorderColor
End Get
Set(value As Color)
_BorderColor = value
End Set
End Property
_
Public Property FlatColor() As Color
Get
Return _FlatColor
End Get
Set(value As Color)
_FlatColor = value
End Set
End Property
#End Region
Public Property HeaderMaximize As Boolean
Get
Return _HeaderMaximize
End Get
Set(value As Boolean)
_HeaderMaximize = value
End Set
End Property
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
If e.Button = Windows.Forms.MouseButtons.Left And New Rectangle(0, 0, Width, MoveHeight).Contains(e.Location) Then
Cap = True
MousePoint = e.Location
End If
End Sub
Private Sub FormSkin_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles Me.MouseDoubleClick
If HeaderMaximize Then
If e.Button = Windows.Forms.MouseButtons.Left And New Rectangle(0, 0, Width, MoveHeight).Contains(e.Location) Then
If FindForm.WindowState = FormWindowState.Normal Then
FindForm.WindowState = FormWindowState.Maximized : FindForm.Refresh()
ElseIf FindForm.WindowState = FormWindowState.Maximized Then
FindForm.WindowState = FormWindowState.Normal : FindForm.Refresh()
End If
End If
End If
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e) : Cap = False
End Sub
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
If Cap Then
Parent.Location = MousePosition - MousePoint
End If
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
#End Region
#Region " Colors"
Private _HeaderColor As Color = Color.FromArgb(45, 47, 49)
Private _BaseColor As Color = Color.FromArgb(60, 70, 73)
Private _BorderColor As Color = Color.FromArgb(53, 58, 60)
Private TextColor As Color = Color.FromArgb(234, 234, 234)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.White
Font = New Font("Segoe UI", 12)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width : H = Height
Dim Base As New Rectangle(0, 0, W, H), Header As New Rectangle(0, 0, W, 50)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
'-- Header
.FillRectangle(New SolidBrush(_HeaderColor), Header)
'-- Logo
.FillRectangle(New SolidBrush(Color.FromArgb(243, 243, 243)), New Rectangle(8, 16, 4, 18))
.FillRectangle(New SolidBrush(_FlatColor), 16, 16, 4, 18)
.DrawString(Text, Font, New SolidBrush(TextColor), New Rectangle(26, 15, W, H), NearSF)
'-- Border
.DrawRectangle(New Pen(_BorderColor), Base)
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatClose : Inherits Control
#Region " Variables"
Private State As MouseState = MouseState.None
Private x As Integer
#End Region
#Region " Properties"
#Region " Mouse States"
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
x = e.X : Invalidate()
End Sub
Protected Overrides Sub OnClick(e As EventArgs)
MyBase.OnClick(e)
Environment.Exit(0)
End Sub
#End Region
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Size = New Size(18, 18)
End Sub
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property TextColor As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = value
End Set
End Property
#End Region
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(168, 35, 35)
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.White
Size = New Size(18, 18)
Anchor = AnchorStyles.Top Or AnchorStyles.Right
Font = New Font("Marlett", 10)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim B As New Bitmap(Width, Height)
Dim G As Graphics = Graphics.FromImage(B)
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
'-- X
.DrawString("r", Font, New SolidBrush(TextColor), New Rectangle(0, 0, Width, Height), CenterSF)
'-- Hover/down
Select Case State
Case MouseState.Over
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.White)), Base)
Case MouseState.Down
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.Black)), Base)
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatMax : Inherits Control
#Region " Variables"
Private State As MouseState = MouseState.None
Private x As Integer
#End Region
#Region " Properties"
#Region " Mouse States"
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
x = e.X : Invalidate()
End Sub
Protected Overrides Sub OnClick(e As EventArgs)
MyBase.OnClick(e)
Select Case FindForm.WindowState
Case FormWindowState.Maximized
FindForm.WindowState = FormWindowState.Normal
Case FormWindowState.Normal
FindForm.WindowState = FormWindowState.Maximized
End Select
End Sub
#End Region
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Size = New Size(18, 18)
End Sub
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property TextColor As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = value
End Set
End Property
#End Region
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(45, 47, 49)
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.White
Size = New Size(18, 18)
Anchor = AnchorStyles.Top Or AnchorStyles.Right
Font = New Font("Marlett", 12)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim B As New Bitmap(Width, Height)
Dim G As Graphics = Graphics.FromImage(B)
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
'-- Maximize
If FindForm.WindowState = FormWindowState.Maximized Then
.DrawString("1", Font, New SolidBrush(TextColor), New Rectangle(1, 1, Width, Height), CenterSF)
ElseIf FindForm.WindowState = FormWindowState.Normal Then
.DrawString("2", Font, New SolidBrush(TextColor), New Rectangle(1, 1, Width, Height), CenterSF)
End If
'-- Hover/down
Select Case State
Case MouseState.Over
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.White)), Base)
Case MouseState.Down
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.Black)), Base)
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatMini : Inherits Control
#Region " Variables"
Private State As MouseState = MouseState.None
Private x As Integer
#End Region
#Region " Properties"
#Region " Mouse States"
Protected Overrides Sub OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
x = e.X : Invalidate()
End Sub
Protected Overrides Sub OnClick(e As EventArgs)
MyBase.OnClick(e)
Select Case FindForm.WindowState
Case FormWindowState.Normal
FindForm.WindowState = FormWindowState.Minimized
Case FormWindowState.Maximized
FindForm.WindowState = FormWindowState.Minimized
End Select
End Sub
#End Region
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Size = New Size(18, 18)
End Sub
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property TextColor As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = value
End Set
End Property
#End Region
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(45, 47, 49)
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.White
Size = New Size(18, 18)
Anchor = AnchorStyles.Top Or AnchorStyles.Right
Font = New Font("Marlett", 12)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim B As New Bitmap(Width, Height)
Dim G As Graphics = Graphics.FromImage(B)
Dim Base As New Rectangle(0, 0, Width, Height)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
'-- Minimize
.DrawString("0", Font, New SolidBrush(TextColor), New Rectangle(2, 1, Width, Height), CenterSF)
'-- Hover/down
Select Case State
Case MouseState.Over
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.White)), Base)
Case MouseState.Down
.FillRectangle(New SolidBrush(Color.FromArgb(30, Color.Black)), Base)
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatColorPalette : Inherits Control
#Region " Variables"
Private W, H As Integer
#End Region
#Region " Properties"
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Width = 180
Height = 80
End Sub
#Region " Colors"
_
Public Property Red As Color
Get
Return _Red
End Get
Set(value As Color)
_Red = value
End Set
End Property
_
Public Property Cyan As Color
Get
Return _Cyan
End Get
Set(value As Color)
_Cyan = value
End Set
End Property
_
Public Property Blue As Color
Get
Return _Blue
End Get
Set(value As Color)
_Blue = value
End Set
End Property
_
Public Property LimeGreen As Color
Get
Return _LimeGreen
End Get
Set(value As Color)
_LimeGreen = value
End Set
End Property
_
Public Property Orange As Color
Get
Return _Orange
End Get
Set(value As Color)
_Orange = value
End Set
End Property
_
Public Property Purple As Color
Get
Return _Purple
End Get
Set(value As Color)
_Purple = value
End Set
End Property
_
Public Property Black As Color
Get
Return _Black
End Get
Set(value As Color)
_Black = value
End Set
End Property
_
Public Property Gray As Color
Get
Return _Gray
End Get
Set(value As Color)
_Gray = value
End Set
End Property
_
Public Property White As Color
Get
Return _White
End Get
Set(value As Color)
_White = value
End Set
End Property
#End Region
#End Region
#Region " Colors"
Private _Red As Color = Color.FromArgb(220, 85, 96)
Private _Cyan As Color = Color.FromArgb(10, 154, 157)
Private _Blue As Color = Color.FromArgb(0, 128, 255)
Private _LimeGreen As Color = Color.FromArgb(35, 168, 109)
Private _Orange As Color = Color.FromArgb(253, 181, 63)
Private _Purple As Color = Color.FromArgb(155, 88, 181)
Private _Black As Color = Color.FromArgb(45, 47, 49)
Private _Gray As Color = Color.FromArgb(63, 70, 73)
Private _White As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.FromArgb(60, 70, 73)
Size = New Size(160, 80)
Font = New Font("Segoe UI", 12)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Colors
.FillRectangle(New SolidBrush(_Red), New Rectangle(0, 0, 20, 40))
.FillRectangle(New SolidBrush(_Cyan), New Rectangle(20, 0, 20, 40))
.FillRectangle(New SolidBrush(_Blue), New Rectangle(40, 0, 20, 40))
.FillRectangle(New SolidBrush(_LimeGreen), New Rectangle(60, 0, 20, 40))
.FillRectangle(New SolidBrush(_Orange), New Rectangle(80, 0, 20, 40))
.FillRectangle(New SolidBrush(_Purple), New Rectangle(100, 0, 20, 40))
.FillRectangle(New SolidBrush(_Black), New Rectangle(120, 0, 20, 40))
.FillRectangle(New SolidBrush(_Gray), New Rectangle(140, 0, 20, 40))
.FillRectangle(New SolidBrush(_White), New Rectangle(160, 0, 20, 40))
'-- Text
.DrawString("Color Palette", Font, New SolidBrush(_White), New Rectangle(0, 22, W, H), CenterSF)
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatGroupBox : Inherits ContainerControl
#Region " Variables"
Private W, H As Integer
Private _ShowText As Boolean = True
#End Region
#Region " Properties"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
Public Property ShowText As Boolean
Get
Return _ShowText
End Get
Set(value As Boolean)
_ShowText = value
End Set
End Property
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(60, 70, 73)
#End Region
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(240, 180)
Font = New Font("Segoe ui", 10)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim GP, GP2, GP3 As New GraphicsPath
Dim Base As New Rectangle(8, 8, W - 16, H - 16)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Base
GP = Helpers.RoundRec(Base, 8)
.FillPath(New SolidBrush(_BaseColor), GP)
'-- Arrows
GP2 = Helpers.DrawArrow(28, 2, False)
.FillPath(New SolidBrush(_BaseColor), GP2)
GP3 = Helpers.DrawArrow(28, 8, True)
.FillPath(New SolidBrush(Color.FromArgb(60, 70, 73)), GP3)
'-- if ShowText
If ShowText Then
.DrawString(Text, Font, New SolidBrush(_FlatColor), New Rectangle(16, 16, W, H), NearSF)
End If
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatButton : Inherits Control
#Region " Variables"
Private W, H As Integer
Private _Rounded As Boolean = False
Private State As MouseState = MouseState.None
#End Region
#Region " Properties"
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property TextColor As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = value
End Set
End Property
_
Public Property Rounded As Boolean
Get
Return _Rounded
End Get
Set(value As Boolean)
_Rounded = 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 : 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
#End Region
#Region " Colors"
Private _BaseColor As Color = _FlatColor
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer Or _
ControlStyles.SupportsTransparentBackColor, True)
DoubleBuffered = True
Size = New Size(106, 32)
BackColor = Color.Transparent
Font = New Font("Segoe UI", 12)
Cursor = Cursors.Hand
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim GP As New GraphicsPath
Dim Base As New Rectangle(0, 0, W, H)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
Select Case State
Case MouseState.None
If Rounded Then
'-- Base
GP = Helpers.RoundRec(Base, 6)
.FillPath(New SolidBrush(_BaseColor), GP)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
Else
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
End If
Case MouseState.Over
If Rounded Then
'-- Base
GP = Helpers.RoundRec(Base, 6)
.FillPath(New SolidBrush(_BaseColor), GP)
.FillPath(New SolidBrush(Color.FromArgb(20, Color.White)), GP)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
Else
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
.FillRectangle(New SolidBrush(Color.FromArgb(20, Color.White)), Base)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
End If
Case MouseState.Down
If Rounded Then
'-- Base
GP = Helpers.RoundRec(Base, 6)
.FillPath(New SolidBrush(_BaseColor), GP)
.FillPath(New SolidBrush(Color.FromArgb(20, Color.Black)), GP)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
Else
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
.FillRectangle(New SolidBrush(Color.FromArgb(20, Color.Black)), Base)
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), Base, CenterSF)
End If
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatToggle : Inherits Control
#Region " Variables"
Private W, H As Integer
Private O As _Options
Private _Checked As Boolean = False
Private State As MouseState = MouseState.None
#End Region
#Region " Properties"
Public Event CheckedChanged(ByVal sender As Object)
_
Enum _Options
Style1
Style2
Style3
Style4 '-- TODO: New Style
Style5 '-- TODO: New Style
End Enum
#Region " Options"
_
Public Property Options As _Options
Get
Return O
End Get
Set(value As _Options)
O = value
End Set
End Property
_
Public Property Checked As Boolean
Get
Return _Checked
End Get
Set(value As Boolean)
_Checked = value
End Set
End Property
#End Region
Protected Overrides Sub OnTextChanged(e As EventArgs)
MyBase.OnTextChanged(e) : Invalidate()
End Sub
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Width = 76
Height = 33
End Sub
#Region " Mouse States"
Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs)
MyBase.OnMouseEnter(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(e)
State = MouseState.Down : Invalidate()
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs)
MyBase.OnMouseLeave(e)
State = MouseState.None : Invalidate()
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(e)
State = MouseState.Over : Invalidate()
End Sub
Protected Overrides Sub OnClick(e As EventArgs)
MyBase.OnClick(e)
_Checked = Not _Checked
RaiseEvent CheckedChanged(Me)
End Sub
#End Region
#End Region
#Region " Colors"
Private BaseColor As Color = _FlatColor
Private BaseColorRed As Color = Color.FromArgb(220, 85, 96)
Private BGColor As Color = Color.FromArgb(84, 85, 86)
Private ToggleColor As Color = Color.FromArgb(45, 47, 49)
Private TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
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(44, Height + 1)
Cursor = Cursors.Hand
Font = New Font("Segoe UI", 10)
Size = New Size(76, 33)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim GP, GP2 As New GraphicsPath
Dim Base As New Rectangle(0, 0, W, H), Toggle As New Rectangle(CInt(W \ 2), 0, 38, H)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
Select Case O
Case _Options.Style1 '-- Style 1
'-- Base
GP = Helpers.RoundRec(Base, 6)
GP2 = Helpers.RoundRec(Toggle, 6)
.FillPath(New SolidBrush(BGColor), GP)
.FillPath(New SolidBrush(ToggleColor), GP2)
'-- Text
.DrawString("OFF", Font, New SolidBrush(BGColor), New Rectangle(19, 1, W, H), CenterSF)
If Checked Then
'-- Base
GP = Helpers.RoundRec(Base, 6)
GP2 = Helpers.RoundRec(New Rectangle(CInt(W \ 2), 0, 38, H), 6)
.FillPath(New SolidBrush(ToggleColor), GP)
.FillPath(New SolidBrush(BaseColor), GP2)
'-- Text
.DrawString("ON", Font, New SolidBrush(BaseColor), New Rectangle(8, 7, W, H), NearSF)
End If
Case _Options.Style2 '-- Style 2
'-- Base
GP = Helpers.RoundRec(Base, 6)
Toggle = New Rectangle(4, 4, 36, H - 8)
GP2 = Helpers.RoundRec(Toggle, 4)
.FillPath(New SolidBrush(BaseColorRed), GP)
.FillPath(New SolidBrush(ToggleColor), GP2)
'-- Lines
.DrawLine(New Pen(BGColor), 18, 20, 18, 12)
.DrawLine(New Pen(BGColor), 22, 20, 22, 12)
.DrawLine(New Pen(BGColor), 26, 20, 26, 12)
'-- Text
.DrawString("r", New Font("Marlett", 8), New SolidBrush(TextColor), New Rectangle(19, 2, Width, Height), CenterSF)
If Checked Then
GP = Helpers.RoundRec(Base, 6)
Toggle = New Rectangle(CInt(W \ 2) - 2, 4, 36, H - 8)
GP2 = Helpers.RoundRec(Toggle, 4)
.FillPath(New SolidBrush(BaseColor), GP)
.FillPath(New SolidBrush(ToggleColor), GP2)
'-- Lines
.DrawLine(New Pen(BGColor), CInt(W \ 2) + 12, 20, CInt(W \ 2) + 12, 12)
.DrawLine(New Pen(BGColor), CInt(W \ 2) + 16, 20, CInt(W \ 2) + 16, 12)
.DrawLine(New Pen(BGColor), CInt(W \ 2) + 20, 20, CInt(W \ 2) + 20, 12)
'-- Text
.DrawString("?", New Font("Wingdings", 14), New SolidBrush(TextColor), New Rectangle(8, 7, Width, Height), NearSF)
End If
Case _Options.Style3 '-- Style 3
'-- Base
GP = Helpers.RoundRec(Base, 16)
Toggle = New Rectangle(W - 28, 4, 22, H - 8)
GP2.AddEllipse(Toggle)
.FillPath(New SolidBrush(ToggleColor), GP)
.FillPath(New SolidBrush(BaseColorRed), GP2)
'-- Text
.DrawString("OFF", Font, New SolidBrush(BaseColorRed), New Rectangle(-12, 2, W, H), CenterSF)
If Checked Then
'-- Base
GP = Helpers.RoundRec(Base, 16)
Toggle = New Rectangle(6, 4, 22, H - 8)
GP2.Reset()
GP2.AddEllipse(Toggle)
.FillPath(New SolidBrush(ToggleColor), GP)
.FillPath(New SolidBrush(BaseColor), GP2)
'-- Text
.DrawString("ON", Font, New SolidBrush(BaseColor), New Rectangle(12, 2, W, H), CenterSF)
End If
Case _Options.Style4
'-- TODO: New Styles
If Checked Then
'--
End If
Case _Options.Style5
'-- TODO: New Styles
If Checked Then
'--
End If
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatRadioButton : Inherits Control
#Region " Variables"
Private State As MouseState = MouseState.None
Private W, H As Integer
Private O As _Options
Private _Checked As Boolean
#End Region
#Region " Properties"
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 RadioButton Then
DirectCast(C, RadioButton).Checked = False
Invalidate()
End If
Next
End Sub
Protected Overrides Sub OnCreateControl()
MyBase.OnCreateControl()
InvalidateControls()
End Sub
_
Enum _Options
Style1
Style2
End Enum
_
Public Property Options As _Options
Get
Return O
End Get
Set(value As _Options)
O = value
End Set
End Property
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 22
End Sub
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property BorderColor As Color
Get
Return _BorderColor
End Get
Set(value As Color)
_BorderColor = 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 : 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
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(45, 47, 49)
Private _BorderColor As Color = _FlatColor
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
Cursor = Cursors.Hand
Size = New Size(100, 22)
BackColor = Color.FromArgb(60, 70, 73)
Font = New Font("Segoe UI", 10)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim Base As New Rectangle(0, 2, Height - 5, Height - 5), Dot As New Rectangle(4, 6, H - 12, H - 12)
With G
.SmoothingMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
Select Case O
Case _Options.Style1 '-- Style 1
'-- Base
.FillEllipse(New SolidBrush(_BaseColor), Base)
Select Case State '-- Mouse States
Case MouseState.Over
'-- Base
.DrawEllipse(New Pen(_BorderColor), Base)
Case MouseState.Down
'-- Base
.DrawEllipse(New Pen(_BorderColor), Base)
End Select
'-- If Checked
If Checked Then
'-- Base
.FillEllipse(New SolidBrush(_BorderColor), Dot)
End If
'-- If Enabled
If Me.Enabled = False Then
'-- Base
.FillEllipse(New SolidBrush(Color.FromArgb(54, 58, 61)), Base)
'-- Text
.DrawString(Text, Font, New SolidBrush(Color.FromArgb(140, 142, 143)), New Rectangle(20, 2, W, H), NearSF)
End If
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), New Rectangle(20, 2, W, H), NearSF)
Case _Options.Style2 '-- Style 2
'-- Base
.FillEllipse(New SolidBrush(_BaseColor), Base)
Select Case State
Case MouseState.Over '-- Mouse States
'-- Base
.DrawEllipse(New Pen(_BorderColor), Base)
.FillEllipse(New SolidBrush(Color.FromArgb(118, 213, 170)), Base)
Case MouseState.Down
'-- Base
.DrawEllipse(New Pen(_BorderColor), Base)
.FillEllipse(New SolidBrush(Color.FromArgb(118, 213, 170)), Base)
End Select
'-- If Checked
If Checked Then
'-- Base
.FillEllipse(New SolidBrush(_BorderColor), Dot)
End If
'-- If Enabled
If Me.Enabled = False Then
'-- Base
.FillEllipse(New SolidBrush(Color.FromArgb(54, 58, 61)), Base)
'-- Text
.DrawString(Text, Font, New SolidBrush(Color.FromArgb(48, 119, 91)), New Rectangle(20, 2, W, H), NearSF)
End If
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), New Rectangle(20, 2, W, H), NearSF)
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatCheckBox : Inherits Control
#Region " Variables"
Private W, H As Integer
Private State As MouseState = MouseState.None
Private O As _Options
Private _Checked As Boolean
#End Region
#Region " Properties"
Protected Overrides Sub OnTextChanged(ByVal e As System.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 System.EventArgs)
_Checked = Not _Checked
RaiseEvent CheckedChanged(Me)
MyBase.OnClick(e)
End Sub
_
Enum _Options
Style1
Style2
End Enum
_
Public Property Options As _Options
Get
Return O
End Get
Set(value As _Options)
O = value
End Set
End Property
Protected Overrides Sub OnResize(e As EventArgs)
MyBase.OnResize(e)
Height = 22
End Sub
#Region " Colors"
_
Public Property BaseColor As Color
Get
Return _BaseColor
End Get
Set(value As Color)
_BaseColor = value
End Set
End Property
_
Public Property BorderColor As Color
Get
Return _BorderColor
End Get
Set(value As Color)
_BorderColor = 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 : 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
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(45, 47, 49)
Private _BorderColor As Color = _FlatColor
Private _TextColor As Color = Color.FromArgb(243, 243, 243)
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.FromArgb(60, 70, 73)
Cursor = Cursors.Hand
Font = New Font("Segoe UI", 10)
Size = New Size(112, 22)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim Base As New Rectangle(0, 2, Height - 5, Height - 5)
With G
.SmoothingMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
Select Case O
Case _Options.Style1 '-- Style 1
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
Select Case State
Case MouseState.Over
'-- Base
.DrawRectangle(New Pen(_BorderColor), Base)
Case MouseState.Down
'-- Base
.DrawRectangle(New Pen(_BorderColor), Base)
End Select
'-- If Checked
If Checked Then
.DrawString("?", New Font("Wingdings", 18), New SolidBrush(_BorderColor), New Rectangle(5, 7, H - 9, H - 9), CenterSF)
End If
'-- If Enabled
If Me.Enabled = False Then
.FillRectangle(New SolidBrush(Color.FromArgb(54, 58, 61)), Base)
.DrawString(Text, Font, New SolidBrush(Color.FromArgb(140, 142, 143)), New Rectangle(20, 2, W, H), NearSF)
End If
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), New Rectangle(20, 2, W, H), NearSF)
Case _Options.Style2 '-- Style 2
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
Select Case State
Case MouseState.Over
'-- Base
.DrawRectangle(New Pen(_BorderColor), Base)
.FillRectangle(New SolidBrush(Color.FromArgb(118, 213, 170)), Base)
Case MouseState.Down
'-- Base
.DrawRectangle(New Pen(_BorderColor), Base)
.FillRectangle(New SolidBrush(Color.FromArgb(118, 213, 170)), Base)
End Select
'-- If Checked
If Checked Then
.DrawString("?", New Font("Wingdings", 18), New SolidBrush(_BorderColor), New Rectangle(5, 7, H - 9, H - 9), CenterSF)
End If
'-- If Enabled
If Me.Enabled = False Then
.FillRectangle(New SolidBrush(Color.FromArgb(54, 58, 61)), Base)
.DrawString(Text, Font, New SolidBrush(Color.FromArgb(48, 119, 91)), New Rectangle(20, 2, W, H), NearSF)
End If
'-- Text
.DrawString(Text, Font, New SolidBrush(_TextColor), New Rectangle(20, 2, W, H), NearSF)
End Select
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatTextBox : Inherits Control
#Region " Variables"
Private W, H As Integer
Private State As MouseState = MouseState.None
Private WithEvents TB As Windows.Forms.TextBox
#End Region
#Region " Properties"
#Region " TextBox Properties"
Private _TextAlign As HorizontalAlignment = HorizontalAlignment.Left
_
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
_
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
_
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
_
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
_
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
_
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
_
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
#End Region
#Region " Colors"
_
Public Property TextColor As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = value
End Set
End Property
Public Overrides Property ForeColor() As Color
Get
Return _TextColor
End Get
Set(value As Color)
_TextColor = 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 OnMouseEnter(e As EventArgs)
MyBase.OnMouseEnter(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
#End Region
#Region " Colors"
Private _BaseColor As Color = Color.FromArgb(45, 47, 49)
Private _TextColor As Color = Color.FromArgb(192, 192, 192)
Private _BorderColor As Color = _FlatColor
#End Region
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.Font = New Font("Segoe UI", 10)
TB.Text = Text
TB.BackColor = _BaseColor
TB.ForeColor = _TextColor
TB.MaxLength = _MaxLength
TB.Multiline = _Multiline
TB.ReadOnly = _ReadOnly
TB.UseSystemPasswordChar = _UseSystemPasswordChar
TB.BorderStyle = BorderStyle.None
TB.Location = New Point(5, 5)
TB.Width = Width - 10
TB.Cursor = Cursors.IBeam
If _Multiline Then
TB.Height = Height - 11
Else
Height = TB.Height + 11
End If
AddHandler TB.TextChanged, AddressOf OnBaseTextChanged
AddHandler TB.KeyDown, AddressOf OnBaseKeyDown
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim Base As New Rectangle(0, 0, W, H)
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(BackColor)
'-- Colors
TB.BackColor = _BaseColor
TB.ForeColor = _TextColor
'-- Base
.FillRectangle(New SolidBrush(_BaseColor), Base)
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class
Class FlatTabControl : Inherits TabControl
#Region " Variables"
Private W, H As Integer
#End Region
#Region " Properties"
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Alignment = TabAlignment.Top
End Sub
#Region " Colors"
_
Public Property ActiveColor As Color
Get
Return _ActiveColor
End Get
Set(value As Color)
_ActiveColor = value
End Set
End Property
' _ '-- Arrow
'Public Property IndicatorColor As Color
' Get
' Return _IndicatorColor
' End Get
' Set(value As Color)
' _IndicatorColor = value
' End Set
'End Property
#End Region
#End Region
#Region " Colors"
Private BaseColor As Color = Color.FromArgb(60, 70, 73)
Private _ActiveColor As Color = _FlatColor
'Private _IndicatorColor As Color = Color.FromArgb(44, 56, 54) '-- Arrow
#End Region
Sub New()
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or _
ControlStyles.ResizeRedraw Or ControlStyles.OptimizedDoubleBuffer, True)
DoubleBuffered = True
BackColor = Color.FromArgb(60, 70, 73)
Font = New Font("Segoe UI", 10)
SizeMode = TabSizeMode.Fixed
ItemSize = New Size(120, 40)
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
B = New Bitmap(Width, Height) : G = Graphics.FromImage(B)
W = Width - 1 : H = Height - 1
Dim GP As New GraphicsPath
Dim PGB As PathGradientBrush
With G
.SmoothingMode = 2
.PixelOffsetMode = 2
.TextRenderingHint = 5
.Clear(_ActiveColor)
Try : SelectedTab.BackColor = BaseColor : Catch : End Try
For i = 0 To TabCount - 1
Dim Base As New Rectangle(New Point(GetTabRect(i).Location.X + 2, 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
'-- Base
.FillRectangle(New SolidBrush(_ActiveColor), BaseSize)
GP.Reset()
GP.AddRectangle(BaseSize)
'-- Gradiant
PGB = New PathGradientBrush(GP)
With PGB
.CenterColor = _ActiveColor
.SurroundColors = {Color.FromArgb(45, BaseColor)}
.FocusScales = New PointF(0.5F, 0.5F)
End With
.FillPath(PGB, GP)
'-- ImageList
If ImageList IsNot Nothing Then
Try
If ImageList.Images(TabPages(i).ImageIndex) IsNot Nothing Then
'-- Image
.DrawImage(ImageList.Images(TabPages(i).ImageIndex), New Point(BaseSize.Location.X + 8, BaseSize.Location.Y + 6))
'-- Text
.DrawString(" " & TabPages(i).Text, Font, Brushes.White, BaseSize, CenterSF)
Else
'-- Text
.DrawString(TabPages(i).Text, Font, Brushes.White, BaseSize, CenterSF)
End If
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Else
'-- Text
.DrawString(TabPages(i).Text, Font, Brushes.White, BaseSize, CenterSF)
End If
Else
'-- Base
.FillRectangle(New SolidBrush(_ActiveColor), BaseSize)
'-- ImageList
If ImageList IsNot Nothing Then
Try
If ImageList.Images(TabPages(i).ImageIndex) IsNot Nothing Then
'-- Image
.DrawImage(ImageList.Images(TabPages(i).ImageIndex), New Point(BaseSize.Location.X + 8, BaseSize.Location.Y + 6))
'-- Text
.DrawString(" " & TabPages(i).Text, Font, New SolidBrush(Color.White), BaseSize, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
Else
'-- Text
.DrawString(TabPages(i).Text, Font, New SolidBrush(Color.White), BaseSize, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
End If
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Else
'-- Text
.DrawString(TabPages(i).Text, Font, New SolidBrush(Color.White), BaseSize, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
End If
End If
Next
End With
MyBase.OnPaint(e)
G.Dispose()
e.Graphics.InterpolationMode = 7
e.Graphics.DrawImageUnscaled(B, 0, 0)
B.Dispose()
End Sub
End Class