Un bouton de contrôle et de remplacement sous-jacent pour TBitmap qui gère correctement la transparence PNG sans écrire de code pré-mélange

Les TSpeedButtons de Delphi 2010 ne semblent pas vraiment supporter la transparence PNG correctement, parce que la propriété Glyph utilise un TBitmap en interne, et le TBitmap est pour bitmaps, et ne supporte pas correctement la transparence PNG, et le TSpeedButton.Le glyphe ne supporte pas la transparence.. Mise à jour: mais le vrai problème était que j'avais des choses externes (Developer Express components) qui rendaient le support PNG de delphi non fonctionnel, le TImage d'autre part, alors qu'il reste TPicture, et can support PNG, a également été affecté par ce bug Developer express.

une question a déjà été posée à propos de ici, et la réponse montre comment utiliser le pré-mélange pour que la transparence ne se transforme pas en pixels noirs. Je veux savoir s'il y a un autre bouton de contrôle qui va utiliser alpha-blended PNGs chargé à designtime, et qui ne convertit pas les ressources PNG en format BMP en rejetant le canal alpha et en provoquant la bordure noire affichée ici.

en bref, ce contrôle n'utiliserait pas TBitmap, et n'utiliserait pas la fonctionnalité de transparence couleur clé qui est tout ce que TBitmap a.

je le répète, Je ne demande pas comment résoudre le problème de l'extérieur en noir et blanc tout en utilisant la fonctionnalité Vcl obsolète basée sur TBitmap/TSpeedButton, parce qu'elle manque de fonctionnalité moderne de transparence PNG, je demande de la remplacer par quelque chose d'autre qui "fonctionne simplement".

comme inconvénient secondaire, la conversion petit. png dans un .La ressource bitmap de DFM gaspille essentiellement de l'espace et fait ma forme .DFM contenu trop grand. Natif. le stockage de format de fichier png dans le .la dfm devrait réduire la taille des formulaires résultants.

enter image description here

mise à Jour: PngComponents regardez comme ils doivent travailler, mais j'ai un Invalid Graphic format erreur quand j'essaie de charger un png dans le bouton de vitesse Png. Notez que le composant Png image list n'a pas de tels problèmes. Il semble que cxLibrary ( developer express package) est en train de casser des choses. Une fois que j'ai enlevé tous les trucs de developer express, ce problème disparaît. Donc, bien que j'ai sélectionné Pngcomponents comme réponse, si vous avez devex stuff installé, utilisez leurs boutons à la place, et non pngcomponents.

enter image description here

15
demandé sur Community 2011-08-23 19:30:37

3 réponses

Vous pouvez avoir un coup d'oeil à PngComponents. Il dispose d'un bouton TPngSpeedbutton et d'autres commandes fonctionnant directement avec PngImages.

11
répondu Uwe Raabe 2011-08-23 15:54:33

vous pouvez également regarder dans le composant logiciel TMS appelé TAdvGlowButton car il supporte les images PNG avec la transparence alpha.

lien vers le site...

2
répondu Shambhala 2011-08-23 16:56:11

il s'avère que le bouton cxButton qui se trouve dans le pack de composants de Developer Express VCL supporte aussi les boutons PNG.

2
répondu Warren P 2011-08-23 17:46:06