Il peut sembler simple à utiliser DrawFocusRect
, mais si vous avez besoin de dessiner quelque chose d'autre que des rectangles, vous pouvez lire en avance.
Le style de stylo psDot
ne signifie pas que tous les deux pixels sont colorés et que l'autre est effacé. Si vous y réfléchissez, plus la résolution est élevée, plus il est difficile de voir la différence entre les points en pointillés et les points en gris. Il existe un autre style de stylo psAlternate
qui alterne les pixels. Les docs disent:
psAlternate
Le stylo fixe tous les pixels. (Ce style s'applique uniquement aux stylos cosmétiques .) Ce style est uniquement valide pour les stylos créés avec la fonction API ExtCreatePen . (Voir les documents MS Windows SDK.) Cela s'applique à à la fois VCL et VCL.NET.
Pour définir le stylo et l'utiliser que nous faisons comme suit
var
c: TCanvas;
oldpenh, newpenh: HPEN; // pen handles
lbrush: TLogBrush; // logical brush
...
c := pbx.Canvas; // pbx is a TPintBox, but can be anything with a canvas
lbrush.lbStyle := BS_SOLID;
lbrush.lbColor := clBlack;
lbrush.lbHatch := 0;
// create the pen
newpenh := ExtCreatePen(PS_COSMETIC or PS_ALTERNATE, 1, lbrush, 0, nil);
try
// select it
oldpenh := SelectObject(c.Handle, newpenh);
// use the pen
c.MoveTo(0, 0);
c.LineTo(0, pbx.Height - 1);
c.LineTo(pbx.Width - 1, pbx.Height - 1);
c.LineTo(pbx.Width - 1, 0);
c.LineTo(0, 0);
c.Ellipse(3, 3, pbx.width-3, pbx.Height-3);
// revert to the old pen
SelectObject(c.Handle, oldpenh);
finally
// delete the pen
DeleteObject(newpenh);
end;
Et enfin à quoi il ressemble (la loupe est à x 10)
Merci, cette fonctionne très bien! Mais juste par curiosité: Pourquoi il y a de petits tirets au lieu de vrais points (comme dans votre exemple) dans le résultat de mon code? – user1580348