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)