加入事件和加入属性差不多,只是要响应特定的消息,写消息处理句柄,如:
TMyControl = class(Tcomponent)
private
FOnMouseEnter: TNotifyEvent;
........
........
procedure FSetOnMouseEnter(value: TNotifyEvent);
protected
procedure cmmouseenter(var Msg: TMessage); message CM_MOUSEENTER;
published
property OnMouseLeave: TNotifyEvent read FonMouseLeave write FSetOnMouseLeave;
end;procedure TMyControl.cmmouseleave(var Msg: TMessage);
begin
....
if Assigned(FonMouseLeave) then FOnMouseLeave(Self);
end;
TMyControl = class(Tcomponent)
private
FOnMouseEnter: TNotifyEvent;
........
........
procedure FSetOnMouseEnter(value: TNotifyEvent);
protected
procedure cmmouseenter(var Msg: TMessage); message CM_MOUSEENTER;
published
property OnMouseLeave: TNotifyEvent read FonMouseLeave write FSetOnMouseLeave;
end;procedure TMyControl.cmmouseleave(var Msg: TMessage);
begin
....
if Assigned(FonMouseLeave) then FOnMouseLeave(Self);
end;
unit MyLabel;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TMyLabel = class(TLabel)
private
{ Private declarations }
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Samples', [TMyLabel]);
end;procedure TMyLabel.CMMouseEnter(var message:Tmessage);
begin
Canvas.Font.Color:=$0000FF;
Canvas.Brush.Color:=FEntercolor;
repaint;
end;procedure TMyLabel.CMMouseLeave(var message:Tmessage);
begin
Canvas.Font.Color:=clBlue;
Canvas.Brush.Color:=FLeavecolor;
repaint;
end;
end.