Imports System.ComponentModel
Imports System.Drawing.Drawing2D
'''
''' Grundcode aus einem meiner Projekte kopiert. lg Gather
'''
'''
Public Class GlossyButton : Inherits Control
#Region " Properties "
#Region " Declarations "
'''
''' Die derzeitige Farbe der Umradung.
'''
Private _BorderColor As Color = Color.FromArgb(102, 36, 226)
'''
''' Die derzeitige standard Hintergrundfarbe.
'''
Private _DefaultColor As Color = Color.FromArgb(42, 42, 42)
Private _DefaultColor2 As Color = Color.FromArgb(22, 22, 22)
'''
''' Die derzeitige Hover-Farbe.
'''
Private _HoverColor As Color = Color.FromArgb(72, 72, 72)
Private _HoverColor2 As Color = Color.FromArgb(52, 52, 52)
'''
''' Die derzeitige Pressed-Farbe.
'''
Private _PressedColor As Color = Color.FromArgb(102, 36, 226)
Private _PressedColor2 As Color = Color.FromArgb(82, 16, 206)
'''
''' Gibt an, ob das Steuerelement umrandet werden soll.
'''
Private _DrawBorders As Boolean = True
#End Region
Public Property DrawBorder As Boolean
Get
Return _DrawBorders
End Get
Set(value As Boolean)
If _DrawBorders <> value Then : _DrawBorders = value : Invalidate() : End If
End Set
End Property
Public Property PressedColor As Color
Get
Return _PressedColor
End Get
Set(value As Color)
If _PressedColor <> value Then : _PressedColor = value : Invalidate() : End If
End Set
End Property
Public Property PressedColor2 As Color
Get
Return _PressedColor2
End Get
Set(value As Color)
If _PressedColor2 <> value Then : _PressedColor2 = value : Invalidate() : End If
End Set
End Property
Public Property HoverColor As Color
Get
Return _HoverColor
End Get
Set(value As Color)
If _HoverColor <> value Then : _HoverColor = value : Invalidate() : End If
End Set
End Property
Public Property HoverColor2 As Color
Get
Return _HoverColor2
End Get
Set(value As Color)
If _HoverColor2 <> value Then : _HoverColor2 = value : Invalidate() : End If
End Set
End Property
Public Property DefaultColor As Color
Get
Return _DefaultColor
End Get
Set(value As Color)
If _DefaultColor <> value Then : _DefaultColor = value : Invalidate() : End If
End Set
End Property
Public Property DefaultColor2 As Color
Get
Return _DefaultColor2
End Get
Set(value As Color)
If _DefaultColor2 <> value Then : _DefaultColor2 = value : Invalidate() : End If
End Set
End Property
Public Property BorderColor As Color
Get
Return _BorderColor
End Get
Set(value As Color)
If _BorderColor <> value Then : _BorderColor = value : Invalidate() : End If
End Set
End Property
#End Region
#Region " Overridden Methods "
#Region " Mouse-Hook "
'
' Mouse-Hook
' Benötigt für das korrekte Darstellen des Hover bzw. Pressed-Effektes
' Greift auf die Helpers-Klasse zu
'
'''
''' Der derzeitige Status der Maus.
'''
Private _MouseState As Helpers.MouseState = Helpers.MouseState.None
Protected Overrides Sub OnMouseEnter(e As EventArgs)
_MouseState = Helpers.MouseState.Over : Invalidate()
MyBase.OnMouseEnter(e)
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
_MouseState = Helpers.MouseState.None : Invalidate()
MyBase.OnMouseLeave(e)
End Sub
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
_MouseState = Helpers.MouseState.Pressed : Invalidate()
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
_MouseState = Helpers.MouseState.Over : Invalidate()
MyBase.OnMouseUp(e)
End Sub
#End Region
Protected Overrides Sub OnPaint(e As PaintEventArgs)
Dim g As Graphics = e.Graphics
Dim r As New Rectangle(0, 0, Width - 1, Height - 1)
' Button zeichnen
Using p As New Pen(_BorderColor)
Using b As New LinearGradientBrush(r, _DefaultColor, _DefaultColor2, 90)
Select Case (_MouseState)
Case Helpers.MouseState.Over : b.LinearColors = {_HoverColor, _HoverColor2}
Case Helpers.MouseState.Pressed : b.LinearColors = {_PressedColor, _PressedColor2}
End Select
g.FillRectangle(b, r) 'Hintergrund zeichnen
End Using
If _DrawBorders Then g.DrawRectangle(p, r) 'Umrandung zeichnen
End Using
' Buttontext zeichnen
Using SF As New StringFormat()
Using b As New SolidBrush(ForeColor)
SF.LineAlignment = StringAlignment.Center : SF.Alignment = StringAlignment.Center 'Kann nach Belieben verändert werden -> Eigenschaft erstellen
g.DrawString(Text, Font, b, r, SF)
End Using
End Using
MyBase.OnPaint(e)
End Sub
#End Region
End Class