Changer la couleur d'un label au survol de la souris

Résolu
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008 - 22 févr. 2005 à 10:31
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008 - 23 févr. 2005 à 18:38
salut, j'essaie de changer la couleur d'un label
au survol de la souris, pour cela dans la propriété MouseMove
d'un Panel, j'ai mis ce code :


Code:, ----
Label1.Font.Color := clYellow;
mais le problème, c'est que quand la souris quitte le label, la couleur reste jaune, comment faire pour qu'elle devienne noir?

Merci

36 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 févr. 2005 à 15:26
Maniaxman > J'ai un doute...



Sais-tu que tu n'es pas obligé de répéter le code pour chaque évènement
OnMouseMove, que ça soit pour les Panels ou pour les TabSheet ?

Tu peux relier tous ces objets à la même procedure, en utilisant l'inspecteur d'objets.



Deux techniques équivalentes, la première étant plus rapide, la seconde
étant plus adaptée si tu rajoutes un objet que tu veux ratacher à cet
évènement :



- tu sélectionnes par exemple tous les TTabSheet en maintenant la
touche majuscule enfoncée, tu relâches, puis tu doubles-clique dans
l'évènement OnMouseMove de l'Inspecteur d'Objets, et tu n'as plus qu'à
ajouter ton code;



- ou alors, tu rattaches l'évènement OnMouseMove de TabSheet3 (par
exemple) à l'évènement OnMouseMove de TabSheet1 en utilisant la liste
déroulante (flèche à droite), toujours dans l'Inspecteur d'Objets.



Tu peux faire de même avec les TPanels, ça te fait gagner en lisibilité et t'économise de la saisie ;)



Bonne prog'
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 15:56
Ce sont les labels que je veux passer en jaune puis en noir, je vais réexpliquer plus correctement, alors j'ai une fiche, sur cette fiche, j'ai un TPageControl avec plusieurs pages, et dans ces pages, j'ai des Tabels, et dans ces Tabels, j'ai des Labels et des RadioButton
désolé, ça parait compliqué.

Quand le curseur survol le Panel, je voudrais que le(s) Label(s) qu'il y a à l'intérieur devienne(nt) jaune(s), puis dès que le curseur quitte le Panel, le(s) Label(s) redevienne(nt) Noir(s).

Comme le dit japee, ça serait plus simple d'avoir à mettre le code une seule fois pour chaque Label, et une seule fois pour chaque TTabSheet.

Voilà, désolé j'aurais du expliquer un peu mieux, je n'étais pas très clair.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 févr. 2005 à 16:12
Mais C'EST plus simple, Maniaxman.



Alors, t'as essayé la soluce ?
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 16:16
oui, ça marche !!!
merci beaucoup à vous deux !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 16:29
Il y a beaucoup de panel sur mon application, n'y a t-il pas un moyen
simple pour les séléctionner tous en même temps pour leur attribuer
l'évènement OnMouseMove ?
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
22 févr. 2005 à 16:34
Si enfin ca depend de ta version de delphi moi j'ai la 6 et tu as la
"vue arboresencescente des objets" et dedans tu peux selectionner les
compos.

Sinon plutot que de t'embeter e le faire en conception crée le lien a
la procedure onmouse move à la création de ta fenetre dynamiquement.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 16:55
J'ai delphi 2005 et effectivement on peut, mais le problème c'est que mes labels sont mélangés avec des panels et des tabsheets, donc sur un site j'ai trouvé une astuce où ils disaient de séléctionner un composant et de faire clic droit, édition, séléctionner tout, mais ça ne marche pas je ne sais pas pourquoi, il ne me reste donc plus qu'à séléctionner les composants un par un avec shift, ça être long mais c toujours ça.
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 18:56
ok merci ça marche !!
je gagne un temps fou avec ça !
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 19:32
Est-ce que avec ce code il y a un moyen d'exclure certains labels?
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
22 févr. 2005 à 20:02
Quel code?

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
22 févr. 2005 à 20:29
procedure TForm1.FormCreate(Sender: TObject);

var
I : Integer;

begin

For I:=0 to Form1.ComponentCount-1 do
begin

If Form1.Components[I] is TPanel then
TPanel(Form1.Components[I]).OnMouseMove := PanelMouseMove;
end;
end;
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 févr. 2005 à 21:57
Avec ce code-là c'est pas les Labels que tu veux exclure, Maniax, mais
les Panels, même si à terme tu veux arriver à ce résultat.



Tu devrais nous demander de te le faire, ton prog', tel que c'est parti.



Ne trouves-tu pas que sur cette page, tu as un max d'informations
intéressantes qui ouvrent pas mal de perspectives, et que si tu as tout
bien assimilé (prend ton temps, c'est copieux, mine de rien), tu peux
t'en servir pour résoudre les problèmes que tu nous a exposés tout au
long de la journée.



Tu peux te servir de la propriété Tag des Panels pour empêcher que
certains soient concernés par l'évènement PanelMouseMove, comme ceci :



for i := 0 to ComponentCount -1 do

if Components[i] is TPanel then

if
TPanel
(Components[i]).Tag <> 2 then // 2 ou autre valeur...


TPanel
(Components[i]).OnMouseMove := PanelMousMove




Il te faudra bien sûr affecter cette valeur de tag aux Panels concernés (Inspecteur d'Objets).

C'est un peu de travail, mais si tu n'en as pas 50 sur la fiche...

Sinon, y'a toujours un moment où il faut en passer par la saisie
interminable de code, ça fait aussi partie des joies de la
programmation !



Bonne prog'



japee
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
22 févr. 2005 à 22:06
Re,

Je repete ta question : Est-ce que avec ce code il y a un moyen d'exclure certains labels?




Le code que je t'ai donné fonctionne pour les TPANEL
alors non tu ne peux pas exclure certains label. Si maintenant tu t'es
trompé et que tu voulais dire TPanel au lieu de TLabels oui tu peux
exclure un panel du code comme ceci :



procedure TForm1.FormCreate(Sender: TObject);


const

PanelAExclure : Array[0..1] of string = ('Panel1','Panel2') //Ici tu saisis les panels a exclure


var
I,J : Integer;

begin

For I:=0 to Form1.ComponentCount-1 do
begin

If Form1.Components[I] is TPanel then

begin



For J:=0 to High(PanelAExclure) do

begin



If

LowerCase(TPanel(Form1.Components[I]).Name) <>
LowerCase(PanelAExclure[J]) then



TPanel(Form1.Components[I]).OnMouseMove := PanelMouseMove;


end;

end;
end;
end;






PS : je n'ai pas testé ce code car je n'ai pas delphi sous la main. S'il y a une erreur je suis désolé.



Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
23 févr. 2005 à 10:21
Non, du coup plus aucun composant qu'il y a dans les panels ne devient jaune.
Sinon tu avais juste oublié le ; après les constantes.
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
23 févr. 2005 à 15:10
Maniaxman > as-tu remarqué que si les Panels se touchent ou si le
déplacement de la souris est trop rapide, plusieurs Labels peuvent se
retrouver colorés en jaune en même temps ? Ce qui n'est pas le but
recherché, si ?



Si tu as constaté ce problème, j'ai la solution.



Au fait, gaffe à Cursor := crHandpoint;


J'avais rajouté ça pour le "fun", mais le code est faux.

Si tu veux que le curseur se transforme au survol de la souris sur le Panel, il faut écrire à la place :

TPanel(Sender).Cursor := crHandPoint;



japee
0
Maniaxman Messages postés 155 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 17 juillet 2008
23 févr. 2005 à 18:38
Oui, effectivement mes panels sont très proches et il y a plusieurs labels qui sont jaunes en même temps.
0
Rejoignez-nous