Bug timage avec delphi 6 : scintillement

Soyez le premier à donner votre avis sur cette source.

Vue 6 753 fois - Téléchargée 319 fois

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de dindenoel

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.