Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > OnMouseEnter & OnMouseLeave


Автор: santilaas 11.11.2007, 15:50
Привет всем!
Проблема в следующем:
есть форма, на ней друг за другом (с выравниванием по верху) расположены панели (цвета clMenu).
Как сделать, чтобы при попадании курсора мыши в область любой панели, её цвет менялся (скажем, на clRed), при убирании курсора с панели, цвет панели восстанавливался?
Вроде как нужно воспользоваться процедурами:
Код

private
   { Private declarations }
   procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
...
procedure TFPopup.CMMouseEnter(var msg: TMessage);
begin
   inherited; 
   FPopup.FlatPanel1.Color:= clRed;
end;

procedure TFPopup.CMMouseLeave(var msg: TMessage);
begin
   inherited;
   FPopup.FlatPanel1.Color:= clMenu;
end;
 
- этот пример работает для формы (если курсор входит в пределы формы и покидает их), притом здесь есть недостаток - 
1) если курсор уходит с формы, например, на другую форму этого же приложения, 
то все работает, если же уходит в другую область - не срабатывает - в чем тут дело?
2) как эти процедуры, если действительно они и нужны, прикрутить в моем случае (именно для панелей)?
Заранее спасибо!

Автор: ivan219 11.11.2007, 21:05
Если есть стандартные обработчики:
Код

procedure TForm1.MouseEnter(Sender: TObject);
begin
 Sender.Color:= clRed;
end;

procedure TForm1.MouseLeave(Sender: TObject);
begin
 Sender.Color:= clMenu;
end;

и присвой их всем панелям.

Автор: Alexeis 12.11.2007, 00:52
ivan219, они есть не во всех делфях.

Автор: santilaas 12.11.2007, 05:50
так как быть?

Автор: Alexeis 12.11.2007, 11:54
  Проще поставить Delphi 2007, а надежное решение я делал только на таймере. Т.е. как только мышь в пределах запускаю таймер и по таймеру проверяю, находиться ли она в пределах компонента. 

Автор: ivan219 12.11.2007, 11:56
Цитата(Alexeis @  12.11.2007,  00:52 Найти цитируемый пост)
ivan219, они есть не во всех делфях.

Странно, а начиная с какой Delphi они есть?
Цитата(santilaas @  12.11.2007,  05:50 Найти цитируемый пост)
так как быть?

santilaas, если у тебя нет тогда можно свой компонент на его основе сделать где они будут.
 

Автор: ama_kid 12.11.2007, 14:38
santilaas, посмотри аттач - я попробовал накидать тестовое приложение, может почерпнешь что полезное...

Автор: Alexeis 12.11.2007, 14:43
Цитата(ivan219 @  12.11.2007,  11:56 Найти цитируемый пост)
Странно, а начиная с какой Delphi они есть?

Появились в Delphi X, где Delphi X определяется соотношением Delphi 7 < Delphi X <= Delphi 2006  smile 

Автор: ivan219 13.11.2007, 00:45
santilaas, так реч идёт про обычную панель TPanel ???

Автор: ivan219 13.11.2007, 01:00
Если это TPanel то в архиве продвинутый вареант ставится как компонент.

Автор: ivan219 13.11.2007, 01:03
В него добавленны события: OnMouseLeave, OnMouseEnter, OnPaint также имеется доступ к Canvas.

Автор: santilaas 20.11.2007, 02:29
ama_kid,  ivan219 - спасибо Вам за помощь - отличные пример и компонент 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)