BitBtn Button OnMouseEnter and OnMouseLeave ?

Résolu
Delphiturbo Messages postés 68 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 29 juillet 2008 - 25 mai 2008 à 14:21
Delphiturbo Messages postés 68 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 29 juillet 2008 - 26 mai 2008 à 10:52
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.

5 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
25 mai 2008 à 16:45
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 ?
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
26 mai 2008 à 02:57
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%" />
3
Delphiturbo Messages postés 68 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 29 juillet 2008
25 mai 2008 à 17:02
Merci bien

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

bey
0
Delphiturbo Messages postés 68 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 29 juillet 2008
25 mai 2008 à 18:57
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Delphiturbo Messages postés 68 Date d'inscription mercredi 31 octobre 2007 Statut Membre Dernière intervention 29 juillet 2008
26 mai 2008 à 10:52
merci bien :)
0
Rejoignez-nous