Version 1.03 : Suite commentaire de Korgis, modifié la procedure MouseBP
Plus d'utilisation du TAG, ce qui lui rend sa fonction de base
Le bouton Color permet de choisir un des deux modes
version 1.02 :
Supprimé obligation de positionner les tag à l'élaboration
ajouté possibilité d'avoir 2 modes de fonctionnement :
Echange des couleurs Texte/Fond pendant le clic ou non
Permet d'avoir des boutons en couleurs sans utiliser de composants extérieurs
à Delphi standard
Principe :
• Nommer la série de Panels à convertir avec un nom de base (ex : BP)
suivi du nombre de boutons : 1 à N (sans trou) : BP1, BP2, BP3 ...
//// Inutile, le Tag est mis lors de la procedure InitMouseBP
////• Mettre la propriété TAG à la valeur du nom du bouton (1 à N)
//// Exemple BP1, BP2, ... BP5 : TAG 1, 2, ... 5
• Ajouter la variable globale : KBP : string='BP';
• Ajouter la variable globale : BPmode : intger=1; // par défaut pas de changement de couleur
• Ajouter dans Form.Create :
InitMouseBP(5,'BP',1); // ",'BP',1" étant les valeurs par défaut, peuvent être omis
Il ne reste qu'à définir les couleurs des boutons !!
L'action effectuée par le "bouton" reste à l'initiative du OnClick
13 janv. 2017 à 17:08
"(Sender as TPanel)." ou "TPanel(Sender)." me font penser au truc bien pratique qu'est "absolute".
"absolute" permet de créer une variable placée à la même adresse qu'une autre variable déjà existante. Comme c'est une histoire de pointeur, c'est très puissant et très optimisé.
Dans le code de notre ami, ça pourrait s'utiliser comme ceci :
14 janv. 2017 à 18:50
Tu as bien fait de mettre les choses au point.
Bel éloge de la transparence en tout cas, du moins appliquée à Delphi.
N'ayons donc plus peur de bricoler, voire de tripoter les pointeurs, même si Delphi dans sa grande bonté nous en dispense le plus souvent.
Par ailleurs, après réflexion, pourquoi les cochons n'auraient-ils pas droit à un peu de confiture, de temps en temps (et pas trop souvent).
Ça les change un peu de la tarte aux concombres.
Dubois, c'était une petit Panel-Bouton magique :-P
Y'a pas d'âge pour apprendre, et avec Delphi, on n'a pas fini !
14 janv. 2017 à 18:54
Modifié par korgis le 14/01/2017 à 13:45
Tu lui as coupé le sifflet à Dubois : il dit plus rien, lol.
Ça fonctionne, c'est clair.
Mais, à part vouloir utiliser une variable en plus, il est dommage de réserver l'usage de la directive à ce contexte, non ? (c'est de la confiture pour les cochons)
Par contre (de mémoire), f0xi, en son temps, nous avait montré l'intérêt de l'utilisation de "absolute" pour passer d'un "array of" à un "record", par exemple, et ce genre de choses...
Là, ça déchire.
Quoi qu'il en soit, tu m'as fait remémorer l'usage de cette directive finalement peu utilisée et dont le maniement est délicat, mais pas plus dans le fond que "TPanel(Sender)" ou "Sender as TPanel" si l'on n'a pas pris la précaution de tester par "if Sender is TPanel"...
Modifié par Caribensila le 14/01/2017 à 17:35
C'était juste pour info...
Mais il ne faut pas trop se laisser impressionner par "absolute" dont le résultat n'est qu'un pointeur.
Delphi cache vraiment bien tout ce qui se rapporte aux pointeurs tant il est vrai que
les pointeurs font peur (surtout aux dames :p ).
Perso, j'emploie "absolute" surtout dans le cas décrit ici, pour créer une variable placée à la même adresse qu'une autre.
Et lorsque je bricole vraiment les pointeurs, je préfère le faire de façon transparente.
Voici, par exemple, ce que donnerait la même routine écrite avec des pointeurs et qui démontre la simplicité de "absolute" :
De toute façon, tout bien pesé, je n'utilise les pointeurs qu'avec les Bitmap, pour des raisons d'optimisation...
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.