Imports System.ComponentModel Imports System.Drawing.Drawing2D ''' ''' Grundcode aus einem meiner Projekte kopiert. lg Gather ''' ''' https://www.vb-paradise.de/index.php/Thread/123225-Controlsammlung-SteamControls-Ein-modernes-DarkUI-f%C3%BCr-deine-Anwendung/ 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