Unit ImageButton;

Interface

Uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

Type
  TImageButton = Class(TImage)
  Private
    { Private declarations }
    FOnMouseEnter   : TNotifyEvent;
    FOnMouseLeave   : TNotifyEvent;
    FPicture_Change : Boolean;
    FPicture_Off    : TPicture;
    FPicture_On     : TPicture;
  Protected
    { Protected declarations }
    Procedure CmMouseEnter(Var Message: TMessage); Message CM_MOUSEENTER;
    Procedure CmMouseLeave(Var Message: TMessage); Message CM_MOUSELEAVE;
    Procedure ChangePicture_Off(Value: TPicture);
    Procedure ChangePicture_On(Value: TPicture);
  Public
    { Public declarations }
    Constructor Create(AOwner: TComponent); Override;
    Destructor  Destroy; Override;
  Published
    { Published declarations }
    Property OnMouseEnter   : TNotifyEvent Read FOnMouseEnter Write FOnMouseEnter;
    Property OnMouseLeave   : TNotifyEvent Read FOnMouseLeave Write FOnMouseLeave;
    Property Picture_Change : Boolean Read FPicture_Change Write FPicture_Change;
    Property Picture_On     : TPicture Read FPicture_Off Write ChangePicture_Off;
    Property Picture_Off    : TPicture Read FPicture_On Write ChangePicture_On;
  End;

Procedure Register;

Implementation

Procedure Register;
Begin
 RegisterComponents('NewComponent', [TImageButton]);
End;

Constructor TImageButton.Create(AOwner: TComponent);
Begin
 Inherited Create(AOwner);

 FPicture_Off := TPicture.Create;
 FPicture_On  := TPicture.Create;
End;

Destructor TImageButton.Destroy;
Begin
 FPicture_Off.Free;
 FPicture_On.Free;

 Inherited Destroy;
End;

Procedure TImageButton.CmMouseEnter(Var Message: TMessage);
Begin
 Inherited;

 If (FPicture_Change) And (Picture_On.Bitmap <> Nil) Then
   Picture.Bitmap := Picture_On.Bitmap;

 If Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
End;

Procedure TImageButton.CmMouseLeave(Var Message: TMessage);
Begin
 Inherited;

 If (FPicture_Change) And (Picture_Off.Bitmap <> Nil) Then
   Picture.Bitmap := Picture_Off.Bitmap;

 If Assigned(FOnMouseLeave) Then FOnMouseLeave(Self);
End;

Procedure TImageButton.ChangePicture_On(Value: TPicture);
Begin
 FPicture_On.Assign(Value);
End;

Procedure TImageButton.ChangePicture_Off(Value: TPicture);
Begin
 FPicture_Off.Assign(Value);
End;

End.
