Imports System.Drawing.Drawing2D
Class Pigment
Property Name As String = "Pigment"
Property Value As Color = Color.Black
Sub New()
End Sub
Sub New(ByVal n As String, ByVal v As Color)
Name = n
Value = v
End Sub
Sub New(ByVal n As String, ByVal a As Byte, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
Name = n
Value = Color.FromArgb(a, r, g, b)
End Sub
Sub New(ByVal n As String, ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
Name = n
Value = Color.FromArgb(r, g, b)
End Sub
End Class
Class FTheme
Inherits ContainerControl
Property Resizeable As Boolean = True
Sub New()
SetStyle(DirectCast(8198, ControlStyles), True)
C = {
New Pigment("Border", Color.Black),
New Pigment("Frame", 47, 47, 50),
New Pigment("Border Highlight", 15, 255, 255, 255),
New Pigment("Side Highlight", 6, 255, 255, 255),
New Pigment("Shine", 20, 255, 255, 255),
New Pigment("Shadow", 38, 38, 40),
New Pigment("Backcolor", 74, 74, 74),
New Pigment("Transparency", Color.Fuchsia)
}
End Sub
Protected Overrides Sub OnHandleCreated(ByVal e As EventArgs)
Dock = DockStyle.Fill
If TypeOf Parent Is Form Then DirectCast(Parent, Form).FormBorderStyle = FormBorderStyle.None
Colors = C
MyBase.OnHandleCreated(e)
End Sub
Const Count As Byte = 8
Private C As Pigment()
Public Property Colors() As Pigment()
Get
Return C
End Get
Set(ByVal v As Pigment())
If v.Length <> Count Then Throw New IndexOutOfRangeException
P1 = New Pen(v(0).Value)
P2 = New Pen(v(2).Value)
B1 = New SolidBrush(v(6).Value)
B2 = New SolidBrush(v(7).Value)
If Parent IsNot Nothing Then
Parent.BackColor = v(6).Value
If TypeOf Parent Is Form Then DirectCast(Parent, Form).TransparencyKey = v(7).Value
End If
CB = New ColorBlend
CB.Colors = {Color.Transparent, v(4).Value, Color.Transparent}
CB.Positions = {0, 0.5, 1}
C = v
Invalidate()
End Set
End Property
Private P1, P2, P3 As Pen
Private B1, B2 As SolidBrush, B3, B4 As LinearGradientBrush
Private R1, R2 As Rectangle
Private CB As ColorBlend
Private G As Graphics, B As Bitmap
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
B = New Bitmap(Width, Height)
G = Graphics.FromImage(B)
G.Clear(C(1).Value)
G.DrawRectangle(P2, New Rectangle(1, 1, Width - 3, Height - 3))
G.DrawRectangle(P2, New Rectangle(12, 40, Width - 24, Height - 52))
R1 = New Rectangle(1, 0, 15, Height)
B3 = New LinearGradientBrush(R1, C(3).Value, Color.Transparent, 90.0F)
G.FillRectangle(B3, R1)
G.FillRectangle(B3, New Rectangle(Width - 16, 0, 15, Height))
G.FillRectangle(B1, New Rectangle(13, 41, Width - 26, Height - 54))
R2 = New Rectangle(0, 2, Width, 2)
B4 = New LinearGradientBrush(R2, Color.Empty, Color.Empty, 0)
B4.InterpolationColors = CB
G.FillRectangle(B4, R2)
G.DrawRectangle(P1, New Rectangle(13, 41, Width - 26, Height - 54))
G.DrawRectangle(P1, New Rectangle(0, 0, Width - 1, Height - 1))
G.FillRectangle(B2, New Rectangle(0, 0, 2, 2))
G.FillRectangle(B2, New Rectangle(Width - 2, 0, 2, 2))
G.FillRectangle(B2, New Rectangle(Width - 2, Height - 2, 2, 2))
G.FillRectangle(B2, New Rectangle(0, Height - 2, 2, 2))
B.SetPixel(1, 1, Color.Black)
B.SetPixel(Width - 2, 1, Color.Black)
B.SetPixel(Width - 2, Height - 2, Color.Black)
B.SetPixel(1, Height - 2, Color.Black)
e.Graphics.DrawImage(B, 0, 0)
B3.Dispose()
B4.Dispose()
G.Dispose()
B.Dispose()
End Sub
Enum Direction As Integer
NONE = 0
LEFT = 10
RIGHT = 11
TOP = 12
TOPLEFT = 13
TOPRIGHT = 14
BOTTOM = 15
BOTTOMLEFT = 16
BOTTOMRIGHT = 17
End Enum
Private Current As Direction
Sub SetCurrent()
Dim T As Point = PointToClient(MousePosition)
If T.X < 7 And T.Y < 7 Then
Current = Direction.TOPLEFT
Cursor = Cursors.SizeNWSE
ElseIf T.X < 7 And T.Y > Height - 7 Then
Current = Direction.BOTTOMLEFT
Cursor = Cursors.SizeNESW
ElseIf T.X > Width - 7 And T.Y > Height - 7 Then
Current = Direction.BOTTOMRIGHT
Cursor = Cursors.SizeNWSE
ElseIf T.X > Width - 7 And T.Y < 7 Then
Current = Direction.TOPRIGHT
Cursor = Cursors.SizeNESW
ElseIf T.X < 7 Then
Current = Direction.LEFT
Cursor = Cursors.SizeWE
ElseIf T.X > Width - 7 Then
Current = Direction.RIGHT
Cursor = Cursors.SizeWE
ElseIf T.Y < 7 Then
Current = Direction.TOP
Cursor = Cursors.SizeNS
ElseIf T.Y > Height - 7 Then
Current = Direction.BOTTOM
Cursor = Cursors.SizeNS
Else
Current = Direction.NONE
Cursor = Cursors.Default
End If
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left Then
If TypeOf Parent Is Form Then
If DirectCast(Parent, Form).WindowState = FormWindowState.Maximized Then Return
End If
If Drag.Contains(e.Location) Then
Capture = False
DefWndProc(Message.Create(Parent.Handle, 161, New IntPtr(2), Nothing))
Else
If Current <> Direction.NONE And _Resizeable Then
Capture = False
DefWndProc(Message.Create(Parent.Handle, 161, New IntPtr(Current), Nothing))
End If
End If
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
If _Resizeable Then SetCurrent()
MyBase.OnMouseMove(e)
End Sub
Protected Overrides Sub OnSizeChanged(ByVal e As System.EventArgs)
Invalidate()
MyBase.OnSizeChanged(e)
End Sub
Private ReadOnly Property Drag() As Rectangle
Get
Return New Rectangle(7, 7, Width - 14, 35)
End Get
End Property
End Class
Class FButton
Inherits Control
Private Shadow_ As Boolean = True
Public Property Shadow() As Boolean
Get
Return Shadow_
End Get
Set(ByVal value As Boolean)
Shadow_ = value
Invalidate()
End Set
End Property
Sub New()
SetStyle(DirectCast(8198, ControlStyles), True)
Colors = {
New Pigment("Border", Color.White),
New Pigment("Backcolor", 247, 247, 251),
New Pigment("Highlight", Color.Black),
New Pigment("Gradient1", 64, 64, 64),
New Pigment("Gradient2", Color.Black),
New Pigment("Text Color", Color.White),
New Pigment("Text Shadow", 30, 0, 0, 0)
}
Font = New Font("Verdana", 8)
End Sub
Const Count As Byte = 7
Private C As Pigment()
Public Property Colors() As Pigment()
Get
Return C
End Get
Set(ByVal v As Pigment())
If v.Length <> Count Then Throw New IndexOutOfRangeException
P1 = New Pen(v(0).Value)
P2 = New Pen(v(2).Value)
B1 = New SolidBrush(v(6).Value)
B2 = New SolidBrush(v(5).Value)
C = v
Invalidate()
End Set
End Property
Private P1, P2 As Pen
Private B1, B2 As SolidBrush, B3 As LinearGradientBrush
Private SZ As Size, PT As Point
Private G As Graphics, B As Bitmap
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
B = New Bitmap(Width, Height)
G = Graphics.FromImage(B)
If Down Then
B3 = New LinearGradientBrush(ClientRectangle, C(4).Value, C(3).Value, 90.0F)
Else
B3 = New LinearGradientBrush(ClientRectangle, C(3).Value, C(4).Value, 90.0F)
End If
G.FillRectangle(B3, ClientRectangle)
If Not String.IsNullOrEmpty(Text) Then
SZ = G.MeasureString(Text, Font).ToSize
PT = New Point(CInt(Width / 2 - SZ.Width / 2), CInt(Height / 2 - SZ.Height / 2))
If Shadow_ Then G.DrawString(Text, Font, B1, PT.X + 1, PT.Y + 1)
G.DrawString(Text, Font, B2, PT)
End If
G.DrawRectangle(P1, New Rectangle(0, 0, Width - 1, Height - 1))
G.DrawRectangle(P2, New Rectangle(1, 1, Width - 3, Height - 3))
B.SetPixel(0, 0, C(1).Value)
B.SetPixel(Width - 1, 0, C(1).Value)
B.SetPixel(Width - 1, Height - 1, C(1).Value)
B.SetPixel(0, Height - 1, C(1).Value)
e.Graphics.DrawImage(B, 0, 0)
B3.Dispose()
G.Dispose()
B.Dispose()
End Sub
Private Down As Boolean
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = MouseButtons.Left Then
Down = True
Invalidate()
End If
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
Down = False
Invalidate()
MyBase.OnMouseUp(e)
End Sub
End Class
Class FProgressBar
Inherits Control
Private _Maximum As Double = 100
Public Property Maximum() As Double
Get
Return _Maximum
End Get
Set(ByVal v As Double)
_Maximum = v
Progress = _Current / v * 100
End Set
End Property
Private _Current As Double
Public Property Current() As Double
Get
Return _Current
End Get
Set(ByVal v As Double)
Progress = v / _Maximum * 100
End Set
End Property
Private _Progress As Double
Public Property Progress() As Double
Get
Return _Progress
End Get
Set(ByVal v As Double)
If v < 0 Then v = 0 Else If v > 100 Then v = 100
_Progress = v
_Current = v * 0.01 * _Maximum
Invalidate()
End Set
End Property
Sub New()
SetStyle(DirectCast(8198, ControlStyles), True)
Colors = {
New Pigment("Border", Color.White),
New Pigment("Backcolor1", 64, 64, 64),
New Pigment("Backcolor2", Color.Black),
New Pigment("Highlight", Color.Black),
New Pigment("Forecolor", Color.White),
New Pigment("Gloss", 130, 255, 255, 255)
}
End Sub
Const Count As Byte = 6
Private C As Pigment()
Public Property Colors() As Pigment()
Get
Return C
End Get
Set(ByVal v As Pigment())
If v.Length <> Count Then Throw New IndexOutOfRangeException
P1 = New Pen(v(0).Value)
P2 = New Pen(v(3).Value)
B1 = New SolidBrush(v(4).Value)
CB = New ColorBlend
CB.Colors = {v(5).Value, Color.Transparent, Color.Transparent}
CB.Positions = {0, 0.3, 1}
C = v
Invalidate()
End Set
End Property
Private P1, P2 As Pen
Private B1 As SolidBrush, B2 As LinearGradientBrush
Private CB As ColorBlend
Private G As Graphics, B As Bitmap
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
B = New Bitmap(Width, Height)
G = Graphics.FromImage(B)
G.Clear(C(2).Value)
G.FillRectangle(B1, New Rectangle(1, 1, CInt((Width * _Progress * 0.01) - 2), Height - 2))
B2 = New LinearGradientBrush(ClientRectangle, Color.Empty, Color.Empty, 90.0F)
B2.InterpolationColors = CB
G.FillRectangle(B2, ClientRectangle)
G.DrawRectangle(P1, New Rectangle(0, 0, Width - 1, Height - 1))
G.DrawRectangle(P2, New Rectangle(1, 1, Width - 3, Height - 3))
B.SetPixel(0, 0, C(1).Value)
B.SetPixel(Width - 1, 0, C(1).Value)
B.SetPixel(Width - 1, Height - 1, C(1).Value)
B.SetPixel(0, Height - 1, C(1).Value)
e.Graphics.DrawImage(B, 0, 0)
B2.Dispose()
G.Dispose()
B.Dispose()
End Sub
Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
Invalidate()
MyBase.OnSizeChanged(e)
End Sub
End Class