WinForm aux bords arrondis et déplaçable

Contenu du snippet


Description de la source

Création d'un contour de fenêtre personnalisable avec coins arrondis, nouvelle couleur de fond, et déplaçable à souhait.

Code

> A INCLURE DANS LE FORMULAIRE PRINCIPAL

#Region "CONCEPTION GRAPHIQUE DU FORMULAIRE"
    ' --------------------------------------------------------------------------------------------------------------------------------------------------
    ' DESSINER UN CADRE AUX BORDS ARRONDIS (Découpe de la fenêtre / Extérieur transparent - Intérieur coloré, Ajout d'une bordure (Choix de la couleur et épaisseur du trait)
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        Dim grfx As Graphics = e.Graphics
        grfx.SmoothingMode = SmoothingMode.HighQuality

        Dim grfxPath1 As New GraphicsPath

        Dim monRectangle As New Rectangle(12, 2, Me.Width - 24, Me.Height - 4)
        grfxPath1.AddRectangle(monRectangle)

        ' ----------------------------------- DEFINITION DE LA COULEUR DE "BRUSH" -----------------------------------------
        Dim Couleur As Color = Color.FromArgb(100, 100, 100)
        Dim myBrush As SolidBrush
        myBrush = New SolidBrush(Couleur)
        ' -----------------------------------------------------------------------------------------------------------------

        Dim co As New Pen(Brushes.White, 2.0F)
        grfx.DrawPath(co, GetRoundedRectPath(monRectangle, 10))         ' Bordure de fenêtre
        grfx.FillPath(myBrush, GetRoundedRectPath(monRectangle, 10))    ' Intérieur de fenêtre

        grfx.SetClip(grfxPath1, CombineMode.Replace)
    End Sub

    ' BLOC DE FONCTIONS POUR BOUGER LA FENETRE DANS L'ECRAN
    Private MouseCurrentPos, MouseNewPos, formPos, formNewPos As Point
    Private _mouseDown As Boolean = False
    Private Sub Frm_mapage_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseDown
        ' quand le clic est enfoncé, il faut activer le flag _mousedown à true et stocker la position courrante du curseur 
        If e.Button = MouseButtons.Left Then
            _mouseDown = True
            MouseCurrentPos = Control.MousePosition
            formPos = Location
        End If
    End Sub 'Form1_MouseDown
    Private Sub Frm_mapage_Add_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseUp
        'quand le clic est relaché, il faut activer le flag _mousedown à false
        If e.Button = MouseButtons.Left Then
            _mouseDown = False
        End If
    End Sub
    Private Sub Frm_mapage_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
        Handles MyBase.MouseMove
        ' déplacement de la form
        If _mouseDown = True Then
            MouseNewPos = Control.MousePosition ' la position de la souris à l'écran
            formNewPos.X = MouseNewPos.X - MouseCurrentPos.X + formPos.X
            formNewPos.Y = MouseNewPos.Y - MouseCurrentPos.Y + formPos.Y
            Location = formNewPos
            formPos = formNewPos
            MouseCurrentPos = MouseNewPos
        End If
    End Sub
    ' --------------------------------------------------------------------------------------------------------------------------------------------------

#End Region

> A METTRE DANS UN MODULE :

Public Function GetRoundedRectPath(ByVal Rect As System.Drawing.Rectangle, ByVal Radius As Integer) As GraphicsPath
        Dim Diam As Integer = Radius * 2.5
        Dim ArcRect As New System.Drawing.Rectangle(Rect.Location, New Size(Diam, Diam))
        Dim Path As New System.Drawing.Drawing2D.GraphicsPath()

        Path.AddArc(ArcRect, 180, 90)
        ArcRect.X = Rect.Right - Diam
        Path.AddArc(ArcRect, 270, 90)
        ArcRect.Y = Rect.Bottom - Diam
        Path.AddArc(ArcRect, 0, 90)
        ArcRect.X = Rect.Left
        Path.AddArc(ArcRect, 90, 90)
        Path.CloseFigure()
        Return Path
    End Function

' Enjoy ! ;-)

Edit : Ajout des balises de code (jordane)

A voir également