COMPOSANT BOUTON AVEC DÉGRADÉ ET PETITE ANIMATION

ThWilliam Messages postés 417 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 - 8 juil. 2006 à 10:14
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008 - 10 juil. 2006 à 23:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38485-composant-bouton-avec-degrade-et-petite-animation

N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
10 juil. 2006 à 23:09
salut !
pour ceux qui ont un problème de clignotement(composant clignote)
j'ai ajouté la prorieté DoubleBuffered dans l'inspercteur d'objets
pour toute question vous pouvez m'ecrire des messages pv...
@+

N*M*B
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
9 juil. 2006 à 19:13
Ok pas de problème j'ai enlevé toutes les clauses inutiles lol.

Très bel effet :p bravo
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
9 juil. 2006 à 19:10
Merci pour l'aperçu :)

Sinon dans les Uses il y a RbDrawCore que mon Delphi ne trouve pas.
Où puis-je le trouver svp ?
ThWilliam Messages postés 417 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 juil. 2006 à 19:01
Re-Re Nadjib,

pour le problème du PopUp, tu pourrais essayer ceci dans la procédure TNMBbtn.MouseUp :

if (Button = mbRight) and (PopUpMenu <> nil) then SetState(SNormal);

A tester.
ThWilliam Messages postés 417 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 juil. 2006 à 18:22
Re-Nadjib,

Doublebuffered : oui, tu peux le mettre, mais je laisserais la possibilité de ne pas le faire : il suffit d'ajouter une ligne de code pour doublebuffériser le parent (form, panel...).

Free et nil : free est obligatoire pour appeler le destructeur de la classe. Or Free vérifie avant si l'objet <> nil. Si l'objet = nil, Free ne fait rien. Mettre à nil par après, dans ton cas, ce n'est pas cécessaire.

Pour le problème du PopUp, je regarderai.

Une note, "juste pour voir comment ça fait", allez d'accord pcq je suis certain que ta mise à jour sera au poil et surtout pour que tu ne te décourages plus ! 9/10

A +
Thierry
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
9 juil. 2006 à 18:04
Squallou
uoooops j'avait pas pigé
@+
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
9 juil. 2006 à 16:56
N*M*B :

quand je disais 'aperçu' c'est ici sur le site lol. Une petite capture d'écran quoi :p
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
9 juil. 2006 à 16:48
Bon jour a tous !
Matt 261 merci ;-) .

salut ThWilliam !
quelles commentaires (en bien bien sure)! lol
-->le Problème avec les PopUP: Si on fait un popup et que l'on clique ayeur sur la fiche mon composant reste figé sur State=SHot (pas le message CMMouseLeave comment faire alors?)
-->Problème d'affichage : je vais voir pourquoi .
-->La frappe de Spacebar : je sais je vais le faire .
-->Le champ FOwner: merci je ne l'avais pas remarqué.
-->Les méthodes que tu override :comme je te l'ai dit je suis débutant (je vais me documenter sur la porté ) merci c'est des petites choses comme ca qui font avancer.
-->valeur par défaut à tes propriétés : a vos ordres ! mdrr .
-->Dans ta classe de base TCustomBtn: oui je met a double biuffered chez moi il ya des clignotement sans (mon ordinateur est un dinosaure!! ^^)
-->Dans le destructeur de TNMBBtn : -mais bien sure ou avaije la tête mais pourquoi faire un (NIL) après la le (Free).
-pourquoi l(objet n'est pas détruit si c'est a (NIL) la memoire alloué est libéré ?
-->Procedure DrawCaption :j'assime complètement ^^ mdr .une grosse bourde de ma part.
-->SetState(SNormal) : daccord !
-->Concernant la note: antièrement daccord avec toi sur le faite qu'un bon commentaire est mille fois mieux qu'une note mais j'en ai jamais eu pour l'instant alez juste pour voir comment sa fait . lool.

donc moi pour terminer grand merci mème immmence je trouve supper que des gents éxpérimentés aide les débutants comme moi et leur donne des conseilles vive CodesSources et je ferais de mon mieux moi aussi pour aider les autres.
c'est vraie que je suis pas encore bien rodée en plus c'est la première fois que j'implèmente une class et je ne demande qua apprendre.

a propos de "désolé mais je suis un grand fainéant de la révision du code" c'est juste parseque je me suis un peut découragé mais la s'est bon je suis remonté a mort ! lol

Merci pour tout Thierry je corrige et je maet a jour .

Vive l'algerie @+ et bonne prog.

N*M*B
ThWilliam Messages postés 417 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
9 juil. 2006 à 13:32
Salut Nadjib.

Extra ton idée d'animation !

Puisque tu demandes (et c'est tout à ton honneur) des commentaires et critiques, en voici. (critiques constructives, bien sûr)

Bien pensé ton StateVisualiser en mode conception.
Où est le problème avec Popupmenu ?
Problème d'affichage : le FocusRect n'est pas dessiné sur le bouton focalisé à l'ouverture de la fiche.
La frappe de Spacebar ne provoque pas l'affichage à l'état Down. Dommage.

Concernant ton code proprement dit :

Le champ FOwner de TColors doit être mis en private et pas en public.

Les méthodes que tu override (KeyDown...) sont à placer dans la section protected (et pas private) sinon leur visibilité est différente de celle de la classe ancêtre.

Tu devrais donner une valeur par défaut à tes propriétés. A ce sujet, nous sommes évidemment d'accord, cela n'initialise pas la valeur, il faut donner en plus la valeur par défaut au champ. Alors pourquoi le faire ? D'abord pcq c'est une pratique universelle de prog, ensuite pcq la consultation de la fiche en mode texte est beaucoup plus lisible.

Pour la propriété TabStop, il faut ici :
property TabStop default true;
puisque tu déclares TabStop:= true dans le constructeur. Sinon, en mode conception, tu as beau déclarer Tabstop false, cela ne change rien lorsqu'on exécute.

Dans ta classe de base TCustomBtn, tu mets automatiquement le propriétaire du bouton à DoubleBuffered. Je ne trouve pas cela une bonne idée, je préférerais laisser le choix à la conception.

Dans le destructeur de TNMBBtn :
FHotColors:= nil; (idem pour les 2 autres TColors)
FHotColors.Free;
Donc Free ne détruira pas l'objet, puisque la référence de l'object est nil ! Il faut faire Free avant.

Procedure DrawCaption : il faut assigner Font avant le calcul de TextHeight et TextWidth. Essaie en mode conception de changer la taille de la fonte et tu verras que le texte n'est plus centré.

Dans le code de ton composant, évite de faire l'appel direct à une propriété. Passe par le champ ou par le Setter (s'il y en a un):
ne pas écrire,p.ex : if State = SDown then State:= SNormal;
mais : if FState = SDown then SetState(SNormal);

Concernant la note, j'ai décidé de ne plus en donner. Pour plusieurs raisons, la principale étant qu'on ne passe pas ici un examen et qu'on n'est pas en compétition pour la meilleure source. On la présente aux autres pour la partager, c'est du moins mon avis. Perso, je préfère qu'on me fasse un bon commentaire plutôt que de me mettre 10/10 sans faire de comment.

Donc, pour terminer :
Pour quelqu'un qui se dit débutant, je trouve que tu te débrouilles fort bien, notamment avec les méthodes de messages Windows. Bravo !
Quelques corrections, une meilleure indentation du code et ce sera super.
Un souhait : ne plus voir écrit de ta propre main : "désolé mais je suis un grand fainéant de la révision du code". (lol)

A +
Thierry
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
9 juil. 2006 à 13:03
Il est pas mal du tout ton compo !
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
9 juil. 2006 à 02:19
nannn comment t'a su Francky , mdr
oui grave .
mmmmm c'est un compliment --->merci

@ pluus

N*M*B
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
9 juil. 2006 à 02:11
Salut,

N_M_B : ca se voit que tu es un MORDU d'informatique. Mdrrr

A+
N_M_B Messages postés 94 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 1 mars 2008
8 juil. 2006 à 17:43
bonjour a tous! C'était la moindre des choses de te citer ThWhilliam vraiment ^^^ merci , et j'attends tes commentaires avec impatience !(surtou sue le popup menu il y'a problème) ,merci ...

Sqallou bien sure en mode conception tu peut avoir un apercu des differents etats..tu trouvera cela dans StateVisualiser qui qui est dans l'inspecteur d'objets pour regler les couleurs sans avoir a exécuter chaque 5 secondes ... ^^ voila
merci et pensez a donner une note , MERCI et bone prog ;-)

N*M*B
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
8 juil. 2006 à 11:00
C'est possible de mettre un aperçu ?
Ca aurait été bien :)
ThWilliam Messages postés 417 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
8 juil. 2006 à 10:14
Salut N_M_B,

C'est très gentil de ta part de m'avoir cité.
J'ai téléchargé ta source, mais je n'ai vraiment pas le temps aujourd'hui de me plonger dedans.
Donc à+
Thierry
Rejoignez-nous