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:49
Tu vasfaire tourner jmp77 en bourrique, Maniaxman



Bon, je crois que j'ai ta soluce, si j'ai bien compris ton problème.



procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

var i: Integer;

begin

for i := 0 to ComponentCount -1 do

if Components[i] is TLabel then

if TLabel(Components[i]).Parent = Sender then

begin

TLabel(Components[i]).Font.Color := ClYellow;

TLabel(Components[i]).Tag := 9;

end;

Cursor := crHandPoint;

end;



procedure TForm1.TabSheet1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var i: Integer;

begin

for i := 0 to ComponentCount -1 do

if Components[i] is TLabel then

if TLabel(Components[i]).Tag = 9 then

TLabel(Components[i]).Font.Color := clBlack;

end;



Et n'oublie pas de cliquer sur réponse acceptée si ça te va !



Bonne prog'
3
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 à 17:12
Mais fais le au demarrage de ton appli tu mets ceci :

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;


Et voila avec ce code tous tes panels auront l'evenement OnMouseMove qui pointera sur la procedure PanelOnMouseMove


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
jmp77
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
7
23 févr. 2005 à 10:41
Alors si c'est les TLabel que tu veux eviter qu'ils deviennent jaune c'est cette procedure que tu dois modifier :

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);




const

LabelAExclure : Array[0..1] of string = (Label1',Label2'); //Ici tu saisis les Labels a exclure





var i,j: Integer;



begin

for i := 0 to ComponentCount -1 do

if Components[i] is TLabel then

if TLabel(Components[i]).Parent = Sender then

begin




For J:=0 to High(LabelAExclure) do

begin


If

LowerCase(TLabel(Components[i])

.Name) <>
LowerCase(LabelAExclure[J]) then




begin





TLabel(Components[i]).Font.Color := ClYellow;

TLabel(Components[i]).Tag := 9;

end;


end;

Cursor := crHandPoint;

end;

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
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 à 10:46
Hello,



Voici comment faire :



Tu declares dans les evenement suivant de tes TLabels:


<li>OnMouseEnter tu mets LabelOnMouseEnter</li>


<li>OnMouseLeave tu mets LabelOnMouseLeave</li>

Puis tu copies ces codes :



procedure TForm1.LabelOnMouseEnter(Sender: TObject);

begin

//Passe le label en jaune quand la souris passe dessus

TLabel(Sender).Font.Color := ClYellow;

end;



procedure TForm1.LabelOnMouseLeave(Sender: TObject);

begin

//Passe le label en noir quand la souris n'est plus sur le label

TLabel(Sender).Font.Color := ClBlack;

end;


L'avantage de ce code c'est qu'il est unique pour tout tes labels.


Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0

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

Posez votre question
WhiteHippo
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
22 févr. 2005 à 10:47
bonjour

Met plutot ton code "Label1.Font.Color := clYellow;" dans le OnEnter de ton Panel
et dans le OnExit ajoute "Label1.Font.Color := clBlack;"

Cordialement.
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 à 10:48
oui, merci jmp77, mais c'est quand le
curseur passe au-dessus d'un panel que je veux que la couleur du label
change, et dans les évènement panel, il n'y a pas LabelOnMouseEnter ni LabelOnMouseLeave
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 à 10:54
Ah desole mais regarde le titre de ton message : changer la couleur d'un label au survol de la souris



Je regarde ce que l'on peut faire pour un panel.


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 à 10:59
merci jmp77, et désolé j'ai été trop vite dans le titre
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 à 11:25
Re,



Alors voici comment faire :



Tu crées l'évenement OnMouseMove de tes tpanels et tu mets :

procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

begin

//Passe le label en jaune quand la souris passe dessus


TPanel(Sender).Font.Color := ClYellow;

end;


Ensuite tu crées l'évenement OnMouseMove de ta form et tu mets :

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);



var

I : Integer;



begin

//On recherche tous les tpanels de la form et on les mets en noir

For I:=0 to TForm(Sender).ComponentCount-1 do

begin



If TForm(Sender).Components[I] is TPanel then

TPanel(TForm(Sender).Components[I]).Font.Color := ClBlack;

end;

end;


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 à 11:53
merci jmp77, mais le problème, c'est que les labels sur un TPageControl, j'ai donc mis :



procedure TForm2.PageControl1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

I : Integer;


begin

//On recherche tous les tpanels de la form et on les mets en noir

For I:=0 to TForm(Sender).ComponentCount-1 do

begin



If TForm(Sender).Components[I] is TPanel then

TPanel(TForm(Sender).Components[I]).Font.Color := ClBlack;

end;

end;



mais le label reste jaune, pourquoi ?

et aussi, les labels sont en dehors des Panels
0
roud59
Messages postés
99
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
26 juillet 2007
2
22 févr. 2005 à 12:18
Salut Maniaxman,

Une petite info, OnMouseMove d'un contrôle est déclenché quand la souris bouge au dessus du contrôle. Quand la souris sort du contrôle, le OnMouseMove du contrôle n'est plus déclenché, et c'est pour ça que ton label reste jaune. Maintenant, quand la souris quitte ton pannel elle arrive forcément (presque) sur autre controle, sont parent par exemple. Recupère alors le OnMouseMove du controle parent ou des controles à coté du panel pour en déduire que la souris est sur un autre contrôle et donc qu'elle a quitté ton panel pour remettre ton label en noir.

Roud59
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 à 12:54
la réponse de jmp77 me plaisait bien, sauf que les labels restaient jaunes, c'est aprce que je n'avais pas précisé que les labels étaient sur un PageControl, mais non pas sur la fiche directement, et les labels ne se trouvaient pas dans les Panels, d'ailleurs je n'arrive toujours pas à séléctionner tous les labels du PageControl
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 à 13:13
Re,



Et bien c'est simple :


Tu crées l'évenement OnMouseMove de tes tpanels et tu mets :

procedure TForm1.PanelMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

begin

//Passe le label en jaune quand la souris passe dessus


TPanel(Sender).Font.Color := ClYellow;

end;


Ensuite tu crées l'évenement OnMouseMove de tes TTabSheets et tu mets :

procedure TForm1.TabSheetMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);



var

I : Integer;

Form : TForm;



begin

//On récupère la form où est posé le TpageControl

Form := TForm(TTabSheet(Sender).PageControl.Parent);



For I:=0 to Form.ComponentCount-1 do

begin

//On recherche tous les tpanels de la form et on les mets en noir


If Form.Components[I] is TPanel then

TPanel(Form.Components[I]).Font.Color := ClBlack;

end;

end;


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 à 14:07
est-ce qu'au lieu de mettre le code pour que les labels redeviennent
noirs dans chaque évènement OnMouseMove de chaque Tabsheet, il n'y
aurait pas moyen de mettre le code une seule fois ?
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 à 14:47
Mais tu ne mets le code qu'une seule fois.



Juste pour chaque ttabsheet tu mets la meme procedure dans l'evenement OnMouseMove

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 à 14:49
une question, comment séléctionner tous les labels d'un TPanel, uniquement les 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 à 15:07
Quand t'entends tu par "sélectionner" tous les labels? Si tu es en conception ou en execution?

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 à 15:13
En fait, je me suis rendu compte que pour mon application, ça serait plus simple de mettre mes labels dans des TPanels, donc comment faire pour que uniquement les Labels deviennent jaunes quand le curseur passe au-dessus d'un Panel, j'avais mis ceci dans l'évènement OnMouseMove des Panels :

TPanel(Sender).Font.Color := ClYellow;

suivi de ceci :

procedure TForm1.TabSheetMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

var
I : Integer;
Form : TForm;

begin
//On récupère la form où est posé le TpageControl
Form := TForm(TTabSheet(Sender).PageControl.Parent);

For I:=0 to Form.ComponentCount-1 do
begin
//On recherche tous les tpanels de la form et on les mets en noir
If Form.Components[I] is TPanel then
TPanel(Form.Components[I]).Font.Color := ClBlack;
end;
end;

mais les éléments qui sont contenus dans le Panels comme les RadioButton deviennent jaunes sans que je le veuille, je voudrais que seulement les labels deviennent jaunes.
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 à 15:19
c tres simple



tu fais juste ceci :

procedure TForm1.TabSheetMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

var
I : Integer;
Form : TForm;

begin
//On récupère la form où est posé le TpageControl
Form := TForm(TTabSheet(Sender).PageControl.Parent);

For I:=0 to Form.ComponentCount-1 do
begin
//On recherche tous les tpanels de la form et on les mets en noir
If Form.Components[I] is TLabel then
TLabel(Form.Components[I]).Font.Color := ClBlack;
end;
end;

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
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 à 15:22
Mais dans ce cas la je ne comprends plus rien a ta demande. Est ce que
ces sont les labels ou les panels que tu veux passer en jaune puis en
noir? Explique bien ce que tu veux faire car la je pense que l'on est
entrain de faire une usine a gaz alors ce que tu veux faire est simple
je pense.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0