OnMouseMove [Résolu]

Signaler
Messages postés
36
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
27 janvier 2010
-
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
-
Salut tout le monde. ma question est :
Comment inverser l'evenement OnMouseMove d'un Panel lorsque je passe dans un autre panel
j'eclaircis : j'ai plusieurs panels et sont tous liés a un meme evenement OnMouseMove , je voudrai qu'il soit activé a un seul panel au meme temps et tous les autres reviennent a l'état initial(avant cet évenement).
Merci D'avance.  

5 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Salut !
J'ai mis cette procédure sur mes panels et ça fonctionne (peut importe le nombre de panels) :

procedure TForm1.PanelMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i: Integer;
begin
  for i:=0 to ComponentCount-1 do
    if (Components[i] is TPanel) then
      (Components[i] as TPanel).Color:= clBtnFace;
  (Sender as TPanel).Color:= clRed;
end;

Bonne journée

Salut,

Ta question n'est pas claire : Si tu veux qu'un évènement soit communs à différents objets et connaitre l'objet qui appel cet évènement, il suffit d'utiliser le Sender.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Bonjour,
simple : tu mets un tag (genre 1 pour le panel 1, 2 ...) et par exemple tu fais une routine qui se liera à tous les OnMouseMove :

procedure SelectPanel(Sender: TObject);
begin
  // Tu rends tous tes panels désactivés, on va dire que c'est par les couleurs


  Panel1.Color := clBtnFace;
  Panel2.Color := clBtnFace;
   ...
  if Sender is TPanel then
  case TPanel(Sender).Tag of
  0: Panel1.Color := clRed;
  1: Panel2.Color := clRed;
  2:  Panel3.Color := clRed;
  3: Panel4.Color := clRed;
  ...
  end;
end;

Je n'ai pas testé mais ça devrait marcher.

Cordialement, Bacterius !

Deux TPanels

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
IF Sender Is TPanel Then
Showmessage((Sender As TPanel).Caption);
end;

Copier Panel1MouseMove:
Aller dans l'inspecteur d'objet et sélectionné la propriété MouseMove du Panel2 et coller Panel1MouseMove

Compiler et admirer le résultat
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Oui ma méthode n'est pas compatible avec les OnMouseMove : tu recopies mon code (ou celui de Francky ^^) dans par exemple le OnMouseMove de Panel1, et tu lies tous les autres OnMouseMove des autres panels à cette routine. (Penser à lier également la routine à la fiche, comme ça le rouge ne reste pas sur le dernier panel pointé) ^^.

Cordialement, Bacterius !