Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

BUG TIMAGE AVEC DELPHI 6 : SCINTILLEMENT


Information sur la source

Catégorie :Graphique Classé sous : timage, scintille, bug Niveau : Initié Date de création : 05/07/2002 Date de mise à jour : 29/11/2005 20:11:19 Vu / téléchargé: 3 930 / 228

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Dans delphi 6, il apparait un bug dans la gestion des Timage. Le Timage fait un refresh beaucoup trop souvent, ce qui donne une impression de scintillement (par exemple lorsqu'on fait une sélection dans l'image...)
Précision : ce bug n'existe pas dans delphi 5.

La Solution : Corriger la VCL de delphi 6 : ( Correction donnée par George Pistikos )
--------------
Corriger '\Delphi6\Source\Vcl\ExtCtrls.pas' de cette façon
(Article de Georges Pistikos traduit en français)

Voici le listing de 'TImage.PictureChanged' dans la vcl de delphi 6  (Delphi6\Source\Vcl\ExtCtrls.pas)


procedure TImage.PictureChanged(Sender: TObject);
var
  G: TGraphic;
begin
  if AutoSize and (Picture.Width > 0) and (Picture.Height > 0) then
SetBounds(Left, Top, Picture.Width, Picture.Height);
  G := Picture.Graphic;
  if G <> nil then
  begin
if not ((G is TMetaFile) or (G is TIcon)) then
   G.Transparent := FTransparent;


if (not G.Transparent) and Stretch and not Proportional then    // changer cette ligne de code !!!


   ControlStyle := ControlStyle + [csOpaque]
else  // picture might not cover entire clientrect
   ControlStyle := ControlStyle - [csOpaque];
if DoPaletteChange and FDrawing then Update;
  end
  else ControlStyle := ControlStyle - [csOpaque];
  if not FDrawing then Invalidate;
end;



La condition IF doit être changée ainsi :

if (not G.Transparent) and (Stretch or  ((G.Width >= Width) and (G.Height >= Height)))  and not Proportional  then


Cela ajoute à la condition que SI le bitmap couvre la Timage alors le ControlStyle
est mis à csOpaque et donc le background n'est pas redessiné à chaque fois que l'Image change. (comprendu ?)


George Pistikos

Anadelta Software
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  

Après avoir modifié 'ExtCtrls.pas',
- renommez '\Delphi6\Lib\ExtCtrls.dcu' en 'ExtCtrls.dcu_'
- copier '\Delphi6\Source\Vcl\ExtCtrls.pas' dans le dossier '\Delphi6\Lib\'

Lorsque vous recompilerez un programme, ExtCtrls.dcu sera recréé.

Je l'ai testé : ça fonctionne parfaitement !  
 

Conclusion

Correction trouvée par George Pistikos.  Merci !

----------

MAJ faite le 28/01/2003 : ajout d'une archive contenant : ExtCtrls.pas (modifié) et ExtCtrls.dcu (près à l'emploi).

Retesté : ça fonctionne parfaitement.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

29 novembre 2005 20:11:19 :
Ajout de mots clefs pour le moteur de recherche CodeS-SourceS.

Commentaires et avis

signaler à un administrateur
Commentaire de dindenoel le 17/09/2002 17:22:09

Salut leyeti ! dis moi, saurais-tu imprimer un bitmap dans des proportions differentes que celle de l'image ?

Merci, Dindenoel !

signaler à un administrateur
Commentaire de sebastienbro le 21/01/2003 18:14:08

arf, c cool ça, mé le probleme, c ke g delphi6 personnel, et ke g po les sources ! tu pourrai po m 'envoyer le fichier DCU créé stp ?
voila mon mail : sebastienbro@aol.com
Merci d'avance !

signaler à un administrateur
Commentaire de Zeroc00l le 28/06/2004 20:48:41

Hum ...
Kkun aurait-il un composant équivalent au TImage classique MAIS avec un raffraichissement manuel... Autrement dit avec lequel on serait obligé de se taper tout les Repaint !

P'tête qu'en me les tapant tous je passerais à 10 % d'utilisation du processeur au lieu des 100% actuel.
Je raffraichit à une fréquence assez importante (ca peut aller jusqu'a 1000 fois par seconde dans le pire des cas )

Etant donné que je dessine pixel par pixel et que le composant veut remettre à jour le canvas immédiatement après que ce dernier ait changé ...
En gros si je dessine un trait de 100 pixels il raffraichit 100 fois avec tout ce que ca inclut derriere (Buffer , copie de bitmap...)
D'ou mon interêt pour un composant "personalisé"...
L'utilisateur n'a pas besoin de voir chaque point apparaitre (le PC pense que Si !)
Moi je ne ferai qu'un Repaint par exemple ...

Voili Voilou ...
J'espère que ce message ne contribuera pas qu'a encombrer ce site... (Traduction : J'espère une réponse)

signaler à un administrateur
Commentaire de Zeroc00l le 28/06/2004 20:52:49

A la limite en me servant de ce que tu explique ici ...
Je pourrais faire comme si mon TImage était le composant que je cherche, càd gérer moi même les raffraichissements...

Et puis au moment de la compilation je vais trafiquer 'ExtCtrls.pas'...
Histoire que la condition qu'il test soit forcément fausse ...
Vive les manip's !   :)

signaler à un administrateur
Commentaire de Zeroc00l le 29/06/2004 15:10:53

C'est fait ! TOUT sur la façon de procéder :

http://www.delphifr.com/code.aspx?ID=24123

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Nix, y a un bug dans le forum.² [ par DelphiCool ] SalutLe Tag [URL] dans le forum ne marche paslookwww.progzed.com Création dynamique de composant [ par Amadeus ] Comment créer dynamique des contrôle TImage ?Je voudrais créer sur une Form autant de TImage que d'image se trouvant dans un répertoire donné. Comment Un bug dans Delphi 6 ? [ par Kane ] Je viens d'ecrire le code suivant sous delphi 6 pro et j'obtient un drole de resultat ! Avant que la feuille devienne progressivement transparente ell Timage Help me [ par g0belin ] Ben voila j'aimerai faire un trucs qui utilise un bout de code dans le genre:--------------CODE---------------------image1.picture := {adresse de l'im Problème avec les images et leur fond [ par fab30 ] Salut a tous, voilà, j'ai un probleme avec le Timage de Delphi : Sur ma forme, il y a un Timage avec une image de fond en bmp. Dessus, je rajoute un T bug sur mon ordi et pas sur les autres [ par choup ] Je n'arrive pas à tout saisir, suite à mon message "pas d'enregistrement maitre" j'ai repris les sources initiales, sans mes modifs, cette source marc Webmaster, y a un bug sur le moteur de recherche [ par Seb_d_angers ] En lancant une recherche on obtient la liste des source et message qui se rapporte aux mots clés mais il y a un bug, le lien qui pointe vers les messa Comment déplacer un composant TImage avec la souris lors de l'éxecution de l'application???? [ par MasterNKZ ] Comment déplacer un composant TImage avec la souris lors de l'éxecution de l'application????J'ai une source pour déplacer un composant avec la souris, TImage problème [ par MasterNKZ ] Je veux faire une animation tres simple:j'ai une image dans un composant TImage et je la déplace a l'aide d'un timer 4 pixel par 4pixel tout les 70ms Image avec ComboBoxEx [ par florenceb91 ] Bonjour,voilà, j'ai un ComboBoxEx qui me liste les images contenu dans une TImageList, et à chaque sélection d'image dans mon comboboxEx je souhaitera


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,936 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.