Changer la couleur d'un label au survol de la souris [Résolu]

Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
- - Dernière réponse : Maniaxman
Messages postés
159
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
Afficher la suite 

16/36 réponses

Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1
0
Merci
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'
Commenter la réponse de japee
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
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.
Commenter la réponse de Maniaxman
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1
0
Merci
Mais C'EST plus simple, Maniaxman.



Alors, t'as essayé la soluce ?
Commenter la réponse de japee
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
oui, ça marche !!!
merci beaucoup à vous deux !!
Commenter la réponse de Maniaxman
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
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 ?
Commenter la réponse de Maniaxman
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
4
0
Merci
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.
Commenter la réponse de jmp77
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
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.
Commenter la réponse de Maniaxman
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
ok merci ça marche !!
je gagne un temps fou avec ça !
Commenter la réponse de Maniaxman
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
Est-ce que avec ce code il y a un moyen d'exclure certains labels?
Commenter la réponse de Maniaxman
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
4
0
Merci
Quel code?

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
Commenter la réponse de jmp77
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
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;
Commenter la réponse de Maniaxman
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1
0
Merci
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
Commenter la réponse de japee
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
4
0
Merci
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.
Commenter la réponse de jmp77
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
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.
Commenter la réponse de Maniaxman
Messages postés
1708
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
5 octobre 2019
1
0
Merci
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
Commenter la réponse de japee
Messages postés
159
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
17 juillet 2008
0
Merci
Oui, effectivement mes panels sont très proches et il y a plusieurs labels qui sont jaunes en même temps.
Commenter la réponse de Maniaxman