1204 lines
42 KiB
VB.net
1204 lines
42 KiB
VB.net
Imports System.Drawing.Drawing2D
|
|
Imports System.Threading
|
|
Imports System.ComponentModel
|
|
Imports System.Drawing.Text
|
|
Imports System.Security
|
|
|
|
|
|
Class BitdefenderForm : Inherits ContainerControl
|
|
|
|
#Region "Init"
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.SupportsTransparentBackColor, True)
|
|
DoubleBuffered = True
|
|
Dock = DockStyle.Fill
|
|
BackColor = Color.Fuchsia
|
|
End Sub
|
|
Protected Overrides Sub OnHandleCreated(ByVal e As EventArgs)
|
|
MyBase.OnHandleCreated(e)
|
|
If FindForm() IsNot Nothing Then
|
|
FindForm.FormBorderStyle = FormBorderStyle.None : FindForm.TransparencyKey = BackColor
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#Region "Property"
|
|
|
|
Public Overrides Property Text As String
|
|
Get
|
|
Return MyBase.Text
|
|
End Get
|
|
Set(value As String)
|
|
MyBase.Text = value
|
|
Invalidate(New Rectangle(0, 0, Width, 70), False)
|
|
End Set
|
|
End Property
|
|
|
|
|
|
|
|
Private _DisableMax As Boolean
|
|
Public Property DisableControlboxMax As Boolean
|
|
Get
|
|
Return _DisableMax
|
|
End Get
|
|
Set(value As Boolean)
|
|
_DisableMax = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
|
|
Private _DisableMin As Boolean
|
|
Public Property DisableControlboxMin As Boolean
|
|
Get
|
|
Return _DisableMin
|
|
End Get
|
|
Set(value As Boolean)
|
|
_DisableMin = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
|
|
Private _DisableClose As Boolean
|
|
Public Property DisableControlboxClose As Boolean
|
|
Get
|
|
Return _DisableClose
|
|
End Get
|
|
Set(value As Boolean)
|
|
_DisableClose = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
#End Region
|
|
|
|
|
|
#Region "Flag mouse"
|
|
Dim mouseOffset As Point
|
|
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseDown(e)
|
|
mouseOffset = New Point(-e.X, -e.Y)
|
|
End Sub
|
|
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseMove(e)
|
|
|
|
'#Zone " Move form "
|
|
For x As Integer = 0 To Width - 1
|
|
For y As Integer = 0 To 30
|
|
If e.Button = MouseButtons.Left AndAlso e.Location.Equals(New Point(x, y)) Then
|
|
Dim mousePos = Control.MousePosition
|
|
mousePos.Offset(mouseOffset.X, mouseOffset.Y)
|
|
FindForm.Location = mousePos
|
|
End If
|
|
Next
|
|
Next
|
|
'#End Zone
|
|
|
|
'#Zone " None mouse flag "
|
|
MouseState = State.None
|
|
Cursor = Cursors.Default
|
|
'#End Zone
|
|
|
|
'#Zone " minRect "
|
|
Dim minRect As Rectangle = New Rectangle(Right - Padding - (controlSize.Width + 20), Padding, btnSize.Width, btnSize.Height)
|
|
If minRect.Contains(e.Location) Then
|
|
Cursor = Cursors.Hand
|
|
MouseState = State.HoverMin
|
|
End If
|
|
'#End Zone
|
|
|
|
'#Zone " maxRect "
|
|
Dim maxRect As New Rectangle(minRect.X + 29, minRect.Y, btnSize.Width, btnSize.Height)
|
|
If maxRect.Contains(e.Location) Then
|
|
Cursor = Cursors.Hand
|
|
MouseState = State.HoverMax
|
|
End If
|
|
'#End Zone
|
|
|
|
'#Zone " closeRect "
|
|
Dim closeRect As New Rectangle(maxRect.X + 29, minRect.Y, btnSize.Width, btnSize.Height)
|
|
If closeRect.Contains(e.Location) Then
|
|
Cursor = Cursors.Hand
|
|
MouseState = State.HoverClose
|
|
End If
|
|
'#End Zone
|
|
|
|
|
|
|
|
|
|
End Sub
|
|
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseUp(e)
|
|
Dim min As Rectangle = New Rectangle(Right - Padding - (controlSize.Width + 20), Padding, btnSize.Width, btnSize.Height)
|
|
Dim max As New Rectangle(min.X + 29, min.Y, btnSize.Width, btnSize.Height)
|
|
Dim close As New Rectangle(max.X + 29, max.Y, btnSize.Width, btnSize.Height)
|
|
|
|
If min.Contains(e.Location) AndAlso e.Button = MouseButtons.Left AndAlso Not DisableControlboxMin Then
|
|
FindForm.WindowState = FormWindowState.Minimized
|
|
End If
|
|
|
|
If max.Contains(e.Location) AndAlso e.Button = MouseButtons.Left AndAlso Not DisableControlboxMax Then
|
|
Select Case FindForm.WindowState
|
|
Case FormWindowState.Maximized
|
|
FindForm.WindowState = FormWindowState.Normal
|
|
Case FormWindowState.Normal
|
|
FindForm.WindowState = FormWindowState.Maximized
|
|
End Select
|
|
|
|
End If
|
|
|
|
If close.Contains(e.Location) AndAlso e.Button = MouseButtons.Left AndAlso Not DisableControlboxClose Then
|
|
FindForm.Close()
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#Region "Draw mouse state"
|
|
Private Enum State
|
|
None
|
|
HoverClose
|
|
HoverMax
|
|
HoverMin
|
|
End Enum
|
|
Private _MouseState As State
|
|
Private Property MouseState As State
|
|
Get
|
|
Return _MouseState
|
|
End Get
|
|
Set(value As State)
|
|
_MouseState = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
#End Region
|
|
|
|
#End Region 'Flag mouse
|
|
|
|
|
|
#End Region 'Init
|
|
|
|
#Region "Draw"
|
|
|
|
#Region "Init Draw Object"
|
|
|
|
#Region "Draw Object Declarations"
|
|
Private G As Graphics
|
|
Private Shadows Const Padding As Integer = 10
|
|
'#Zone " Controlbox "
|
|
Private btnSize As Size = New Size(27, 30)
|
|
Private controlSize As Size = New Size(86, btnSize.Height)
|
|
Private controlboxPath As GraphicsPath
|
|
'#End Zone
|
|
|
|
Private R1, R2, R4, R5, R6 As Rectangle
|
|
Private GP1, GP2, GP3, GP4 As GraphicsPath
|
|
Private P1, P2, P3, P4, P5, P6 As Pen
|
|
Private B1 As SolidBrush
|
|
Private LGB1, LGB2, LGB3, LGB4, LGB5, LGB6 As LinearGradientBrush
|
|
Private C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 As Color
|
|
|
|
Private containerDisposable As New ContainerObjectDisposable
|
|
|
|
#End Region 'Draw Object Declarations
|
|
|
|
Private Sub Init(e As PaintEventArgs)
|
|
|
|
G = e.Graphics
|
|
|
|
'#Zone " Rectangle "
|
|
R1 = New Rectangle(Padding, Padding, Width - Padding * 2, Height - Padding * 2)
|
|
R2 = New Rectangle(R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2)
|
|
R4 = New Rectangle(Padding, Padding, Width, 20)
|
|
R5 = New Rectangle(Right - Padding - (controlSize.Width + 20), Padding, controlSize.Width, controlSize.Height)
|
|
R6 = New Rectangle(R5.X + 1, R5.Y + 1, R5.Width - 2, R5.Height - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " Graphic path "
|
|
GP1 = RoundRect(R1, 18)
|
|
GP2 = RoundRect(R2, 18)
|
|
GP3 = ControlRect(R5, 9)
|
|
GP4 = ControlRect(R6, 9)
|
|
controlboxPath = New GraphicsPath
|
|
containerDisposable.AddObjectRange({GP1, GP2, GP3, GP4, controlboxPath})
|
|
'#End Zone
|
|
|
|
'#Zone " Brush "
|
|
B1 = New SolidBrush(Color.FromArgb(32, 32, 32))
|
|
containerDisposable.AddObject(B1)
|
|
'#End Zone
|
|
|
|
'#Zone " Color "
|
|
C1 = Color.FromArgb(81, 81, 81)
|
|
C2 = Color.FromArgb(43, 43, 43)
|
|
C3 = Color.FromArgb(21, 21, 21)
|
|
C4 = Color.FromArgb(10, 10, 10)
|
|
C5 = Color.FromArgb(167, 167, 167)
|
|
C6 = Color.FromArgb(83, 83, 83)
|
|
C7 = Color.FromArgb(41, 41, 41)
|
|
C8 = Color.FromArgb(33, 33, 33)
|
|
C9 = Color.FromArgb(41, 41, 41)
|
|
C10 = Color.FromArgb(77, 77, 77)
|
|
'#End Zone
|
|
|
|
'#Zone " Linear Gradient Brush "
|
|
LGB1 = New LinearGradientBrush(R4, C1, C2, LinearGradientMode.Vertical)
|
|
LGB2 = New LinearGradientBrush(R5, C6, C7, LinearGradientMode.Vertical)
|
|
LGB3 = New LinearGradientBrush(R5, C8, C7, LinearGradientMode.Vertical)
|
|
LGB4 = New LinearGradientBrush(New Point(R5.Left + 27, R5.Top + 2), New Point(R5.Left + 27, R5.Bottom - 2), C3, C4)
|
|
LGB5 = New LinearGradientBrush(New Point(R5.Left + 28, R5.Top + 2), New Point(R5.Left + 28, R5.Bottom - 1), C5, C6)
|
|
LGB6 = New LinearGradientBrush(R5, C9, C10, LinearGradientMode.Vertical)
|
|
containerDisposable.AddObjectRange({LGB1, LGB2, LGB3, LGB4, LGB5, LGB6})
|
|
|
|
'#End Zone
|
|
|
|
'#Zone " Pen "
|
|
P1 = New Pen(Color.FromArgb(33, 33, 33))
|
|
P2 = New Pen(Color.FromArgb(240, 240, 240))
|
|
P3 = New Pen(LGB3)
|
|
P4 = New Pen(New SolidBrush(Color.FromArgb(83, 83, 83)))
|
|
P5 = New Pen(LGB4)
|
|
P6 = New Pen(LGB5)
|
|
containerDisposable.AddObjectRange({P1, P2, P3, P4, P5, P6})
|
|
'#End Zone
|
|
|
|
|
|
End Sub
|
|
|
|
#End Region 'Init Draw Object
|
|
|
|
|
|
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e)
|
|
|
|
''#Zone " DebugMode "
|
|
#If DEBUG Then
|
|
'Dim ST As New Stopwatch : ST.Start()
|
|
#End If
|
|
|
|
'#End Zone
|
|
|
|
Init(e)
|
|
|
|
'#Zone " Draw background"
|
|
G.FillPath(B1, GP1)
|
|
'#End Zone
|
|
|
|
'#Zone " Draw header "
|
|
G.SetClip(GP2)
|
|
G.FillRectangle(LGB1, R4)
|
|
G.ResetClip()
|
|
'#End Zone
|
|
|
|
'#Zone " Draw title "
|
|
G.DrawString(Text, New Font("Microsoft Sans Serif", 10, FontStyle.Regular), Brushes.White, 27, 22)
|
|
'#End Zone
|
|
|
|
'#Zone " Draw border "
|
|
G.DrawPath(P1, GP1)
|
|
G.DrawPath(P2, GP2)
|
|
'#End Zone
|
|
|
|
'#Zone " Mouse state "
|
|
Select Case MouseState
|
|
Case State.HoverClose
|
|
DrawControlBox_Close(G)
|
|
Case State.HoverMax
|
|
DrawControlBox_Max(G)
|
|
Case State.HoverMin
|
|
DrawControlBox_Min(G)
|
|
Case State.None
|
|
DrawControlBox(G)
|
|
End Select
|
|
'#End Zone
|
|
|
|
'#Zone " Dispose all draw object "
|
|
containerDisposable.Dispose()
|
|
'#End Zone
|
|
|
|
'#Zone " DebugMode "
|
|
#If DEBUG Then
|
|
'Debug.WriteLine(ST.Elapsed.ToString)
|
|
#End If
|
|
|
|
'#End Zone
|
|
|
|
End Sub
|
|
|
|
Private Sub DrawControlBox(ByVal G As Graphics)
|
|
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
|
|
G.FillPath(LGB2, GP3)
|
|
G.DrawPath(P3, GP3)
|
|
G.DrawPath(P4, GP4)
|
|
'#Zone " If you want white line "
|
|
G.DrawLine(P2, R5.Left, R5.Top + 1, R5.Right, R5.Top + 1)
|
|
'#End Zone
|
|
'#Zone " Fix !important "
|
|
G.DrawLine(P3, R5.Right, R5.Top, R5.Right, R5.Bottom - 4)
|
|
G.DrawLine(P4, R6.Right, R6.Top + 1, R6.Right, R6.Bottom - 4)
|
|
|
|
G.SmoothingMode = SmoothingMode.Default
|
|
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.X, R5.Y + 1, 1, 1))
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.Right, R5.Top + 1, 1, 1))
|
|
'#End Zone
|
|
'#Zone " First line "
|
|
G.DrawLine(P5, R5.Left + 29, R5.Top + 2, R5.Left + 29, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 30, R5.Top + 2, R5.Left + 30, R5.Bottom - 2)
|
|
'#End Zone
|
|
'#Zone " Second line "
|
|
G.DrawLine(P5, R5.Left + 56, R5.Top + 2, R5.Left + 56, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 57, R5.Top + 2, R5.Left + 57, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
|
|
|
|
'#Zone " close string "
|
|
controlboxPath.AddString("r", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width + 20) + 2, Padding + 8), Nothing)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
'#End Zone
|
|
|
|
'#Zone " max string "
|
|
Select Case FindForm.WindowState
|
|
Case FormWindowState.Maximized
|
|
controlboxPath.AddString("2", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 4, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
|
|
Case FormWindowState.Normal
|
|
controlboxPath.AddString("1", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
End Select
|
|
'#End Zone
|
|
|
|
'#Zone " min string "
|
|
controlboxPath.AddString("0", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 3 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
'#End Zone
|
|
|
|
End Sub
|
|
|
|
Private Sub DrawControlBox_Close(ByVal G As Graphics)
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
|
|
G.FillPath(LGB2, GP3)
|
|
|
|
G.SetClip(New Rectangle(Right - Padding - (btnSize.Width + 23) + 1, Padding, btnSize.Width + 3, btnSize.Height))
|
|
G.FillPath(LGB6, GP3)
|
|
G.ResetClip()
|
|
|
|
G.DrawPath(P3, GP3)
|
|
G.DrawPath(P4, GP4)
|
|
|
|
'#Zone " If you want white line "
|
|
G.DrawLine(P2, R5.Left, R5.Top + 1, R5.Right, R5.Top + 1)
|
|
'#End Zone
|
|
|
|
'#Zone " Fix !important "
|
|
G.DrawLine(P3, R5.Right, R5.Top, R5.Right, R5.Bottom - 4)
|
|
G.DrawLine(P4, R6.Right, R6.Top + 1, R6.Right, R6.Bottom - 4)
|
|
|
|
G.SmoothingMode = SmoothingMode.Default
|
|
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.X, R5.Y + 1, 1, 1))
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.Right, R5.Top + 1, 1, 1))
|
|
'#End Zone
|
|
|
|
'#Zone " First line "
|
|
G.DrawLine(P5, R5.Left + 29, R5.Top + 2, R5.Left + 29, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 30, R5.Top + 2, R5.Left + 30, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " Second line "
|
|
G.DrawLine(P5, R5.Left + 56, R5.Top + 2, R5.Left + 56, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " close string "
|
|
controlboxPath.AddString("r", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width + 20) + 2, Padding + 10), Nothing)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
'#End Zone
|
|
|
|
'#Zone " max string "
|
|
Select Case FindForm.WindowState
|
|
Case FormWindowState.Maximized
|
|
controlboxPath.AddString("2", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 4, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
|
|
Case FormWindowState.Normal
|
|
controlboxPath.AddString("1", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
End Select
|
|
'#End Zone
|
|
|
|
'#Zone " min string "
|
|
controlboxPath.AddString("0", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 3 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
'#End Zone
|
|
|
|
End Sub
|
|
|
|
Private Sub DrawControlBox_Max(ByVal G As Graphics)
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
|
|
G.FillPath(LGB2, GP3)
|
|
|
|
G.SetClip(New Rectangle(Right - Padding - (btnSize.Width * 2 + 23) + 1, Padding, btnSize.Width, btnSize.Height))
|
|
G.FillPath(LGB6, GP3)
|
|
G.ResetClip()
|
|
|
|
G.DrawPath(P3, GP3)
|
|
G.DrawPath(P4, GP4)
|
|
|
|
'#Zone " If you want white line "
|
|
G.DrawLine(P2, R5.Left, R5.Top + 1, R5.Right, R5.Top + 1)
|
|
'#End Zone
|
|
|
|
'#Zone " Fix !important "
|
|
G.DrawLine(P3, R5.Right, R5.Top, R5.Right, R5.Bottom - 4)
|
|
G.DrawLine(P4, R6.Right, R6.Top + 1, R6.Right, R6.Bottom - 4)
|
|
|
|
G.SmoothingMode = SmoothingMode.Default
|
|
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.X, R5.Y + 1, 1, 1))
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.Right, R5.Top + 1, 1, 1))
|
|
'#End Zone
|
|
|
|
'#Zone " First line "
|
|
G.DrawLine(P5, R5.Left + 29, R5.Top + 2, R5.Left + 29, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " Second line "
|
|
G.DrawLine(P5, R5.Left + 56, R5.Top + 2, R5.Left + 56, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 57, R5.Top + 2, R5.Left + 57, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " close string "
|
|
controlboxPath.AddString("r", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width + 20) + 2, Padding + 8), Nothing)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
'#End Zone
|
|
|
|
'#Zone " max string "
|
|
Select Case FindForm.WindowState
|
|
Case FormWindowState.Maximized
|
|
controlboxPath.AddString("2", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 4, Padding + 10), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
|
|
Case FormWindowState.Normal
|
|
controlboxPath.AddString("1", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 2, Padding + 10), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
End Select
|
|
'#End Zone
|
|
|
|
'#Zone " min string "
|
|
controlboxPath.AddString("0", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 3 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
'#End Zone
|
|
End Sub
|
|
|
|
Private Sub DrawControlBox_Min(ByVal G As Graphics)
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
|
|
G.FillPath(LGB2, GP3)
|
|
|
|
G.SetClip(New Rectangle(Right - Padding - (controlSize.Width + 20) + 1, Padding, btnSize.Width + 3, btnSize.Height))
|
|
G.FillPath(LGB6, GP3)
|
|
G.ResetClip()
|
|
|
|
G.DrawPath(P3, GP3)
|
|
G.DrawPath(P4, GP4)
|
|
|
|
'#Zone " If you want white line "
|
|
G.DrawLine(P2, R5.Left, R5.Top + 1, R5.Right, R5.Top + 1)
|
|
'#End Zone
|
|
|
|
'#Zone " Fix !important "
|
|
G.DrawLine(P3, R5.Right, R5.Top, R5.Right, R5.Bottom - 4)
|
|
G.DrawLine(P4, R6.Right, R6.Top + 1, R6.Right, R6.Bottom - 4)
|
|
|
|
G.SmoothingMode = SmoothingMode.Default
|
|
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.X, R5.Y + 1, 1, 1))
|
|
G.FillRectangle(P3.Brush, New Rectangle(R5.Right, R5.Top + 1, 1, 1))
|
|
'#End Zone
|
|
|
|
'#Zone " First line "
|
|
G.DrawLine(P5, R5.Left + 29, R5.Top + 2, R5.Left + 29, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 30, R5.Top + 2, R5.Left + 30, R5.Bottom - 2)
|
|
'#End Zone
|
|
|
|
'#Zone " Second line "
|
|
G.DrawLine(P5, R5.Left + 56, R5.Top + 2, R5.Left + 56, R5.Bottom - 2)
|
|
G.DrawLine(P6, R5.Left + 57, R5.Top + 2, R5.Left + 57, R5.Bottom - 2)
|
|
|
|
'#End Zone
|
|
|
|
'#Zone " close string "
|
|
controlboxPath.AddString("r", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width + 20) + 2, Padding + 8), Nothing)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
'#End Zone
|
|
|
|
'#Zone " max string "
|
|
Select Case FindForm.WindowState
|
|
Case FormWindowState.Maximized
|
|
controlboxPath.AddString("2", New FontFamily("Webdings"), FontStyle.Regular, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 4, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
|
|
Case FormWindowState.Normal
|
|
controlboxPath.AddString("1", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 2 + 20) + 2, Padding + 8), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
End Select
|
|
'#End Zone
|
|
|
|
'#Zone " min string "
|
|
controlboxPath.AddString("0", New FontFamily("Webdings"), FontStyle.Bold, 15, New Point(Right - Padding - (btnSize.Width * 3 + 20) + 2, Padding + 10), Nothing)
|
|
G.DrawPath(Pens.Black, controlboxPath)
|
|
G.FillPath(Brushes.White, controlboxPath)
|
|
'#End Zone
|
|
End Sub
|
|
|
|
|
|
Private Function ControlRect(ByVal R As Rectangle, ByVal radius As Integer)
|
|
Dim GP As New GraphicsPath
|
|
GP.AddArc(R.Right - radius, R.Bottom - radius, radius, radius, 0, 90)
|
|
GP.AddArc(R.X, R.Bottom - radius, radius, radius, 90, 90)
|
|
GP.AddLine(R.Left, R.Top, R.Right, R.Top)
|
|
Return GP
|
|
End Function
|
|
|
|
|
|
#End Region 'Draw
|
|
|
|
End Class
|
|
|
|
Class BitdefenderSeparator : Inherits Control
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
|
|
Width = 400
|
|
Height = 3
|
|
BackColor = Color.Transparent
|
|
End Sub
|
|
|
|
#Region "Declarations"
|
|
Private G As Graphics
|
|
Private LGB1, LGB2 As LinearGradientBrush
|
|
Private P1, P2 As Pen
|
|
Private CB1, CB2 As ColorBlend
|
|
Private C1, C2 As Color
|
|
Private conObj As New ContainerObjectDisposable
|
|
#End Region 'Declarations
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e)
|
|
'#Zone " Declarations "
|
|
Dim Colors1, Colors2 As New List(Of Color)
|
|
|
|
C1 = Color.FromArgb(62, 62, 62)
|
|
C2 = Color.FromArgb(1, 1, 1)
|
|
|
|
G = e.Graphics
|
|
|
|
LGB1 = New LinearGradientBrush(New Point(0, 0), New Point(Width, 0), Nothing, Nothing)
|
|
LGB2 = New LinearGradientBrush(New Point(0, 1), New Point(Width, 1), Nothing, Nothing)
|
|
conObj.AddObjectRange({LGB1, LGB2})
|
|
|
|
CB1 = New ColorBlend
|
|
CB2 = New ColorBlend
|
|
'#End Zone
|
|
|
|
'#Zone " Colors first line "
|
|
For i As Integer = 0 To 255 Step 51
|
|
Colors1.Add(Color.FromArgb(i, C1))
|
|
Next
|
|
For i As Integer = 255 To 0 Step -51
|
|
Colors1.Add(Color.FromArgb(i, C1))
|
|
Next
|
|
'#End Zone
|
|
|
|
'#Zone " Colors Second line "
|
|
For i As Integer = 0 To 255 Step 51
|
|
Colors2.Add(Color.FromArgb(i, C2))
|
|
Next
|
|
For i As Integer = 255 To 0 Step -51
|
|
Colors2.Add(Color.FromArgb(i, C2))
|
|
Next
|
|
'#End Zone
|
|
|
|
'#Zone " colorblend first line "
|
|
CB1.Colors = Colors1.ToArray
|
|
CB1.Positions = {0.0, 0.08, 0.16, 0.24, 0.32, 0.4, 0.48, 0.56, 0.64, 0.72, 0.8, 1.0}
|
|
'#End Zone
|
|
|
|
'#Zone " colorblend second line "
|
|
CB2.Colors = Colors2.ToArray
|
|
CB2.Positions = {0.0, 0.08, 0.16, 0.24, 0.32, 0.4, 0.48, 0.56, 0.64, 0.72, 0.8, 1.0}
|
|
'#End Zone
|
|
|
|
'#Zone " Pen "
|
|
LGB1.InterpolationColors = CB1
|
|
LGB2.InterpolationColors = CB2
|
|
|
|
P1 = New Pen(LGB1)
|
|
P2 = New Pen(LGB2)
|
|
conObj.AddObjectRange({P1, P2})
|
|
'#End Zone
|
|
|
|
G.DrawLine(P1, 0, 0, Width, 0)
|
|
G.DrawLine(P2, 0, 1, Width, 1)
|
|
|
|
conObj.Dispose()
|
|
End Sub
|
|
End Class
|
|
|
|
<DefaultEvent("ChangeChecked")>
|
|
Class BitdefenderCheckbox : Inherits Control
|
|
#Region "Init"
|
|
#Region "Event"
|
|
Public Event ChangeChecked(ByVal sender As Object, ByVal check As Boolean)
|
|
Private _Check As Boolean
|
|
Public Property Checked As Boolean
|
|
Get
|
|
Return _Check
|
|
End Get
|
|
Set(value As Boolean)
|
|
_Check = value
|
|
Invalidate()
|
|
|
|
RaiseEvent ChangeChecked(Me, value)
|
|
End Set
|
|
End Property
|
|
|
|
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseUp(e) : Checked = Not Checked
|
|
End Sub
|
|
|
|
#End Region 'Event
|
|
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
|
|
Width = 55
|
|
Height = 25
|
|
BackColor = Color.Transparent
|
|
oldsize = New Size(55, 25)
|
|
End Sub
|
|
#End Region 'Init
|
|
|
|
#Region "draw"
|
|
|
|
#Region "draw init object"
|
|
|
|
#Region "Declaration draw object"
|
|
Private cn As ContainerObjectDisposable
|
|
Private R1, R2, R3, R4, R5, R6 As Rectangle
|
|
Private GP1, GP2, GP3, GP4, GP5, GP6 As GraphicsPath
|
|
Private LGB1, LGB2, LGB3, LGB4 As LinearGradientBrush
|
|
Private PGB1 As PathGradientBrush
|
|
Private B1, B2, B3 As SolidBrush
|
|
Private G As Graphics
|
|
Private P1, P2 As Pen
|
|
Dim CheckSize As Size
|
|
#End Region 'Declaration draw object
|
|
Private Sub Init(e As PaintEventArgs)
|
|
G = e.Graphics
|
|
cn = New ContainerObjectDisposable
|
|
R1 = New Rectangle(1, 1, Width - 2, Height - 2)
|
|
R2 = New Rectangle(2, 2, Width - 4, Height - 4)
|
|
|
|
GP1 = RoundRect(R1, 11) : cn.AddObject(GP1)
|
|
GP2 = RoundRect(R2, 11) : cn.AddObject(GP2)
|
|
|
|
B1 = New SolidBrush(Color.FromArgb(40, 40, 40)) : cn.AddObject(B1)
|
|
If Checked Then
|
|
B2 = New SolidBrush(Color.FromArgb(84, 135, 171))
|
|
PGB1 = New PathGradientBrush(GP2) With {.CenterColor = Color.FromArgb(84, 135, 171), .SurroundColors = {Color.FromArgb(113, 176, 200)}, .FocusScales = New PointF(0.85, 0.65)}
|
|
|
|
Else
|
|
B2 = New SolidBrush(Color.FromArgb(29, 29, 29))
|
|
PGB1 = New PathGradientBrush(GP2) With {.CenterColor = Color.FromArgb(29, 29, 29), .SurroundColors = {Color.FromArgb(39, 39, 39)}, .FocusScales = New PointF(0.85, 0.65)}
|
|
End If
|
|
cn.AddObjectRange({B2, PGB1})
|
|
B3 = New SolidBrush(Color.FromArgb(107, 107, 107))
|
|
cn.AddObject(B3)
|
|
|
|
CheckSize = New Size(22, R2.Height)
|
|
R3 = New Rectangle(Width - 2 - 22, 2, CheckSize.Width, CheckSize.Height)
|
|
GP3 = RoundRect(R3, 11)
|
|
R4 = New Rectangle(R3.X + 1, R3.Y + 1, R3.Width - 2, R3.Height - 2)
|
|
GP4 = RoundRect(R4, 11)
|
|
|
|
R5 = New Rectangle(0, 2, CheckSize.Width, CheckSize.Height)
|
|
GP5 = RoundRect(R5, 11)
|
|
R6 = New Rectangle(R5.X + 1, R5.Y + 1, R5.Width - 2, R5.Height - 2)
|
|
GP6 = RoundRect(R6, 11)
|
|
cn.AddObjectRange({GP3, GP4, GP5, GP6})
|
|
If Hover Then
|
|
LGB1 = New LinearGradientBrush(R3, Color.FromArgb(86, 86, 86), Color.FromArgb(42, 42, 42), LinearGradientMode.Vertical)
|
|
LGB2 = New LinearGradientBrush(New Rectangle(R4.X - 1, R4.Y - 1, R4.Width + 2, R4.Height + 2), Color.FromArgb(147, 147, 147), Color.FromArgb(68, 68, 68), LinearGradientMode.Vertical)
|
|
P1 = New Pen(LGB2)
|
|
|
|
LGB3 = New LinearGradientBrush(R5, Color.FromArgb(86, 86, 86), Color.FromArgb(42, 42, 42), LinearGradientMode.Vertical)
|
|
LGB4 = New LinearGradientBrush(New Rectangle(R6.X - 1, R6.Y - 1, R6.Width + 2, R6.Height + 2), Color.FromArgb(147, 147, 147), Color.FromArgb(68, 68, 68), LinearGradientMode.Vertical)
|
|
P2 = New Pen(LGB4)
|
|
|
|
Else
|
|
LGB1 = New LinearGradientBrush(R3, Color.FromArgb(59, 59, 59), Color.FromArgb(29, 29, 29), LinearGradientMode.Vertical)
|
|
LGB2 = New LinearGradientBrush(New Rectangle(R4.X - 1, R4.Y - 1, R4.Width + 2, R4.Height + 2), Color.FromArgb(101, 101, 101), Color.FromArgb(42, 42, 42), LinearGradientMode.Vertical)
|
|
P1 = New Pen(LGB2)
|
|
|
|
LGB3 = New LinearGradientBrush(R5, Color.FromArgb(59, 59, 59), Color.FromArgb(29, 29, 29), LinearGradientMode.Vertical)
|
|
LGB4 = New LinearGradientBrush(New Rectangle(R6.X - 1, R6.Y - 1, R6.Width + 2, R6.Height + 2), Color.FromArgb(101, 101, 101), Color.FromArgb(42, 42, 42), LinearGradientMode.Vertical)
|
|
P2 = New Pen(LGB4)
|
|
|
|
End If
|
|
cn.AddObjectRange({LGB1, LGB2, LGB3, LGB4, P1, P2})
|
|
|
|
|
|
End Sub
|
|
#End Region 'draw init object
|
|
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e)
|
|
Init(e)
|
|
G.SmoothingMode = SmoothingMode.AntiAlias
|
|
G.InterpolationMode = InterpolationMode.HighQualityBicubic
|
|
G.FillPath(B1, GP1)
|
|
|
|
If Checked Then
|
|
|
|
G.FillPath(B2, GP2)
|
|
G.FillPath(PGB1, GP2)
|
|
G.DrawPath(Pens.Black, GP2)
|
|
If Hover Then
|
|
G.FillPath(LGB1, GP3)
|
|
G.DrawPath(Pens.Black, GP3)
|
|
G.DrawPath(P1, GP4)
|
|
G.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.Black, 7, 6)
|
|
G.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.White, 7, 7)
|
|
Else
|
|
G.FillPath(LGB1, GP3)
|
|
G.DrawPath(Pens.Black, GP3)
|
|
G.DrawPath(P1, GP4)
|
|
G.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.Black, 7, 6)
|
|
G.DrawString("ON", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.White, 7, 7)
|
|
End If
|
|
Else
|
|
G.FillPath(B1, GP1)
|
|
G.FillPath(B2, GP2)
|
|
G.FillPath(PGB1, GP2)
|
|
G.DrawPath(Pens.Black, GP2)
|
|
If Hover Then
|
|
G.FillPath(LGB3, GP5)
|
|
G.DrawPath(Pens.Black, GP5)
|
|
G.DrawPath(P2, GP6)
|
|
G.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.Black, Width - 29, 6)
|
|
G.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), B3, Width - 29, 7)
|
|
Else
|
|
G.FillPath(LGB3, GP5)
|
|
G.DrawPath(Pens.Black, GP5)
|
|
G.DrawPath(P2, GP6)
|
|
G.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), Brushes.Black, Width - 29, 6)
|
|
G.DrawString("OFF", New Font("Microsoft Sans Serif", 7, FontStyle.Bold), B3, Width - 29, 7)
|
|
End If
|
|
|
|
End If
|
|
cn.Dispose()
|
|
End Sub
|
|
Private _Hover As Boolean
|
|
Private Property Hover As Boolean
|
|
Get
|
|
Return _Hover
|
|
End Get
|
|
Set(value As Boolean)
|
|
_Hover = value
|
|
Invalidate()
|
|
End Set
|
|
End Property
|
|
Protected Overrides Sub onmouseenter(ByVal e As EventArgs)
|
|
MyBase.OnMouseEnter(e)
|
|
Hover = True
|
|
End Sub
|
|
Protected Overrides Sub onmouseleave(ByVal e As EventArgs)
|
|
MyBase.OnMouseLeave(e)
|
|
Hover = False
|
|
End Sub
|
|
Dim oldsize As Size
|
|
|
|
Protected Overrides Sub onclientsizechanged(e As EventArgs)
|
|
MyBase.OnClientSizeChanged(e)
|
|
Me.Size = oldsize
|
|
|
|
End Sub
|
|
#End Region 'draw
|
|
|
|
End Class
|
|
|
|
Class BitdefenderButton : Inherits Control
|
|
|
|
#Region "Init"
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
|
|
Width = 100
|
|
Height = 55
|
|
BackColor = Color.Transparent
|
|
End Sub
|
|
|
|
|
|
Public Overrides Property Text As String
|
|
Get
|
|
Return MyBase.Text
|
|
End Get
|
|
Set(value As String)
|
|
MyBase.Text = value
|
|
Invalidate()
|
|
End Set
|
|
End Property
|
|
|
|
Private _Down As Boolean
|
|
Private Property Down As Boolean
|
|
Get
|
|
Return _Down
|
|
End Get
|
|
Set(value As Boolean)
|
|
_Down = value
|
|
Invalidate()
|
|
End Set
|
|
End Property
|
|
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseDown(e) : Down = True
|
|
End Sub
|
|
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseUp(e) : Down = False
|
|
End Sub
|
|
|
|
#Region "Mouse state"
|
|
|
|
Private OpenT As Thread
|
|
Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs)
|
|
MyBase.OnMouseEnter(e)
|
|
OpenT = New Thread(AddressOf EnterAnimation)
|
|
If Not OpenT.IsAlive Then
|
|
OpenT.IsBackground = True
|
|
OpenT.Start()
|
|
End If
|
|
End Sub
|
|
Private Sub EnterAnimation()
|
|
Dim G As Graphics = Me.CreateGraphics()
|
|
R2 = New Rectangle(5, 5, Width - 10, Height - 10)
|
|
GP2 = RoundRect(R2, 11)
|
|
G.SetClip(GP2)
|
|
For fade As Integer = 0 To 5 Step 0.85
|
|
Thread.Sleep(50)
|
|
G.FillRectangle(New SolidBrush(Color.FromArgb(fade, Color.White)), ClientRectangle)
|
|
Next
|
|
End Sub
|
|
|
|
|
|
#End Region 'Mouse state
|
|
|
|
#End Region 'Init
|
|
|
|
|
|
#Region "Draw"
|
|
#Region "Draw init Object"
|
|
Private C1, C3, C4, C5, C6 As Color
|
|
Private R1, R2, R3 As Rectangle
|
|
Private GP1, GP2, GP3 As GraphicsPath
|
|
Private B1, B2 As SolidBrush
|
|
Private P1, P2 As Pen
|
|
Private LGB1, LGB2 As LinearGradientBrush
|
|
Private SF1 As StringFormat
|
|
Private G As Graphics
|
|
|
|
Private Sub Init(e As PaintEventArgs)
|
|
G = e.Graphics
|
|
R1 = New Rectangle(3, 3, Width - 6, Height - 6)
|
|
R2 = New Rectangle(5, 5, Width - 10, Height - 10)
|
|
R3 = New Rectangle(6, 6, Width - 12, Height - 12)
|
|
|
|
GP1 = RoundRect(R1, 11)
|
|
GP2 = RoundRect(R2, 11)
|
|
GP3 = RoundRect(R3, 11)
|
|
|
|
|
|
C1 = Color.FromArgb(100, 41, 41, 41)
|
|
C3 = Color.FromArgb(101, 101, 101)
|
|
C4 = Color.FromArgb(60, 60, 60)
|
|
C5 = Color.FromArgb(28, 28, 28)
|
|
C6 = Color.FromArgb(45, 45, 45)
|
|
|
|
B1 = New SolidBrush(C1)
|
|
B2 = Brushes.White
|
|
LGB1 = New LinearGradientBrush(R2, C4, C5, LinearGradientMode.Vertical)
|
|
LGB2 = New LinearGradientBrush(R3, C3, C6, LinearGradientMode.Vertical)
|
|
|
|
P1 = New Pen(Brushes.Black)
|
|
P2 = New Pen(LGB2)
|
|
|
|
SF1 = New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center, .Trimming = StringTrimming.Character}
|
|
|
|
|
|
End Sub
|
|
#End Region 'Draw init Object
|
|
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e)
|
|
Init(e)
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
G.FillPath(B1, GP1)
|
|
G.FillPath(LGB1, GP2)
|
|
G.DrawPath(P1, GP2)
|
|
G.DrawPath(P2, GP3)
|
|
If Not Down Then
|
|
G.DrawString(Text, Font, B2, R3, SF1)
|
|
Else
|
|
R3.X += 1 : R3.Y += 1
|
|
G.DrawString(Text, Font, B2, R3, SF1)
|
|
End If
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
#End Region 'Draw
|
|
|
|
End Class
|
|
|
|
Class BitdefenderGroupbox : Inherits ContainerControl
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
|
|
Width = 100
|
|
Height = 55
|
|
BackColor = Color.Transparent
|
|
End Sub
|
|
|
|
#Region "property"
|
|
<Browsable(False)>
|
|
Public Overloads Property Text As String
|
|
|
|
Private _Title As String = "Title"
|
|
Private _SubTitle As String = "Subtitle"
|
|
|
|
Public Property Title As String
|
|
Get
|
|
Return _Title
|
|
End Get
|
|
Set(value As String)
|
|
_Title = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
Public Property Subtitle As String
|
|
Get
|
|
Return _SubTitle
|
|
End Get
|
|
Set(value As String)
|
|
_SubTitle = value
|
|
Invalidate(False)
|
|
End Set
|
|
End Property
|
|
#End Region 'property
|
|
|
|
|
|
Private R1, R2 As Rectangle
|
|
Private GP1, GP2 As GraphicsPath
|
|
Private P1, P2 As Pen
|
|
Private B1, B2 As SolidBrush
|
|
Private SZ1, SZ2 As Size
|
|
Private F1, F2 As Font
|
|
Private S1, S2 As String
|
|
Private G As Graphics
|
|
Private Sub Init(e As PaintEventArgs)
|
|
G = e.Graphics
|
|
|
|
R1 = New Rectangle(3, 3, Width - 6, Height - 6)
|
|
R2 = New Rectangle(4, 4, Width - 8, Height - 8)
|
|
|
|
GP1 = RoundRect(R1, 11)
|
|
GP2 = RoundRect(R2, 11)
|
|
|
|
P1 = Pens.Black
|
|
P2 = New Pen(New SolidBrush(Color.FromArgb(68, 68, 68)))
|
|
|
|
B1 = New SolidBrush(Color.FromArgb(41, 41, 41))
|
|
B2 = Brushes.White
|
|
|
|
F1 = New Font("Verdana", 10, FontStyle.Bold)
|
|
F2 = New Font("Verdana", 7, FontStyle.Regular)
|
|
|
|
S1 = Title.ToUpper
|
|
S2 = Subtitle
|
|
|
|
SZ1 = G.MeasureString(S1, F1, Width).ToSize
|
|
SZ2 = G.MeasureString(S2, F2, Width).ToSize
|
|
|
|
End Sub
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e) : Init(e)
|
|
G.SmoothingMode = SmoothingMode.HighQuality
|
|
G.FillPath(B1, GP1)
|
|
|
|
G.DrawPath(P1, GP1)
|
|
G.DrawPath(P2, GP2)
|
|
|
|
G.DrawString(S1, F1, B2, CInt((Width - SZ1.Width) / 2), 20)
|
|
G.DrawString(S2, F2, B2, CInt((Width - SZ2.Width) / 2), 32)
|
|
|
|
End Sub
|
|
End Class
|
|
|
|
Class BitdefenderRadiobutton : Inherits Control
|
|
#Region "Init"
|
|
#Region "Event"
|
|
Public Event ChangeChecked(ByVal sender As Object, ByVal check As Boolean)
|
|
Private _Check As Boolean
|
|
Public Property Checked As Boolean
|
|
Get
|
|
Return _Check
|
|
End Get
|
|
Set(value As Boolean)
|
|
_Check = value
|
|
Invalidate()
|
|
|
|
RaiseEvent ChangeChecked(Me, value)
|
|
End Set
|
|
End Property
|
|
|
|
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
|
|
MyBase.OnMouseUp(e) : Checked = Not Checked
|
|
End Sub
|
|
|
|
#End Region 'Event
|
|
Private oldHeight As Integer
|
|
Sub New()
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.SupportsTransparentBackColor Or ControlStyles.UserPaint, True)
|
|
Width = 100
|
|
Height = 15
|
|
BackColor = Color.Transparent
|
|
oldHeight = 15
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnClientSizeChanged(ByVal e As EventArgs)
|
|
MyBase.OnClientSizeChanged(e) : Height = oldHeight
|
|
End Sub
|
|
|
|
Public Overrides Property Text() As String
|
|
Get
|
|
Return MyBase.Text
|
|
End Get
|
|
Set(value As String)
|
|
MyBase.Text = value
|
|
Invalidate()
|
|
End Set
|
|
End Property
|
|
#End Region 'Init
|
|
|
|
|
|
|
|
Private R1, R2, R3 As Rectangle
|
|
Private GP1, GP2, GP3 As GraphicsPath
|
|
Private LGB1, LGB2 As LinearGradientBrush
|
|
Private P1, P2 As Pen
|
|
Private G As Graphics
|
|
Private S1 As String
|
|
Private F1 As Font
|
|
Private Sub Init(e As PaintEventArgs)
|
|
G = e.Graphics
|
|
|
|
R1 = New Rectangle(0, 0, Height - 1, Height - 1)
|
|
R2 = New Rectangle(R1.X + 1, R1.Y + 1, R1.Width - 2, R1.Height - 2)
|
|
R3 = New Rectangle(r2.X + 1, r2.Y + 1, R2.width - 2, R2.Height - 2)
|
|
|
|
GP1 = New GraphicsPath : GP1.AddEllipse(R1)
|
|
GP2 = New GraphicsPath : GP2.AddEllipse(R2)
|
|
GP3 = New GraphicsPath : GP3.AddEllipse(R3)
|
|
|
|
LGB1 = New LinearGradientBrush(R1, Color.FromArgb(29, 29, 29), Color.FromArgb(39, 39, 39), LinearGradientMode.Vertical)
|
|
LGB2 = New LinearGradientBrush(R3, Color.FromArgb(84, 135, 171), Color.FromArgb(113, 176, 200), LinearGradientMode.Vertical)
|
|
|
|
P1 = Pens.Black
|
|
P2 = New Pen(New SolidBrush(Color.FromArgb(68, 68, 68)))
|
|
|
|
S1 = Text
|
|
|
|
F1 = New Font("Verdana", 8, FontStyle.Regular)
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
|
|
MyBase.OnPaint(e) : Init(e)
|
|
G.InterpolationMode = InterpolationMode.HighQualityBicubic
|
|
G.SmoothingMode = SmoothingMode.AntiAlias
|
|
If Checked Then
|
|
G.FillPath(LGB2, GP3)
|
|
G.DrawPath(P1, GP3)
|
|
G.DrawPath(P2, GP2)
|
|
G.DrawString(S1, F1, New SolidBrush(Color.FromArgb(106, 166, 193)), 18, 1)
|
|
Else
|
|
G.FillPath(LGB1, GP1)
|
|
G.DrawPath(P1, GP1)
|
|
G.DrawPath(P2, GP2)
|
|
G.DrawString(S1, F1, New SolidBrush(Color.FromArgb(147, 147, 147)), 18, 1)
|
|
End If
|
|
|
|
End Sub
|
|
End Class
|
|
|
|
|
|
Class ContainerObjectDisposable : Implements IDisposable
|
|
Private iList As New List(Of IDisposable)
|
|
|
|
Public Sub AddObject(ByVal Obj As IDisposable)
|
|
iList.Add(Obj)
|
|
End Sub
|
|
Public Sub AddObjectRange(ByVal Obj() As IDisposable)
|
|
iList.AddRange(Obj)
|
|
End Sub
|
|
#Region "IDisposable Support"
|
|
Private disposedValue As Boolean
|
|
Protected Overridable Sub Dispose(disposing As Boolean)
|
|
If Not Me.disposedValue Then
|
|
If disposing Then
|
|
For Each ObjectDisposable As IDisposable In iList
|
|
ObjectDisposable.Dispose()
|
|
#If DEBUG Then
|
|
Debug.WriteLine("Dispose : " & ObjectDisposable.ToString)
|
|
#End If
|
|
Next
|
|
End If
|
|
|
|
End If
|
|
iList.Clear()
|
|
Me.disposedValue = True
|
|
End Sub
|
|
Public Sub Dispose() Implements IDisposable.Dispose
|
|
Dispose(True)
|
|
GC.SuppressFinalize(Me)
|
|
End Sub
|
|
#End Region
|
|
|
|
End Class
|
|
|
|
Module Helper
|
|
|
|
Friend Function RoundRect(ByVal R As Rectangle, radius As Integer) As GraphicsPath
|
|
Dim GP As New GraphicsPath
|
|
GP.AddArc(R.X, R.Y, radius, radius, 180, 90)
|
|
GP.AddArc(R.Right - radius, R.Y, radius, radius, 270, 90)
|
|
GP.AddArc(R.Right - radius, R.Bottom - radius, radius, radius, 0, 90)
|
|
GP.AddArc(R.X, R.Bottom - radius, radius, radius, 90, 90)
|
|
GP.CloseFigure()
|
|
Return GP
|
|
End Function
|
|
|
|
End Module |