Textimage : une timage qui intercepte le enter / leave de la souris

Contenu du snippet

Un petit composant tout simple, qui surcharge TImage en ajoutant les fonctionnalités d'entrée et de sortie de la souris dans l'image.

L'intérêt est d'abord son utilité avant sa pédagogie.
Les principes utilisés sont :
- Interception de message windows
- Surcharge de composant
- Création d'évènements

Source / Exemple :


unit ExtImage;

interface

uses
  Controls, ExtCtrls, Messages, Classes, Graphics;

type
  //Classe de base, qui contient tout le code
  TCustomExtImage = class(TImage)
  private
    FOnMouseLeave: TNotifyEvent;
    FOnMouseEnter: TNotifyEvent;
    //interception des messages windows d'evenements de la souris qui nous interessent
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  protected
    //nos proprietes
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;

    //procedures appelées par les messages windows
    // permet de surcharger ces procedures si on herite le composant, sans se soucier des messages
    procedure MouseEnter; virtual;
    procedure MouseLeave; virtual;
  end;

  //class effective, permet simplement de "publisher" les proprietes voulues
  TExtImage = class(TCustomExtImage)
  published
    property OnMouseEnter;
    property OnMouseLeave;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Supplément', [TExtImage]);
end;

{ TCustomExtImage }

procedure TCustomExtImage.CMMouseEnter(var Message: TMessage);
begin
  MouseEnter;
end;

procedure TCustomExtImage.CMMouseLeave(var Message: TMessage);
begin
  MouseLeave;
end;

procedure TCustomExtImage.MouseEnter;
begin
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;

procedure TCustomExtImage.MouseLeave;
begin
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;

end.

Conclusion :


Une source très basique, mais très utile a mon avis.

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.