Merci, comme d'habitude Nono t'assure!
-------------------------------
Rponse au message :
-------------------------------
Alors le plus "propre" est de créer un composant descendant de Timage qui donne accès aux OnMouseEnter et OnMouseLeave :
**** Voici l'unité complète de ce composant qu'il faut installer :
unit UMonImage;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;
type
TMonImage = class(TImage)
private
{ Déclarations privées }
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
protected
{ Déclarations protégées }
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
public
{ Déclarations publiques }
constructor Create(AOwner: TComponent); override;
published
{ Déclarations publiées }
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;
procedure Register;
implementation
constructor TMonImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FOnMouseEnter := nil;
FOnMouseLeave := nil;
end;
procedure TMonImage.CMMouseEnter(var Msg: TMessage);
begin
If Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;
procedure TMonImage.CMMouseLeave(var Msg: TMessage);
begin
If Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;
procedure Register;
begin
RegisterComponents('Exemples', [TMonImage]);
end;
End.
***** Ensuite :
Alors dans ce cas c'est tout simple : En supposant que MonImage1 doit être affichée quand la souris est loin et MonImage2 quand la souris est dessus.
Sur le OnMouseEnter de MonImage1:
procedure TForm1.MonImage1MouseEnter(Sender: TObject);
begin
MonImage2.Visible:=True;
MonImage1.Visible:=False;
end;
Sur le OnMouseLeave de MonImage2 :
procedure TForm1.MonImage2MouseLeave(Sender: TObject);
begin
MonImage2.Visible:=False;
MonImage1.Visible:=True;
end;
Avec ça, quel que soit le control parent ça fonctionne !
---

Nono du Moulin

---
-------------------------------
Réponse au message :
-------------------------------
En fait c pas de chance car justement mes images font parties d un ControlBar donc sa ne marche pas.
-------------------------------
Rponse au message :
-------------------------------
Il vaut mieux utiliser les message CM_MOUSEENTER et CM_MOUSELEAVE créés par la VCL.
Supprime le code que tu as mis dans OnMouveMove.
Ajoute dans la partie Private de la fiche les deux déclarations suivantes :
private
{ Déclarations privées }
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
Puis ajoute le code de traitement :
procedure TForm1.CMMouseEnter(var Msg: TMessage);
Var Compo:TComponent;
begin
Compo:=TComponent(Msg.LParam);
If(Compo=Image1)Or(Compo=Image2)
Then Begin
Image1.Visible:=False;
Image2.Visible:=True;
End;
end;
procedure TForm1.CMMouseLeave(var Msg: TMessage);
Var Compo:TComponent;
begin
Compo:=TComponent(Msg.LParam);
If(Compo=Image1)Or(Compo=Image2)
Then Begin
Image1.Visible:=True;
Image2.Visible:=False;
End;
end;
Petite explication : le comosant TControl défini une gestion pour les message MouseEnter et MouseLeave de Windows. Le gestionnaire par défaut de TControl ne fait que retourner le message au parent en plaçant dans le paramètre LPARAM l'adresse de l'objet d'origine ayant reçu l'événement.
Mais attention : ceci ne fonctionne malheureusement qui si Form1 est le parent de Image1 et Image2. Les deux images doivent donc être placées sur la fiche et non sur un GroupBox ou autre composant pouvant servir de récepteur.
---

Nono du Moulin

---
-------------------------------
Réponse au message :
-------------------------------
Salut tout le monde,
Je voudrais savoir comment sur le passage de la souris on peut change d'image et de remettre l'ancienne image des que la souris n'est plus sur l'image survole?
Voila le debut de mon code mais je ne trouve pas la suite:
procedure TMainForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
image1.visibe:= false;
image2.visible:= true;
end;
Merci d'avance
Youyou0214