1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| Public Sub RoundRectangle(rpt As Report, ctrlDebut As Control, ctrlFin As Control, _
blnHautGauche As Boolean, blnHautDroit As Boolean, _
blnBasGauche As Boolean, blnBasDroit As Boolean, _
lngRayon As Long, lngDecalage As Long, lngColorTrait As Long)
' ======================================================================================
' Procedure : Module :Routiones // Procédure : RoundRectangle
' DateTime : 01/11/2007 18:11
' Auteur : Starec - Philippe JOCHMANS - http://starec.developpez.com
' Description : Cette procédure va permettre de réaliser un groupe de rectangles avec
' pleins d'options
' rpt : nom de l'état
' ctrlDebut : nom du contrôle le plus en haut à gauche
' ctrlFin : nom du contrôle le plus en bas à droite
' blnBasHautGauche : si true, l'angle est arrondi et ainsi de suite pour les autres
' lngRayon : rayon de l'arrondi
' lngDecalage : décalage du cadre par rapport au ctrl de début et de fin
' lngColorTrait : Couleur du trait
'=======================================================================================
' ===== constante =====
Const PI = 3.14159265359
' ===== déclaration des variables =====
Dim lngTop As Long ' position top du rectangle
Dim lngLeft As Long ' position left du rectangle
Dim lngWidth As Long ' largeur du rectangle
Dim lngHeight As Long ' hauteur du rectangle
' ===== affectation =====
lngTop = ctrlDebut.Top - lngDecalage
lngLeft = ctrlDebut.Left - lngDecalage
lngWidth = ctrlFin.Left + ctrlFin.Width - ctrlDebut.Left + (lngDecalage * 2)
lngHeight = ctrlFin.Top + ctrlFin.Height - ctrlDebut.Top + (lngDecalage * 2)
' ==== dessin des angles ====
If blnHautGauche Then ' si le haut gauche est arrondi
rpt.Circle (lngLeft + lngRayon, lngTop + lngRayon), lngRayon, lngColorTrait, PI / 2, PI
Else
rpt.Line (lngLeft, lngTop)-(lngLeft + lngRayon, lngTop), lngColorTrait
rpt.Line (lngLeft, lngTop)-(lngLeft, lngTop + lngRayon), lngColorTrait
End If
If blnHautDroit Then ' si le haut droit est arrondi
rpt.Circle (lngLeft + lngWidth - lngRayon, lngTop + lngRayon), lngRayon, lngColorTrait, 0, PI / 2
Else
rpt.Line (lngLeft + lngWidth - lngRayon, lngTop)-(lngLeft + lngWidth, lngTop), lngColorTrait
rpt.Line (lngLeft + lngWidth, lngTop)-(lngLeft + lngWidth, lngTop + lngRayon), lngColorTrait
End If
If blnBasDroit Then ' si le bas droit est arrondi
rpt.Circle (lngLeft + lngWidth - lngRayon, lngTop + lngHeight - lngRayon), lngRayon, lngColorTrait, PI + PI / 2, 0
Else
rpt.Line (lngLeft + lngWidth, lngTop + lngHeight - lngRayon)-(lngLeft + lngWidth, lngTop + lngHeight), lngColorTrait
rpt.Line (lngLeft + lngWidth, lngTop + lngHeight)-(lngLeft + lngWidth - lngRayon, lngTop + lngHeight), lngColorTrait
End If
If blnBasGauche Then ' si le bas gauche est arrondi
rpt.Circle (lngLeft + lngRayon, lngTop + lngHeight - lngRayon), lngRayon, lngColorTrait, PI, PI + PI / 2
Else
rpt.Line (lngLeft, lngTop + lngHeight - lngRayon)-(lngLeft, lngTop + lngHeight), lngColorTrait
rpt.Line (lngLeft, lngTop + lngHeight)-(lngLeft + lngRayon, lngTop + lngHeight), lngColorTrait
End If
' ==== dessin des cotés =====
' coté haut
rpt.Line (lngLeft + lngRayon, lngTop)-(lngLeft + lngWidth - lngRayon, lngTop), lngColorTrait
' coté droit
rpt.Line (lngLeft + lngWidth, lngTop + lngRayon)-(lngLeft + lngWidth, lngTop + lngHeight - lngRayon), lngColorTrait
' coté bas
rpt.Line (lngLeft + lngRayon, lngTop + lngHeight)-(lngLeft + lngWidth - lngRayon, lngTop + lngHeight), lngColorTrait
' coté gauche
rpt.Line (lngLeft, lngTop + lngRayon)-(lngLeft, lngTop + lngHeight - lngRayon), lngColorTrait
End Sub
' Appel de la routine
Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer)
Call RoundRectangle(Me, Me.Étiquette58, Me.txtboxdescri_act, True, True, True, True, 200, 50, vbBlack)
End Sub |
Partager