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

Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 10:31 - Dernière réponse : Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention
- 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 

36 réponses

Répondre au sujet
japee 1792 Messages postés vendredi 27 décembre 2002Date d'inscription 12 novembre 2016 Dernière intervention - 22 févr. 2005 à 15:49
+3
Utile
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'
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de japee
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 17:12
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 23 févr. 2005 à 10:41
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 10:46
0
Utile
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.
Commenter la réponse de jmp77
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 22 févr. 2005 à 10:47
0
Utile
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.
Commenter la réponse de WhiteHippo
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 10:48
0
Utile
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
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 10:54
0
Utile
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.
Commenter la réponse de jmp77
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 10:59
0
Utile
merci jmp77, et désolé j'ai été trop vite dans le titre
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 11:25
0
Utile
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.
Commenter la réponse de jmp77
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 11:53
0
Utile
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
Commenter la réponse de Maniaxman
roud59 103 Messages postés jeudi 16 septembre 2004Date d'inscription 26 juillet 2007 Dernière intervention - 22 févr. 2005 à 12:18
0
Utile
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
Commenter la réponse de roud59
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 12:54
0
Utile
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
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 13:13
0
Utile
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.
Commenter la réponse de jmp77
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 14:07
0
Utile
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 ?
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 14:47
0
Utile
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.
Commenter la réponse de jmp77
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 14:49
0
Utile
une question, comment séléctionner tous les labels d'un TPanel, uniquement les labels?
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 15:07
0
Utile
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.
Commenter la réponse de jmp77
Maniaxman 159 Messages postés lundi 10 janvier 2005Date d'inscription 17 juillet 2008 Dernière intervention - 22 févr. 2005 à 15:13
0
Utile
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.
Commenter la réponse de Maniaxman
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 15:19
0
Utile
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.
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 22 févr. 2005 à 15:22
0
Utile
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.
Commenter la réponse de jmp77

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.

changer la couleur d'un label au survol de la souris - page 2