BitBtn Button OnMouseEnter and OnMouseLeave ? [Résolu]

Signaler
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
-
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
-
Salut

j ai Delphi7 mais cette Version n' a pas Events : OnMouseEnter and OnMouseLeave
Je voudrais  faire cet Efecte :
Demo

also je dois faire un Code
J ai essaiee avec cette Code mais il ne pas marche corectement !

unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ImgList;
 
type
TForm1 = class(TForm)
ImageList1: TImageList;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure BitBtn2Exit(Sender: TObject);
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.CMMouseEnter(var Message: TMessage);
var
ptWork : TPoint;
begin
GetCursorPos(ptWork);
if WindowFromPoint(ptWork) = BitBtn1.Handlethen
BitBtn1.Glyph := nil;
ImageList1.GetBitmap(0, BitBtn1.Glyph);
end;
 
procedure TForm1.CMMouseLeave(var Message: TMessage);
var
ptWork : TPoint;
begin
GetCursorPos(ptWork);
if WindowFromPoint(ptWork) = BitBtn1.Handlethen
BitBtn1.Glyph := nil;
ImageList1.GetBitmap(1, BitBtn1.Glyph);
end;
end.
A voir également:

5 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
1
Salut !
t'es sur que tu t'es pas emmêlé les pinceaux avec ton indentation ?
N'est-ce pas ceci que tu voulais faire : ?

procedure TForm1.CMMouseEnter(var Message: TMessage);
var
ptWork : TPoint;
begin
GetCursorPos(ptWork);
if WindowFromPoint(ptWork) = BitBtn1.Handle then
begin
BitBtn1.Glyph := nil;
ImageList1.GetBitmap(0, BitBtn1.Glyph);
end;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
var
ptWork : TPoint;
begin
GetCursorPos(ptWork);
if WindowFromPoint(ptWork) = BitBtn1.Handle then
begin
BitBtn1.Glyph := nil;
ImageList1.GetBitmap(1, BitBtn1.Glyph);
end;
end;

... non ?
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
unit Unit1;

interface

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

type

  { overclassing de TButton }


  TButton = class(StdCtrls.TButton)
  private
    fOnMouseEnter : TNotifyEvent;
    fOnMouseLeave : TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter : TNotifyEvent read fOnMouseEnter write fOnMouseEnter;
    property OnMouseLeave : TnotifyEvent read fOnMouseLeave write fOnMouseLeave;
  end;



  { overclassing de TEdit }


  TEdit = class(StdCtrls.TEdit)
  private
    fOnMouseEnter : TNotifyEvent;
    fOnMouseLeave : TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter : TNotifyEvent read fOnMouseEnter write fOnMouseEnter;
    property OnMouseLeave : TnotifyEvent read fOnMouseLeave write fOnMouseLeave;
  end;



  { overclassing de TBitBtn }


  TBitBtn = class(Buttons.TBitBtn)
  private
    fOnMouseEnter : TNotifyEvent;
    fOnMouseLeave : TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter : TNotifyEvent read fOnMouseEnter write fOnMouseEnter;
    property OnMouseLeave : TnotifyEvent read fOnMouseLeave write fOnMouseLeave;
  end;


  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
  private
  public

    { On ecrit deux nouveaux gestionnaire d'evenements }


    procedure DoME(Sender: TObject);
    procedure DoML(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DoME(Sender: TObject);
begin


  { affichage du nom du composant sur la barre de titre de la fiche }



  Caption := 'Enter : '+(Sender as TComponent).Name;
end;

procedure TForm1.DoML(Sender: TObject);
begin


  { affichage du nom du composant sur la barre de titre de la fiche }



  Caption := 'Leave : '+(Sender as TComponent).Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin


  { assignation des gestionnaires d'evenement MouseEnter, MouseLeave }



  Button1.OnMouseEnter := DoME;
  Button1.OnMouseLeave := DoML;
  Edit1.OnMouseEnter   := DoME;
  Edit1.OnMouseLeave   := DoML;
  BitBtn1.OnMouseEnter := DoME;
  BitBtn1.OnMouseLeave := DoML;
end;



{ code de fonctionnement interne de l'overclassing des composants devant avoir les evenements MouseEnter et MouseLeave.
Message CMMouseEnter/CMMouseLeave -> declanche l'evenement correspondant OnMouseEnter/OnMouseLeave }



{ TButton }

procedure TButton.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(fOnMouseEnter) then
    fOnMouseEnter(Self);
end;

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

{ TEdit }

procedure TEdit.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(fOnMouseEnter) then
    fOnMouseEnter(Self);
end;

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

{ TBitBtn }

procedure TBitBtn.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(fOnMouseEnter) then
    fOnMouseEnter(Self);
end;

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



end.





<hr size="2" width="100%" />
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008

Merci bien

le code marche ;)
1. begin et end;
 2.  if WindowFromPoint(ptWork) <> BitBtn1.Handle then

bey
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008

Salut
le code sa marche mais je voudrais etuliser Event ci le Cursor est sur le Button et pas sur la Form
 voila le Code complet :
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ImgList;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    BitBtn1: TBitBtn;

  private
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CMMouseEnter(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) = BitBtn1.Handle then
  begin
    BitBtn1.Glyph := nil;
    ImageList1.GetBitmap(0, BitBtn1.Glyph);
  end;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
var
  ptWork : TPoint;
begin
  GetCursorPos(ptWork);
  if WindowFromPoint(ptWork) <> BitBtn1.Handle then
  begin
    BitBtn1.Glyph := nil;
    ImageList1.GetBitmap(1, BitBtn1.Glyph);
  end;
end;

end.
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008

merci bien :)