БОЛЬШОЙ FAQ ПО DELPHI



Определить когда мышь над компонентом, а когда она ушла с него


Купил мужик мышь для компа оптическую. Круто! В руководстве написано - работает на любой поверхности. Повозил по столу - работает! ...по бумаге - работает! ...по линолеуму - работает! Что бы ещё попробовать? По ЗЕРКАЛУ!!! - "Обнаружено новое устройство..."

Для того, чтобы определить когда мышь над компонентом, в данном примере это будет панель, мы создадим новый класс, который будет являться потомком класса TPanel, и будет обрабатывать некоторые необходимые нам для данной задачи сообщения Windows.

Для этого определим следующим образом новый тип:


 type
   TMyPanel=class(TPanel)
   public
     procedure CMMouseEnter (var message: TMessage); message CM_MOUSEENTER;
     procedure CMMouseLeave (var message: TMessage); message CM_MOUSELEAVE;
 end;
 

Называться наш новый класс будет TMyPanel. Определить его можете до определение класса формы, т.е. сразу после директивы uses.

После объявления экземпляра формы нужно объявить экземпляр нашего нового класса:


 var
   Form1: TForm1;
   MyPanel1: TMyPanel;
 

В разделе implemetation обрабатываем несколько сообщения, именно этими обработчиками наш класс и будет отличаться от класса стандартной панели.


 procedure TMyPanel.CMMouseEnter (var message: TMessage);
 begin
   Form1.Label1.Caption:='Мышь на панели';
 end;
 
 procedure TMyPanel.CMMouseLEAVE (var message: TMessage);
 begin
   Form1.Label1.Caption:='Мышь вне панели';
 end;
 

По созданию окна создаём экземпляр нашего класса:


 procedure TForm1.FormCreate(Sender: TObject);
 begin
   MyPanel1 := TMyPanel.Create(self);
   with MyPanel1 do
   begin
     Parent := Form1;
     Visible := True;
     Left := 100;
     Top := 100;
   end;
 end;
 

По уничтожению окна, соответственно, - уничтожаем:


 procedure TForm1.FormDestroy(Sender: TObject);
 begin
   MyPanel1.Destroy;
 end;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ