[TIMAGE.CANVAS]PROBLÈME DE RAFRAICHISSEMENT

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 20 déc. 2003 à 15:05
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021 - 30 déc. 2003 à 13:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18858-timage-canvas-probleme-de-rafraichissement

cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
30 déc. 2003 à 13:49
une astuce simple :

Procedure Maform.paint;
begin
//travail dessins copies &co sur monbmp
bitblt(form1.canvas.handle,0,0, monbmp.canvas.handle,0,0,200,200,srccopy);
end;

Dans un timer faire:
Procedure Maform.OnTimer(sender:Tobject);
begin
SendMessage(Handle,wm_Paint,0,0)
end;

Et voila.... eventuelement devier WM_ERASEBKGND pour encore de meilleurs perfs...

Bon Coding...

ManChesTer.
MacaDaMsDamien Messages postés 5 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 28 décembre 2003
28 déc. 2003 à 01:27
Voila j'ai résolu mon problème très simplement: J'ai remplacé mon Timage par un Tpaintbox, l'affichage est instantané :D
MacaDaMsDamien Messages postés 5 Date d'inscription lundi 8 décembre 2003 Statut Membre Dernière intervention 28 décembre 2003
26 déc. 2003 à 16:23
Voici une réponse que j'ai obtenu (merci jmic):

"J'ai utilisé deux Canvas différents. Un qui correspond à ce qui est affiché, l'autre qui permet de travailler. C'est ça qui évite le clignottement.

Pour être complet, sur le problème de vitesse, j'ai utilisé une autre astuce, basée sur un 3ème Canvas.
Imaginons que l'on veuille faire le dessin d'une partie d'échec, avec le mouvement des pièces.
Le premier Canvas va contenir le "fond" qui n'est pas modifié (ou très peu), c'est-à-dire l'échiquier.
Le deuxième Canvas va être le canvas de travail vu précédemment,
Le troisième est celui qui est effectivement visible à l'écran.

Les manips sont les suivantes :
- Préparation une fois pour toute du canvas de fond.
A chaque itération
- Copie du 1er Canvas sur le deuxième.
- Ajout de la position des pièces sur le 2eme canvas
- Copie du 2eme canvas sur le 3eme.

Ca permet de gagner du temps (à chaque itération) si le dessin du fond est long à dessiner (c'était mon cas dans mon application)."
achtouf Messages postés 15 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 10 décembre 2007
25 déc. 2003 à 00:01
Salut

J'avais fait un petit jeu (Nibbles ou serpent) il y a quelques temps sous Delphi 4 en utilisant un composant TImage. Lors du passage à Delphi 7 je me suis redu compte que ca n'arrétait pas de scintiller meme avec DoubleBuffered. => Bug connu de Delphi4.
Il est recommander d'utiliser un composant TPaintBox qui ne pose pas le pb (je crois).
Je crois cependant qu'il est possible de surcharger une méthode pour empécher au TImage de se rafraichir comme ca. Mais je sais plus comment :-(
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
20 déc. 2003 à 15:05
Déjà, sans trop réfléchir, essaye donc ceci :

dans "procedure TForm1.FormActivate(Sender: TObject)"

tu ajoutes

Form1.DoubleBuffered := True; // voir aide en ligne de Delphi

Tu vas voir la différence ;)
Rejoignez-nous