NIch, зачем такие извращения?
давным давно делал такое:
Код:
unit UltraComp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;
type
TUButton = class(TButton)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
{ Published declarations }
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
end;
procedure Register;
implementation
{ TUButton }
procedure TUButton.CMMouseEnter(var Message: TMessage);
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;
procedure TUButton.CMMouseLeave(var Message: TMessage);
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;
procedure Register;
begin
RegisterComponents('UltraSoft', [TUButton]);
end;
end.
потом подключаем этот компонент, кидаем на форму, и юзаем события OnMouseEnter и OnMouseLeave (по аналогии можно сделать для Label, ListBox, ComboBox и т.д.). Для нажатия используем событие OnMouseDown, в нём ставим условие:
Код:
if Button = mbLeft then
begin
//реакция на нажатие левой кнопки
end;