2010-06-25 11 views
13

Delphi 2010, Win32 VCL. J'ai besoin de créer un menu principal pour mon application avec le look le plus standard. TMainMenu est agréable dans toutes les versions de Windows, la seule mauvaise chose est quand il affiche des images pour les éléments avec Enabled = False.Images "désactivées" laides de TMainMenu

Delphi a une méthode étrange pour construire des images désactivées (l'extrusion en b/w avec des biseaux, pour moi, ça ressemble à spew). Je veux faire un patch pour cette procédure dans les sources VCL et laisser le menu pour sélectionner les images désactivées de la même TImageList, mais je ne peux pas le trouver.

Existe-t-il du tout ou s'agit-il d'un appel d'API Windows standard? Savez-vous où se trouve cette procédure?

Bien sûr, le style OwnerDraw peut résoudre tout cela, mais je veux une solution un peu plus rapide.

Répondre

22

Il ya un excellent article sur Galfar's Lair blog qui décrit le problème, et a du code pour une solution de contournement, remplaçant la méthode TImageList DoDraw.

Voici la photo (liée) montrant le «avant» et «après».

alt text

Je pense que cela se rapporte à peu près toutes les versions Delphi.

+0

Parfait! Je vais remplacer TCustomImageList.DoDraw et l'image désactivée sera copiée à partir de la seconde moitié de l'image stockée 32x16. Merci Roddy et Galfar. – Andrew

+0

Brillant! J'ai besoin de ça! –

4

Si vous pouvez fournir vos images au format PNG, vous pouvez utiliser TPngImageList de PngComponents. Il a différentes options pour faire une image désactivée blended ou grayscaled. Le format PNG vous permet d'utiliser l'alphablending.