2010-11-30 44 views
1

Le code suivant fonctionne comme prévu avec Delphi 2007. Il prend un bitmap à partir d'une liste d'images, dessine un X rouge dessus et ajoute le nouveau bitmap à la fin du même liste d'images:Différence entre Delphi 2007 et 2010 lors du dessin sur des bitmaps

DynBmp:=Graphics.TBitMap.Create; 
    DynBmp.Transparent:=TRUE; 
    DynBmp.TransparentMode:=tmFixed; 
    ImgList.GetBitmap(9, DynBmp); 
    DynBmp.TransparentColor:=DynBmp.canvas.pixels[0, DynBmp.Height - 1]; 
    DynBmp.Canvas.MoveTo(1, 1); 
    DynBmp.Canvas.Pen.Style:=psAlternate; //psSolid; 
    DynBmp.Canvas.Pen.Color:=clRed; 
    DynBmp.Canvas.Pen.Width:=2; 
    DynBmp.Canvas.LineTo(DynBmp.Width - 1, DynBmp.Height - 1); 
    DynBmp.Canvas.MoveTo(DynBmp.Width - 1, 1); 
    DynBmp.Canvas.LineTo(1, DynBmp.Height - 1); 
    FErrBmpIdx:=ImgList.AddMasked(DynBmp, DynBmp.TransParentColor); 
    aResetIcon.ImageIndex:=FErrBmpIdx; 
    FreeAndNil(DynBmp); 

Sur Delphi 2010, en utilisant le même code, le X rouge devient transparent X. que dois-je ajouter/changer pour le faire fonctionner comme prévu avec Delphi 2010? Merci

+0

J'ai essayé cela en 2010, et cela a fonctionné comme prévu. –

+0

La cause semble être la conversion du bitmap (il s'agit à l'origine d'une ressource PNG, qui est convertie en bitmap avant cette phase de dessin). Je ne suis pas sûr de la cause de la conversion, mais nous l'avons corrigée simplement en ayant cette ressource sous forme de bitmap au lieu d'un fichier PNG. – Mick

Répondre

0

DynBmp.TransParentColor est probablement clRed avant de l'ajouter à nouveau à la liste d'images. Peut-être que TransparentMode n'est plus tmFixé? Essayez le débogage et corrigez votre code en fonction de vos résultats.

+0

La couleur transparente n'est pas rouge (et de plus, le graphique est identique à celui de D2007). Le commentaire à propos de tmFixed n'a aucun sens car je suis en train de définir la couleur transparente (voir .TransparentColor). – Mick

+0

De plus, le bitmap est erroné avant d'être ajouté à la liste (le problème n'est donc pas de l'ajouter à la liste). – Mick

+1

Je n'ai pas Delphi 2010, donc je ne peux pas déboguer pour vous. Mais avez-vous conclu que TransParentColor n'est pas clRed et que TransparentMode est tmFixé avant de l'ajouter à la liste d'images par débogage ou par raisonnement? –

2

J'avais rencontré le même problème avec Delphi XE2 et l'avais réglé en décochant l'option "Utiliser l'image de style XP avec le canal alpha" dans l'éditeur ImageList. Si vous avez coché cette option, décochez-la.