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
| procedure TForm1.PB_EtatPaint(Sender: TObject);
const
Coin = 7.5;
Arc = 2 * Coin;
var
Dessin: TGPGraphics;
Crayon: TGPPen;
Degrade: TGPLinearGradientBrush;
Chemin: TGPGraphicsPath;
Larg, Haut: Integer;
begin
// Créer le dessin
Dessin := TGPGraphics.Create(TPaintBox(Sender).Canvas.Handle);
Dessin.SetCompositingQuality(CompositingQualityHighQuality);
Dessin.SetSmoothingMode(SmoothingModeAntiAlias);
// Créer le crayon pour les contours
Crayon := TGPPen.Create(MakeColor($00, $80, $C0));
// Créer le dégradé de couleur
with TPaintBox(Sender) do
Degrade := TGPLinearGradientBrush.Create(MakeRect(Canvas.ClipRect),
MakeColor($FF, $FF, $FF), ColorRefToARGB(ColorToRGB(Color)),
LinearGradientModeVertical);
// Initialise le chemin
Chemin := TGPGraphicsPath.Create();
try
with TPaintBox(Sender) do
begin
Larg := Width - 1;
Haut := Height - 1;
end;
with Chemin do
begin
// Haut
AddLine(Coin, 0, Larg - Coin, 0);
// Coin haut-droit
AddArc(Larg - Arc, 0, Arc, Arc, 270, 90);
// Droit
AddLine(Larg, Coin, Larg, Haut - Coin);
// Coin bas-droit
AddArc(Larg - Arc, Haut - Arc, Arc, Arc, 0, 90);
// Bas
AddLine(Larg - Coin, Haut, Coin, Haut);
// Coin bas-gauche
AddArc(0, Haut - Arc, Arc, Arc, 90, 90);
// Gauche
AddLine(0, Haut - Coin, 0, Coin);
// Coin haut-gauche
AddArc(0, 0, Arc, Arc, 180, 90);
end;
with Dessin do
begin
Clear(ColorRefToARGB(ColorToRGB(TPaintBox(Sender).Color)));
DrawPath(Crayon, Chemin);
FillPath(Degrade, Chemin);
end;
finally
Crayon.Free();
Degrade.Free();
Chemin.Free();
Dessin.Free();
end;
end; |
Partager