TButton avec Skin

Soyez le premier à donner votre avis sur cette source.

Vue 4 436 fois - Téléchargée 1 240 fois

Description

Je vous propose un code tout ce qu'il y a de plus simple ^^

qui permet d'appliquer un Skin a un TButton standart de la VCL ... eh oui ^^
rien à installer ... c'est une fonctionnalité de base Windows qui fonctionne depuis XP
contrairement à ce que dit la MSDN là dessus "Minimum supported client Windows Vista [desktop apps only]":O

en ce qui concerne les images ... c'est pareil la MSDN dit que la 6ème n'est utilisée que sur les tablettes :
"
enum PUSHBUTTONSTATES {
 PBS_NORMAL = 1,
 PBS_HOT = 2,
 PBS_PRESSED = 3,
 PBS_DISABLED = 4,
 PBS_DEFAULTED = 5,
 PBS_STYLUSHOT = 6,
};

Note that PBS_STYLUSHOT is used only on tablet computers.

"

c'est pas vrai, la 6ème image est utilisée pour l'animation du bouton quand il a le focus ou pour
signaler un bouton par défaut.
D'ailleurs les plus attentifs auront remarqué qu'il n'y a que 5 images dans le répertoire "IMG" ...
la sixième n'est qu'une copie de la deuxième.

voilà ... le code étant très simple il n'y a pas commentaire
si toute fois vous avez des questions ... vous connaissez la marche à suivre

les unités:
crSkinBtn --> contient les déclarations manquantes + un appel à l'unité VistaAltFixUnit.pas
ce qui règle le problème de la touche Alt quand les thèmes sont activés
+ un appel à XPMan.pas

crHQBitmap --> est juste là pour avoir une meilleur qualité de bitmap lors d'un resize

J'espère que cela vous plaira ;)

@++
Cirec.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
Modifié par Cirec le 29/01/2017 à 23:05
Super,

modification faite et nouveau Zip en ligne ... ça devrait rouler maintenant ;)

Sinon as tu déjà testé le code avec Berlin 10.1 depuis l'avant dernière modif ?
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
29 janv. 2017 à 15:09
Testé, la nouvelle version marche parfaitement sous XP.
Juste un détail :
Il faut rajouter un refresh dans Button_SetSkinImageList, sinon ça rafraîchit quand on enlève le skin, mais pas quand on le met.

begin
    aBtnImgList.himl := Imagelisthwnd;
    Result := BOOL(SendMessage(aBtn.Handle, BCM_SETIMAGELIST, 0,
      LPARAM(@aBtnImgList)));
    aBtn.Refresh;  // <- ici !
  end

Sinon OK, merci pour ce code intéressant et utile (j'en veux plein des comme ça!)
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
29 janv. 2017 à 00:05
ok,

voici une nouvelle version avec tentative d'incorporation de ton code de correction ...
je dis tentative parce que je ne peux pas tester ;)

Donc tu peux ré-essayer avec D7 et même avec Berlin 10.1 ... j'ai également fait une petite modification afin d'éviter l'erreur que tu as ... croisons les doigts (XX) ^^

ps: l'erreur dont je parle plus haut, sous Berlin 10.1, n'empêche pas la compilation ... l'erreur, si elle se produit, est visuelle ;)
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
28 janv. 2017 à 14:56
Salut Cirec.

Oui, je confirme, sous XP pro 32 bits c'est pas réversible sauf modification du code.

Quelques tests vite faits :

Compilation avec Delphi 7 sous XP pro / Win 8.1 :
- fonctionnement sous Win 8.1 : OK, nickel
- fonctionnement sous XP pro : problème cité ci-dessus, résolu avec une ImageList vide et le refresh

Tentative de compilation avec Berlin 10.1 (beurk) sous Win 8.1 : ça veut pas !
Message du compilateur :
"il y a des erreurs",
ligne en cours-total, conseils, avertissements : 0
erreurs : 1

Pas d'autres indications. Frustrant... :-(
Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
27 janv. 2017 à 18:29
Merci pour votre retour ;)

malheureusement, sur les boutons d' en haut, le skin ne cache pas totalement le bouton (il est par dessus et centré), bizarre ...
je n'ai jamais observé ce genre de problème ... théoriquement ça voudrait dire que le bouton est plus grand que l'image ...
à la base c'est prévu pour ajouter une icône au bouton et pas pour le skiner ^^


Il n'y a qu'un truc qui me gêne (*) : c'est la possibilité que tu sembles nous offrir de choisir "skin / pas skin" à l'exécution.
Or, une fois le skin choisi, ça n'est pas réversible.

oui normalement ça l'est ... et comme je n'ai plus de poste avec XP :( je ne peux pas tester la chose
Mais si tu me dis que ça fonctionne avec ta méthode je peux voir pour l'inclure dans le code de manière invisible ;)

sinon pour info.
j'ai compilé et testé le code avec
Delphi7
Delphi2009
Berlin 10.1
sous Win Seven pro

il n'y a que sous Berlin 10.1 qu'un petit souci est apparu (assez bizarre d'ailleurs) je ne vous en dit pas plus pour l'instant ... si vous pouviez tester de votre coté avec Berlin 10.1(pour ceux qui l'ont *) et me dire quel est le résultat à l'exécution et sous quel OS ... je suis curieux de connaitre vos résultat ;)

(*) pour ceux qui ne l'ont pas encore l'offre est toujours valable
Télécharger gratuitement Delphi 10.1 Berlin Starter Edition
Afficher les 9 commentaires

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.