Probleme rafrèchissement

damomospike Messages postés 25 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 19 janvier 2005 - 11 janv. 2005 à 23:08
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005 - 24 janv. 2005 à 00:00
tout d'abord bonjour à tous!

voila, j'essaye de faire un petit programme pour "dessiner" comme sous paint pour ensuite l'intégrer dans un autre programe.

le programe marche mais lorsque que je dessine sur un Timage pas directement sur la form, des espèce de lignes parasites apparaissent lorsque ma suiris bouge (lorsque je dessine) comme si il y avait un probleme de rafraichisment.

mon code est:
procedure TForm1.i1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
form1.i1.Canvas.LineTo(p1.X-form1.Left-1.left-5,p1.Y-form1.Top-i1.top-30);
end;
(le code n'est pas entier, p1 est un Tpoint et i1 et un Timage)

que dois-je faire pour supprimer ce probleme de lignes (de la couleur de la form)
(escusez moi pour ces informations mal exprimées).

merci beau

4 réponses

cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 1
12 janv. 2005 à 09:24
Je pense que cela vient d'une des propriétés de ton Timage. Il faut que
tu mette le valeur false à la propriété incrementalDisplay (elle permet
de rafraichir l'image lorsqu'une opération n'est pas terminée). J'ai eu
ce problème et je l'ai réglé comme sa.

Dis moi si c'est ça, car cela peut venir d'ailleur, et j'ai d'autres idées, mais celle-ci est la plus vraissemblable.

Si cela ne vient pas de là peut tu donner le code en entier de ta procédure.

Allez bon courage !!!
0
damomospike Messages postés 25 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 19 janvier 2005
12 janv. 2005 à 12:54
j'ai essayé et ce n'est pas cela :-/
voici mon code (la partie traitant l'image)

var
Form1: TForm1;
p1 :Tpoint;
pact: boolean;
text: integer;

procedure TForm1.FormActivate(Sender: TObject);
begin
form1.i1.Canvas.Pen.Width := 10;
end;


procedure TForm1.i1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pact := false;
end;


procedure TForm1.i1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
getcursorpos(p1);
pact := true;
form1.i1.Canvas.MoveTo(p1.X-form1.Left-i1.left-5,p1.Y-form1.Top-i1.top-30);
end;


procedure TForm1.i1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if pact = true then begin
form1.i1.Canvas.LineTo(p1.X-form1.Left-i1.Left-5,p1.Y-form1.Top-i1.Top-30);
getcursorpos(p1);
end;
end;

de plus je but sur un truc tout con: pour n'importe quel canvas, une fois que l'on a utilisé une fonction comme LineTo, comment fait ton pour retrouver un canvas vierge, tou effacer en gros?.

merci
0
cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 1
12 janv. 2005 à 17:07
tiens voilà pour l'effacement de ton canvas



Canvas.brush.color:=ClWhite;

Canvas.FillRect(rect(0,0,Width,Height))


ou width et height sont les ceux de ton timage
0
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005
24 janv. 2005 à 00:00
Salut,

a propos de la remarque de Sim51 : j'utilise un buffer Tbitmap pour dessiner, mais le rafraichissement n'est pas assez rapide :

Au premier clic, je stocke les coordonnées de mon point de départ.
OnMouseMove : j'efface le buffer, je dessine la ligne de mon point de départ jusqu'à la position du curseur de la souris, puis je copie le buffer dans mon Timage. Image1.draw(0,0,buffer);

et au deuxième clic je trace mon trait.

Mon probleme est que le rafraichissement n'est pas assez rapide, ca fait comme la trainée du curseur dans windows ..

quelqu'un a til une idée pour palier ce probleme?
0