--- ---

If you ever created visual components you probably wanted to know if the mouse is over the component. Well, this is a lot easier than you could imagine using Delphi Help :-) There are two Delphi component messages you need to use: CM_MOUSEENTER and CM_MOUSELEAVE.

    type
      TMouseButton = class(TButton)
      protected
        ...
        fMouseOut,
        fMouseOver: TNotifyEvent;
        ...
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      published
        ...
        property OnMouseOut: TNotifyEvent read fMouseOut write fMouseOut;
        property OnMouseOver: TNotifyEvent read fMouseOver write fMouseOver;
      end;
      ...
      // Trigger OnMouseEnter event if any assigned
      procedure TMouseButton.CMMouseEnter(var Message: TMessage);
      begin
        if Assigned(fMouseOver) then
          OnMouseOver(Self);
        Message.Result := 1; // Mark message as taken care of
      end;
      ...
      // Trigger OnMouseLeave event if any assigned
      procedure TMouseButton.CMMouseLeave(var Message: TMessage);
      begin
        if Assigned(fMouseOut) then
          OnMouseOut(Self);
        Message.Result := 1; // Mark message as taken care of
      end;