Ico de BitBtn Button

Signaler
Messages postés
68
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
29 juillet 2008
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Salut
mon Button BitBtn1 a une Ico "xxx"
Mais en Event OnMouseEnter va mon Button BitBtn1 prendre une nevelle ico :
procedure TForm1.BitBtn1CMMouseEnter(varMessage: TMessage);

var

  ptWork : TPoint;

begin

  GetCursorPos(ptWork);


  if WindowFromPoint(ptWork) = BitBtn1.Handle then

  begin

    BitBtn1.Glyph : =nil;


    ImageList1.GetBitmap(0, BitBtn1.Glyph);


  end;


  end;

En Event OnMouseLeave mon Button dois prendre sa premiere Ico "xxx" et pas comme ca une autre Icon de ListImage1:
procedure TForm1.BitBtn1CMMouseLeave(varMessage: TMessage);

var

  ptWork : TPoint;

begin

  GetCursorPos(ptWork);


  if WindowFromPoint(ptWork) <> BitBtn1.Handlethen

  begin

    BitBtn1.Glyph : =nil;


    ImageList1.GetBitmap(1, BitBtn1.Glyph); // ok, mais je voudrais prendere l'Ico avant l' Event OnMouseEnter

  end;

C' est possible ou no

end;

2 réponses

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
1) utilise le code que je t'ai donner dans ton precedent message pour implementer les evenement OnMouseEnter et OnMouseLeave, ce sera plus pratique pour faire cela et t'evitera a chaque fois de verifier sur quoi viens d'entrer la souris, ou de sortir.

2) inutile de mettre le Glyph a nil.

3) exemple :

unit Unit1;

interface

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

type
  { overclassing de TBitBtn }
  TBitBtn = class(Buttons.TBitBtn)
  private
    fEnterBitmap  : TBitmap;
    fLeaveBitmap  : TBitmap;
    fELBitmap     : boolean;
    procedure SetELBitmap(index: integer; value: TBitmap);
  private
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  protected
    procedure DoBitmapChange(Sender: TObject);
  public
    property EnterGlyph : TBitmap index 0 read fEnterBitmap write SetELBitmap;
    property LeaveGlyph : TBitmap index 1 read fLeaveBitmap write SetELBitmap;
    property EnterLeaveGlyph : boolean read fELBitmap write fELBitmap default false;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TBitBtn }

procedure TBitBtn.CMMouseEnter(var Message: TMessage);
begin
  if fELBitmap then
    Glyph.Assign(fEnterBitmap);
end;

procedure TBitBtn.CMMouseLeave(var Message: TMessage);
begin
  if fELBitmap then
    Glyph.Assign(fLeaveBitmap);
end;

constructor TBitBtn.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fEnterBitmap := TBitmap.Create;
  fEnterBitmap.OnChange := DoBitmapChange;
  fLeaveBitmap := TBitmap.Create;
  fLeaveBitmap.OnChange := DoBitmapChange;
  fELBitmap := false;
end;

destructor TBitBtn.Destroy;
begin
  fEnterBitmap.Free;
  fLeaveBitmap.Free;
  inherited Destroy;
end;

procedure TBitBtn.DoBitmapChange(Sender: TObject);
begin
  Changed;
end;

procedure TBitBtn.SetELBitmap(index: integer; value: TBitmap);
begin
  case index of
    0 : fEnterBitmap.Assign(value);
    1 : fLeaveBitmap.Assign(value);
  end;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  BitBtn1.EnterLeaveGlyph := true;   BitBtn1.EnterGlyph.LoadFromFile('F:\WKDelphi\ADDONS\BitMaps\buttBlueNP.bmp');
  BitBtn1.LeaveGlyph.LoadFromFile('F:\WKDelphi\ADDONS\BitMaps\buttRedNP.bmp');
  BitBtn1.Glyph.Assign(BitBtn1.LeaveGlyph);
end;

end.

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
Sincerement, je deteste les ImageList, je prefere largement travailler avec les ressources ou avec des pack dynamique ou tout simplement avec des ressources externes.
j'aime pas trop le stockage des images dans le DFM ça le rend lourd.