Если Вы когда-нибудь создавали визуальные компоненты, Вы вероятно хотели знать, когда мышь находится над компонентом. Это намного легче, чем Вы можете предположить, используя справку Delphi. Есть два основных сообщения Windows, которые Вы должны использовать: CM_MOUSEENTER и 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;
{ ... }
// Вызываем OnMouseEnter если что-то назначено
procedure TMouseButton.CMMouseEnter(var Message: TMessage);
begin
if Assigned(fMouseOver) then
OnMouseOver(Self);
Message.Result := 1; // Отмечаем сообщение
end;
{ ... }
// Вызываем OnMouseLeave если что-то назначено
procedure TMouseButton.CMMouseLeave(var Message: TMessage);
begin
if Assigned(fMouseOut) then
OnMouseOut(Self);
Message.Result := 1; // Отмечаем сообщение
end;
Комментарии