Point sur un canvas

Résolu
jabbi Messages postés 9 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 10 mars 2005 - 9 mars 2005 à 10:20
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 9 mars 2005 à 14:03
bonjour, lorsque je clik sur mon canvas g fais en sorte qu'il apparaisse un pixel pour renvoyer les coordonnées du point et j'aimerais qu'il apparaisse une croix au lieu d'un pixels comment fait-on??? merci d' avance

jabbi

3 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 mars 2005 à 13:45
Si tu t'intéresse à Canvas, tu devrais faire un tour dans l'aide en
ligne de Delphi, rubrique TCanvas, propriétés, méthodes, événements, tu
en sauras autant que moi...



J'y suis allé voir, et ça m'a inspiré cette procedure :



procedure TForm1.DrawCross(X, Y: Integer; const D: Integer = 4);

begin

with Image1.Canvas do

begin

MoveTo(X - D, Y);

LineTo(X + D + 1, Y);

MoveTo(X, Y - D);

LineTo(X, Y + D + 1);

end;

end;



que tu appelles ainsi :



procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

DrawCross(X, Y); // dimension par défaut

{ DrawCross(X, Y, 10); // si tu veux préciser la dimension de la croix }

end;



Bonne prog'
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
9 mars 2005 à 13:52
Salut,



Tu traces simplement deux traits pour faire une croix !!!

Pour se simplifier la vie:

<hr style="width: 100%; height: 2px;">procedure PutACross(aPoint: TPoint; Taille: Integer; const aCanvas: TCanvas);

var

Pos: TPoint; // pour ne pas modifier PenPos dans aCanvas

begin

Pos:=aCanvas.PenPos;



aCanvas.MoveTo(aPoint.X-Taille div 2,aPoint.Y-Taille div 2);

aCanvas.LineTo(aPoint.X+Taille div 2,aPoint.Y+Taille div 2);



aCanvas.MoveTo(aPoint.X-Taille div 2,aPoint.Y+Taille div 2);

aCanvas.LineTo(aPoint.X+Taille div 2,aPoint.Y-Taille div 2);



aCanvas.PenPos:=Pos;

end;

<hr style="width: 100%; height: 2px;">et tu utilise cette fonction comme cela (ici dans l'evenement OnMouseDown d'une fiche)

<hr style="width: 100%; height: 2px;">procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

PutACross(Point(X,Y),40,Canvas); // Evidemment tu peux changer la taille de la croix

end;

<hr style="width: 100%; height: 2px;">En espérant t'avoir aidé... (n'oublie pas de cliquer réponse accepté si c'est le cas)

@ ++

Florent



Si tu ne te plantes pas ......
tu ne poussera jamais
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
9 mars 2005 à 14:03
Dsl Japee, nos messages se sont croisés ..



Néanmoins, avec ma procedure, on peut spécifier le canvas dans lequel cela s'affiche.



Jabbi (tiens ca ressenble à Japee ...) :


<li>si tu utilise ma procedure, tu spécifie la longueur du côté de la croix (la longueur du côté du carré circoncrit à la croix )</li>
<li>si tu utilise celle de Japee, tu donne la moitié de la largeur de la croix.</li>

Place au tunning:

<hr style="width: 100%; height: 2px;">procedure PutACross(aPoint: TPoint; Taille: Integer; const aCanvas: TCanvas);

var

Pos: TPoint; // pour ne pas modifier PenPos dans aCanvas

begin

Pos:=aCanvas.PenPos;

Taille:=Taille div 2;



with aCanvas do

begin

MoveTo(aPoint.X-Taille,aPoint.Y-Taille);

LineTo(aPoint.X+Taille,aPoint.Y+Taille);



MoveTo(aPoint.X-Taille,aPoint.Y+Taille);

LineTo(aPoint.X+Taille,aPoint.Y-Taille);

end;



aCanvas.PenPos:=Pos;

end;

<hr style="width: 100%; height: 2px;">C'est la même mais en plus élégante et performante (12 ms gagnees pour ... 10000 croix)



@ ++

Flo



PS: il manque un colorisateur syntaxique par ici, faudra que j'en parle à Nix (s'il n'a pas déjà recu 1000 messafges à ce sujet)


Si tu ne te plantes pas ......
tu ne poussera jamais
0
Rejoignez-nous