Utilisation de canvas.rectangle/roundrect/ellipse dans la limite définie par un trect ...

Soyez le premier à donner votre avis sur cette source.

Vue 8 881 fois - Téléchargée 738 fois

Description

Alors là, tout le monde se demande si j' ai pas besoin de vacances !!!
Il va nous apprendre à dessiner un Rectangle dans un canvas maintenant???
Alors oui, j' ai besoin de vacances et oui, je vais peux être vous apprendre à dessiner un rectangle :)

En fait, je pense que certains ont déjà compris où je veux en venir...
Imaginons que vous voulez dessiner un rectangle definissant la limite d' un de vos compo avec une épaissur de trait de 10 pixels.
La grosse erreur que l' on a tous fait une fois c' est d' écrire ceci:
MonCompo.Canvas.Pen.Color := clBlack;
MonCompo.Canvas.Pen.Width := 10;
MonCompo.Canvas.Brush.Color := clYellow;
MonCompo.Canvas.Rectangle(MonCompo.ClientRect);
Et alors? ça marche me direz-vous ...
Et bien l' effet n' est pas celui recherché: le trait n' a pas 10 pixels!
Comment ça se fait? et bien le problème est que le trait dessiné est centré sur le TRect passé en paramètre à la fonction Rectangle du canvas.
C' est pour cela que pour un trait de 1 pixel le problème n' apparait pas.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Salut DeltaFX,
c' est exactement le même problème ...
A+
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
J'ai eu un pb similaire avec canvas.ellipse.


procedure DrawInnerEllipse(aCanvas: TCanvas; aRect: TRect);
begin
if aCanvas.Pen.Width > 1 then
aRect:=RECT(aRect.Left + aCanvas.Pen.Width div 2,
aRect.Top + aCanvas.Pen.Width div 2,
aRect.Right +1 -(aCanvas.Pen.Width-1) div 2,
aRect.Bottom +1 -(aCanvas.Pen.Width-1) div 2);

aCanvas.Ellipse(aRect);
end;
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Je tiens à dire merci pour la note !!!
Laisser un 2/10 sans avoir commenté la note c' est pas sympa, ou peut être n' a t-il pas simplement essayer de rentrer dans le sujet.
Ça me décoit ...

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.