OnMouseLeave et TImage [Résolu]

cs_txo 31 Messages postés vendredi 5 mars 2004Date d'inscription 15 avril 2007 Dernière intervention - 10 févr. 2007 à 18:15 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 12 févr. 2007 à 02:25
Bonjours,

Je suis en train d'essayer de faire un bouton avec un composant TImage, le but étant de changer l'image lorsque la souris est sur cette image et remettre son image initiale lorsque la souris quitte le bouton.

C'est pourquoi j'ai utilisé l'évènement OnMouseEnter et OnMouseLeave. Pour tester ces évènements je les ai testé avec un showmessage.

Le probleme est que le showmessage du onmouseleave apparait en meme temps que celui du onmouseenter.

Quelqu'un sait-il ce qui se passe et comment y remedier ?
Merci beaucoup
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_txo 31 Messages postés vendredi 5 mars 2004Date d'inscription 15 avril 2007 Dernière intervention - 11 févr. 2007 à 04:38
3
Merci
Parfait merci beaucoup j'avais pas vu mon probleme comme ca.
Voici mon code pour ceux qui auraient le meme probleme, pour précision, j'ai une image de fond (Image2) et une image servant de bouton par dessus (Image1).

----------code---------------

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Image1.Picture.Bitmap := nil;
ImageList1.GetBitmap(1,Image1.Picture.Bitmap);
end;

procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Image1.Picture.Bitmap := nil;
ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;

-------code-------------

Merci cs_txo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_txo
cs_txo 31 Messages postés vendredi 5 mars 2004Date d'inscription 15 avril 2007 Dernière intervention - 10 févr. 2007 à 20:27
0
Merci
Personne n'a rencontré ce problème ?
Commenter la réponse de cs_txo
Utilisateur anonyme - 11 févr. 2007 à 00:39
0
Merci
Salut,


Heu les procédures OnMouseEnter et OnMouseLeave, tu es sur qu'elles existent pour un TImage ????

PS : les procédures à utiliser sont :

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

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
Commenter la réponse de Utilisateur anonyme
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 févr. 2007 à 11:09
0
Merci
Oui c'est bien mais c'est executé 1000000000 fois en 1 secondes ça non ? ^^
fait un test avec une listbox genre pour voir le nombre de fois que tu assigne une picture a ton image :
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
ListBox1.Add('dessus');
end;

ne vaut mieux t'il pas utiliser un boolean casé quelque part pour indiquer si on a deja assigner l'image afin de ne pas flooder justement ?
var
fDeja : Boolean;
...
TForm1.Create
begin
fDeja := false;
end;
...
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

  Y: Integer);

begin
if not fDeja then
 begin
  Image1.Picture.Bitmap := nil;
  ImageList1.GetBitmap(1,Image1.Picture.Bitmap);
  fDeja := true;
 end;

end;
puis tu remets a False ailleurs, je te laisse trouver ^^ a bientot
Commenter la réponse de JulioDelphi
Utilisateur anonyme - 11 févr. 2007 à 11:19
0
Merci
On peut jouer aussi avec la propriété Tag Julio ;) comme cas pas de variable à définir.
Commenter la réponse de Utilisateur anonyme
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 11 févr. 2007 à 14:49
0
Merci
Oui tout a fait !
Commenter la réponse de JulioDelphi
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 12 févr. 2007 à 02:25
0
Merci
tu peu faire ça aussi :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TImage = class(ExtCtrls.TImage)
  private
    fBringToFrontOnEnter : boolean;
    fOnMouseEnter : TNotifyEvent;
    fOnMouseLeave : TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  published
    property BringToFrontOnEnter : boolean read fBringToFrontOnEnter write fBringToFrontOnEnter default false;
    property OnMouseEnter : TNotifyEvent read fOnMouseEnter write fOnMouseEnter;
    property OnMouseLeave : TnotifyEvent read fOnMouseLeave write fOnMouseLeave;
  end;

  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    procedure FormCreate(Sender: TObject);
  private

  protected
    procedure DoImageEnter(Sender : TObject);
    procedure DoImageLeave(Sender : TObject);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TImage.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if fBringToFrontOnEnter then
     BringToFront;
  if Assigned(FOnMouseEnter) then
     fOnMouseEnter(Self);
end;

procedure TImage.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnMouseLeave) then
     fOnMouseLeave(Self);
end;

procedure TForm1.DoImageEnter(Sender : TObject);
begin
  with (Sender as TImage).Picture.Bitmap.Canvas do begin
       Brush.Color := $0099FF;
       FillRect((Sender as TImage).ClientRect);
  end
end;

procedure TForm1.DoImageLeave(Sender : TObject);
begin
  with (Sender as TImage).Picture.Bitmap.Canvas do begin
       Brush.Color := $FFFFFF;
       FillRect((Sender as TImage).ClientRect);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  image1.OnMouseEnter := DoImageEnter;
  image1.OnMouseLeave := DoImageLeave;
  image1.BringToFrontOnEnter := true;
  image1.Picture.Bitmap.Width := image1.Width;
  image1.Picture.Bitmap.Height := image1.Height;

  image2.OnMouseEnter := DoImageEnter;
  image2.OnMouseLeave := DoImageLeave;
  image2.BringToFrontOnEnter := true;
  image2.Picture.Bitmap.Width := image1.Width;
  image2.Picture.Bitmap.Height := image1.Height;
end;

end.

et ça marche trés trés bien!

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi

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.