unit SkinButton; {$mode delphi} {$codepage UTF8} interface uses Classes, SysUtils, Buttons, Graphics, Controls; type TSkinBtn = class(TSpeedButton) private FNormalColor, FHighlightColor, FClickColor: TColor; FTransparent: Boolean; FOnMouseDown: TMouseEvent; FOnMouseEnter, FOnMouseLeave: TNotifyEvent; protected procedure POnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure POnMouseEnter(Sender: TObject); procedure POnMouseLeave(Sender: TObject); public constructor Create(AOwner: TComponent); destructor Destroy; published property Transparent: Boolean read FTransparent; property NormalColor: TColor read FNormalColor write FNormalColor; property OnHighlightColor: TColor read FHighlightColor write FHighlightColor; property OnClickColor: TColor read FClickColor write FClickColor; property OnMouseDown: TMouseEvent read FOnMouseDown; property OnMouseEnter: TNotifyEvent read FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave; end; implementation constructor TSkinBtn.Create(AOwner: TComponent); begin inherited Create(AOwner); FNormalColor:= clWhite; FHighlightColor:= FNormalColor; FClickColor:= FNormalColor; FTransparent:= False; inherited Transparent:= FTransparent; inherited OnMouseEnter:= POnMouseEnter; inherited OnMouseDown:= POnMouseDown; inherited OnMouseLeave:= POnMouseLeave; end; destructor TSkinBtn.Destroy; begin inherited Destroy; end; procedure TSkinBtn.POnMouseEnter(Sender: TObject); begin (Sender as TSkinBtn).Color:= FHighlightColor; inherited OnMouseEnter(Sender); end; procedure TSkinBtn.POnMouseLeave(Sender: TObject); begin (Sender as TSkinBtn).Color:= FNormalColor; inherited OnMouseLeave(Sender); end; procedure TSkinBtn.POnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then (Sender as TSkinBtn).Color:= FClickColor; inherited OnMouseDown(Sender, Button, Shift, X, Y); end; end.