'Creator: Aeonhack 'Date: 4/23/2011 'Site: www.elitevs.net 'Version: 1.4 'This is the fixed version. -aeon Imports System.Drawing.Drawing2D Imports System.ComponentModel Imports System.Runtime.InteropServices MustInherit Class Theme Inherits ContainerControl #Region " Initialization " Protected G As Graphics Sub New() SetStyle(DirectCast(139270, ControlStyles), True) End Sub Private ParentIsForm As Boolean Protected Overrides Sub OnHandleCreated(ByVal e As EventArgs) Dock = DockStyle.Fill ParentIsForm = TypeOf Parent Is Form If ParentIsForm Then If Not _TransparencyKey = Color.Empty Then ParentForm.TransparencyKey = _TransparencyKey ParentForm.FormBorderStyle = FormBorderStyle.None End If MyBase.OnHandleCreated(e) End Sub Overrides Property Text As String Get Return MyBase.Text End Get Set(ByVal v As String) MyBase.Text = v Invalidate() End Set End Property #End Region #Region " Sizing and Movement " Private _Resizable As Boolean = True Property Resizable() As Boolean Get Return _Resizable End Get Set(ByVal value As Boolean) _Resizable = value End Set End Property Private _MoveHeight As Integer = 24 Property MoveHeight() As Integer Get Return _MoveHeight End Get Set(ByVal v As Integer) _MoveHeight = v Header = New Rectangle(7, 7, Width - 14, _MoveHeight - 7) End Set End Property Private Flag As IntPtr Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If Not e.Button = MouseButtons.Left Then Return If ParentIsForm Then If ParentForm.WindowState = FormWindowState.Maximized Then Return If Header.Contains(e.Location) Then Flag = New IntPtr(2) ElseIf Current.Position = 0 Or Not _Resizable Then Return Else Flag = New IntPtr(Current.Position) End If Capture = False DefWndProc(Message.Create(Parent.Handle, 161, Flag, Nothing)) MyBase.OnMouseDown(e) End Sub Private Structure Pointer ReadOnly Cursor As Cursor, Position As Byte Sub New(ByVal c As Cursor, ByVal p As Byte) Cursor = c Position = p End Sub End Structure Private F1, F2, F3, F4 As Boolean, PTC As Point Private Function GetPointer() As Pointer PTC = PointToClient(MousePosition) F1 = PTC.X < 7 F2 = PTC.X > Width - 7 F3 = PTC.Y < 7 F4 = PTC.Y > Height - 7 If F1 And F3 Then Return New Pointer(Cursors.SizeNWSE, 13) If F1 And F4 Then Return New Pointer(Cursors.SizeNESW, 16) If F2 And F3 Then Return New Pointer(Cursors.SizeNESW, 14) If F2 And F4 Then Return New Pointer(Cursors.SizeNWSE, 17) If F1 Then Return New Pointer(Cursors.SizeWE, 10) If F2 Then Return New Pointer(Cursors.SizeWE, 11) If F3 Then Return New Pointer(Cursors.SizeNS, 12) If F4 Then Return New Pointer(Cursors.SizeNS, 15) Return New Pointer(Cursors.Default, 0) End Function Private Current, Pending As Pointer Private Sub SetCurrent() Pending = GetPointer() If Current.Position = Pending.Position Then Return Current = GetPointer() Cursor = Current.Cursor End Sub Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs) If _Resizable Then SetCurrent() MyBase.OnMouseMove(e) End Sub Protected Header As Rectangle Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs) If Width = 0 OrElse Height = 0 Then Return Header = New Rectangle(7, 7, Width - 14, _MoveHeight - 7) Invalidate() MyBase.OnSizeChanged(e) End Sub #End Region #Region " Convienence " MustOverride Sub PaintHook() Protected NotOverridable Overrides Sub OnPaint(ByVal e As PaintEventArgs) If Width = 0 OrElse Height = 0 Then Return G = e.Graphics PaintHook() End Sub Private _TransparencyKey As Color Property TransparencyKey() As Color Get Return _TransparencyKey End Get Set(ByVal v As Color) _TransparencyKey = v Invalidate() End Set End Property Private _Image As Image Property Image() As Image Get Return _Image End Get Set(ByVal value As Image) _Image = value Invalidate() End Set End Property ReadOnly Property ImageWidth() As Integer Get If _Image Is Nothing Then Return 0 Return _Image.Width End Get End Property Private _Size As Size Private _Rectangle As Rectangle Private _Gradient As LinearGradientBrush Private _Brush As SolidBrush Protected Sub DrawCorners(ByVal c As Color, ByVal rect As Rectangle) _Brush = New SolidBrush(c) G.FillRectangle(_Brush, rect.X, rect.Y, 1, 1) G.FillRectangle(_Brush, rect.X + (rect.Width - 1), rect.Y, 1, 1) G.FillRectangle(_Brush, rect.X, rect.Y + (rect.Height - 1), 1, 1) G.FillRectangle(_Brush, rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), 1, 1) End Sub Protected Sub DrawBorders(ByVal p1 As Pen, ByVal p2 As Pen, ByVal rect As Rectangle) G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3) End Sub Protected Sub DrawText(ByVal a As HorizontalAlignment, ByVal c As Color, ByVal x As Integer) DrawText(a, c, x, 0) End Sub Protected Sub DrawText(ByVal a As HorizontalAlignment, ByVal c As Color, ByVal x As Integer, ByVal y As Integer) If String.IsNullOrEmpty(Text) Then Return _Size = G.MeasureString(Text, Font).ToSize _Brush = New SolidBrush(c) Select Case a Case HorizontalAlignment.Left G.DrawString(Text, Font, _Brush, x, _MoveHeight \ 2 - _Size.Height \ 2 + y) Case HorizontalAlignment.Right G.DrawString(Text, Font, _Brush, Width - _Size.Width - x, _MoveHeight \ 2 - _Size.Height \ 2 + y) Case HorizontalAlignment.Center G.DrawString(Text, Font, _Brush, Width \ 2 - _Size.Width \ 2 + x, _MoveHeight \ 2 - _Size.Height \ 2 + y) End Select End Sub Protected Sub DrawIcon(ByVal a As HorizontalAlignment, ByVal x As Integer) DrawIcon(a, x, 0) End Sub Protected Sub DrawIcon(ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer) If _Image Is Nothing Then Return Select Case a Case HorizontalAlignment.Left G.DrawImage(_Image, x, _MoveHeight \ 2 - _Image.Height \ 2 + y) Case HorizontalAlignment.Right G.DrawImage(_Image, Width - _Image.Width - x, _MoveHeight \ 2 - _Image.Height \ 2 + y) Case HorizontalAlignment.Center G.DrawImage(_Image, Width \ 2 - _Image.Width \ 2, _MoveHeight \ 2 - _Image.Height \ 2) End Select End Sub Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single) _Rectangle = New Rectangle(x, y, width, height) _Gradient = New LinearGradientBrush(_Rectangle, c1, c2, angle) G.FillRectangle(_Gradient, _Rectangle) End Sub #End Region End Class MustInherit Class ThemeControl Inherits Control #Region " Initialization " Protected G As Graphics, B As Bitmap Sub New() SetStyle(DirectCast(139270, ControlStyles), True) B = New Bitmap(1, 1) G = Graphics.FromImage(B) End Sub Sub AllowTransparent() SetStyle(ControlStyles.Opaque, False) SetStyle(ControlStyles.SupportsTransparentBackColor, True) End Sub Overrides Property Text As String Get Return MyBase.Text End Get Set(ByVal v As String) MyBase.Text = v Invalidate() End Set End Property #End Region #Region " Mouse Handling " Protected Enum State As Byte MouseNone = 0 MouseOver = 1 MouseDown = 2 End Enum Protected MouseState As State Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs) ChangeMouseState(State.MouseNone) MyBase.OnMouseLeave(e) End Sub Protected Overrides Sub OnMouseEnter(ByVal e As EventArgs) ChangeMouseState(State.MouseOver) MyBase.OnMouseEnter(e) End Sub Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs) ChangeMouseState(State.MouseOver) MyBase.OnMouseUp(e) End Sub Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs) If e.Button = MouseButtons.Left Then ChangeMouseState(State.MouseDown) MyBase.OnMouseDown(e) End Sub Private Sub ChangeMouseState(ByVal e As State) MouseState = e Invalidate() End Sub #End Region #Region " Convienence " MustOverride Sub PaintHook() Protected NotOverridable Overrides Sub OnPaint(ByVal e As PaintEventArgs) If Width = 0 OrElse Height = 0 Then Return PaintHook() e.Graphics.DrawImage(B, 0, 0) End Sub Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs) If Not Width = 0 AndAlso Not Height = 0 Then B = New Bitmap(Width, Height) G = Graphics.FromImage(B) Invalidate() End If MyBase.OnSizeChanged(e) End Sub Private _NoRounding As Boolean Property NoRounding() As Boolean Get Return _NoRounding End Get Set(ByVal v As Boolean) _NoRounding = v Invalidate() End Set End Property Private _Image As Image Property Image() As Image Get Return _Image End Get Set(ByVal value As Image) _Image = value Invalidate() End Set End Property ReadOnly Property ImageWidth() As Integer Get If _Image Is Nothing Then Return 0 Return _Image.Width End Get End Property ReadOnly Property ImageTop() As Integer Get If _Image Is Nothing Then Return 0 Return Height \ 2 - _Image.Height \ 2 End Get End Property Private _Size As Size Private _Rectangle As Rectangle Private _Gradient As LinearGradientBrush Private _Brush As SolidBrush Protected Sub DrawCorners(ByVal c As Color, ByVal rect As Rectangle) If _NoRounding Then Return B.SetPixel(rect.X, rect.Y, c) B.SetPixel(rect.X + (rect.Width - 1), rect.Y, c) B.SetPixel(rect.X, rect.Y + (rect.Height - 1), c) B.SetPixel(rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), c) End Sub Protected Sub DrawBorders(ByVal p1 As Pen, ByVal p2 As Pen, ByVal rect As Rectangle) G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3) End Sub Protected Sub DrawText(ByVal a As HorizontalAlignment, ByVal c As Color, ByVal x As Integer) DrawText(a, c, x, 0) End Sub Protected Sub DrawText(ByVal a As HorizontalAlignment, ByVal c As Color, ByVal x As Integer, ByVal y As Integer) If String.IsNullOrEmpty(Text) Then Return _Size = G.MeasureString(Text, Font).ToSize _Brush = New SolidBrush(c) Select Case a Case HorizontalAlignment.Left G.DrawString(Text, Font, _Brush, x, Height \ 2 - _Size.Height \ 2 + y) Case HorizontalAlignment.Right G.DrawString(Text, Font, _Brush, Width - _Size.Width - x, Height \ 2 - _Size.Height \ 2 + y) Case HorizontalAlignment.Center G.DrawString(Text, Font, _Brush, Width \ 2 - _Size.Width \ 2 + x, Height \ 2 - _Size.Height \ 2 + y) End Select End Sub Protected Sub DrawIcon(ByVal a As HorizontalAlignment, ByVal x As Integer) DrawIcon(a, x, 0) End Sub Protected Sub DrawIcon(ByVal a As HorizontalAlignment, ByVal x As Integer, ByVal y As Integer) If _Image Is Nothing Then Return Select Case a Case HorizontalAlignment.Left G.DrawImage(_Image, x, Height \ 2 - _Image.Height \ 2 + y) Case HorizontalAlignment.Right G.DrawImage(_Image, Width - _Image.Width - x, Height \ 2 - _Image.Height \ 2 + y) Case HorizontalAlignment.Center G.DrawImage(_Image, Width \ 2 - _Image.Width \ 2, Height \ 2 - _Image.Height \ 2) End Select End Sub Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single) _Rectangle = New Rectangle(x, y, width, height) _Gradient = New LinearGradientBrush(_Rectangle, c1, c2, angle) G.FillRectangle(_Gradient, _Rectangle) End Sub #End Region End Class MustInherit Class ThemeContainerControl Inherits ContainerControl #Region " Initialization " Protected G As Graphics, B As Bitmap Sub New() SetStyle(DirectCast(139270, ControlStyles), True) B = New Bitmap(1, 1) G = Graphics.FromImage(B) End Sub Sub AllowTransparent() SetStyle(ControlStyles.Opaque, False) SetStyle(ControlStyles.SupportsTransparentBackColor, True) End Sub #End Region #Region " Convienence " MustOverride Sub PaintHook() Protected NotOverridable Overrides Sub OnPaint(ByVal e As PaintEventArgs) If Width = 0 OrElse Height = 0 Then Return PaintHook() e.Graphics.DrawImage(B, 0, 0) End Sub Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs) If Not Width = 0 AndAlso Not Height = 0 Then B = New Bitmap(Width, Height) G = Graphics.FromImage(B) Invalidate() End If MyBase.OnSizeChanged(e) End Sub Private _NoRounding As Boolean Property NoRounding() As Boolean Get Return _NoRounding End Get Set(ByVal v As Boolean) _NoRounding = v Invalidate() End Set End Property Private _Rectangle As Rectangle Private _Gradient As LinearGradientBrush Protected Sub DrawCorners(ByVal c As Color, ByVal rect As Rectangle) If _NoRounding Then Return B.SetPixel(rect.X, rect.Y, c) B.SetPixel(rect.X + (rect.Width - 1), rect.Y, c) B.SetPixel(rect.X, rect.Y + (rect.Height - 1), c) B.SetPixel(rect.X + (rect.Width - 1), rect.Y + (rect.Height - 1), c) End Sub Protected Sub DrawBorders(ByVal p1 As Pen, ByVal p2 As Pen, ByVal rect As Rectangle) G.DrawRectangle(p1, rect.X, rect.Y, rect.Width - 1, rect.Height - 1) G.DrawRectangle(p2, rect.X + 1, rect.Y + 1, rect.Width - 3, rect.Height - 3) End Sub Protected Sub DrawGradient(ByVal c1 As Color, ByVal c2 As Color, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal angle As Single) _Rectangle = New Rectangle(x, y, width, height) _Gradient = New LinearGradientBrush(_Rectangle, c1, c2, angle) G.FillRectangle(_Gradient, _Rectangle) End Sub #End Region End Class Class GTheme Inherits Theme Sub New() MoveHeight = 29 C1 = Color.FromArgb(41, 41, 41) C2 = Color.FromArgb(25, 25, 25) P1 = New Pen(Color.FromArgb(58, 58, 58)) P2 = New Pen(C2) BackColor = C1 ForeColor = Color.FromArgb(100, 100, 100) TransparencyKey = Color.Fuchsia End Sub Private C1, C2 As Color Private P1, P2 As Pen Overrides Sub PaintHook() G.Clear(C1) DrawGradient(C2, C1, 0, 0, Width, 28, 90S) G.DrawLine(P2, 0, 28, Width, 28) G.DrawLine(P1, 0, 29, Width, 29) DrawText(HorizontalAlignment.Left, ForeColor, 5 + ImageWidth) DrawIcon(HorizontalAlignment.Left, 5) DrawBorders(Pens.Black, P1, ClientRectangle) DrawCorners(Color.Fuchsia, ClientRectangle) End Sub End Class Class GButton Inherits ThemeControl Private P1, P2 As Pen Private C1, C2 As Color Sub New() P1 = New Pen(Color.FromArgb(25, 25, 25)) P2 = New Pen(Color.FromArgb(11, Color.White)) C1 = Color.FromArgb(41, 41, 41) C2 = Color.FromArgb(51, 51, 51) End Sub Overrides Sub PaintHook() If MouseState = State.MouseDown Then DrawGradient(C1, C2, 0, 0, Width, Height, 90S) Else DrawGradient(C2, C1, 0, 0, Width, Height, 90S) End If DrawText(HorizontalAlignment.Center, ForeColor, 0) DrawIcon(HorizontalAlignment.Left, 0) DrawBorders(P1, P2, ClientRectangle) DrawCorners(BackColor, ClientRectangle) End Sub End Class