begin process at 2012 02 11 09:51:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > [TIMAGE.CANVAS]PROBLÈME DE RAFRAICHISSEMENT

[TIMAGE.CANVAS]PROBLÈME DE RAFRAICHISSEMENT


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Niveau :Débutant Date de création :20/12/2003 Vu / téléchargé :3 802 / 279

Auteur : MacaDaMsDamien

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code utilisse un canvas de type Timage.
Il trace un petit tableau de 13x13 cases.

Il me l'affiche en 1/2s, et pendant l'execution, la moindre opération su le canvas (par exemple rajouter un petit carré) réinitialise complement l'affichage du canvas, soit 0.5s pour chaque opération. (le canvas s'efface puis se recrée par un balayage de gauche a droite).

Sachant que je souhaite utiliser un timer pour faire une opération toutes les demi seconde c'est très génant, et je n'arrive pas a trouver de solution a mon problème.  Quelqu'un peut-il m'éclaircir? Ou m'apporter une solution alternative pour éviter ces problèmes de rafraichissement..



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture LE CERCLE ENCHANTÉ D'ANDRES GÎT EN NOS MÉMOIRES par Caribensila
Source avec Zip Source avec une capture COMPARATIF ALGO CERCLES par barbichette
Source avec Zip Source avec une capture RAYTRACING EN DELPHI (PROGRESSIVE PATH TRACING) par Bacterius
Source avec Zip Source avec une capture TEXTE SUR COURBE DE BEZIER par pseudo3
Source avec Zip Source avec une capture YEUXROUGES par pseudo3

Commentaires et avis

Commentaire de japee le 20/12/2003 15:05:06 administrateur CS

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 ;)

Commentaire de achtouf le 25/12/2003 00:01:53

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  :-(

Commentaire de MacaDaMsDamien le 26/12/2003 16:23:20

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)."

Commentaire de MacaDaMsDamien le 28/12/2003 01:27:15

Voila j'ai résolu mon problème très simplement: J'ai remplacé mon Timage par un Tpaintbox, l'affichage est instantané :D

Commentaire de ManChesTer le 30/12/2003 13:49:38 administrateur CS

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.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales