Все потомки TComponent могут посылать сообщения CM_MOUSEENTER и CM_MOUSELEAVE во время вхождения и покидания курсора мыши области компонента. Если вам необходимо, чтобы ваши компоненты обладали реакцией на эти события, необходио написать для них соответствующие обработчики.

Code:

procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;

procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;

..

..

..

procedure MyComponent.CMMouseEnter(var msg:TMessage);

begin

 

inherited;

{действия на вход мыши в область компонента}

end;

 

procedure MyComponent.CMMouseLeave(var msg: TMessage);

begin

 

inherited;

{действия на покидание мыши области компонента}

end;

 

 

 

 

Дополнение

 

Часто приходится сталкиваться с ситуацией, когда необходимо обработать два важных события для визуальных компонентов:

 

MouseEnter - когда событие мыши входит в пределы визуального компонента;

MouseLeave - когда событие мыши оставляет его пределы.

Известно, что все Delphi объявляет эти сообщения в виде:

Cm_MouseEnter;

Cm_MouseLeave.

Т.е. все визуальные компоненты, которые порождены от TControl, могут отлавливать эти события. Следующий пример показывает как создать наследника от TLabel и добавить два необходимых события OnMouseLeave и OnMouseEnter.

 

Code:

(*///////////////////////////////////////////////////////*)

(*// Author: Briculski Serge

(*// E-Mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

(*// Date: 26 Apr 2000

(*///////////////////////////////////////////////////////*)

 

unit BS_Label;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

 

type

TBS_Label = class(TLabel)

private

   { Private declarations }

   FOnMouseLeave: TNotifyEvent;

   FOnMouseEnter: TNotifyEvent;

   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 }

   property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;

   property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;

end;

 

procedure Register;

 

implementation

 

procedure Register;

begin

RegisterComponents('Custom', [TBS_Label]);

end;

 

{ TBS_Label }

 

procedure TBS_Label.CMMouseEnter(var Message: TMessage);

begin

if Assigned(FOnMouseEnter) then

   FOnMouseEnter(Self);

end;

 

procedure TBS_Label.CMMouseLeave(var Message: TMessage);

begin

if Assigned(FOnMouseLeave) then

   FOnMouseLeave(Self);

end;

 

end.

 

Ранние статьи