WinForm aux bords arrondis et déplaçable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 939 fois - Téléchargée 4 fois

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

Ajouter un commentaire

Commentaires

cs_Le Pivert
Messages postés
6434
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 décembre 2019
91 -
Bonjour,

Quelques petites précisions pour que cela fonctionne:
Mettre

Option Strict On
Imports System.Drawing.Drawing2D


Ensuite il faut que le Form ait la propriété FormBorderStyle à None et mettre un évenement pour le fermer comme ceci:

 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    End Sub
    Private Sub Form1_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDoubleClick
        Me.Close()
    End Sub


et si vous ne voulez pas voir les contours changer cela

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


par ceci

 Dim monRectangle As New Rectangle(0, 0, Me.Width, Me.Height)


Sinon c'est sympa

@+ Le Pivert
GregYoung
Messages postés
29
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
23 décembre 2018
-
Oui j'avais essayé, mais pas trouvé la balise qui permettait de convertir le contenu.. Désolé.
> Description ajoutée
vb95
Messages postés
1985
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2019
79 -
Merci jordane45
Ai lu trop vite désolé
Mes yeux me trahissent !
vb95
Messages postés
1985
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2019
79 -
Merci bien pour ta réactivité !
jordane45
Messages postés
27059
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2019
318 > vb95
Messages postés
1985
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 décembre 2019
-
Pour l'instant il n'a rien fait ... c'est moi qui ai édité son message pour ajouter la coloration syntaxique...
Par contre j'attends qu'il ajoute une description de son code.
:-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.