Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnMouseEnter [D5, WinXP]


Страницы:   1 2

Justas ©   (2004-06-10 13:11:00) 

Привет всем.
ПОдскажите, как создать что-то типа событий OnMouseEnter и On MouseLeave или хотя бы отследить, когда курсор входит и покидает область компонента?
Заранее спасибо


Justas   (2004-06-11 15:26:00) [1]


> KraksPaks

Спасибо!


KraksPaks   (2004-06-11 15:22:00) [2]

2 Justas:

Компонент TezRgnBtn.


Justas   (2004-06-11 15:05:00) [3]


> NAlexey

я имел ввиду компонент, который умеет делать то, что я хотел сделать.

А за код всем большое спасибо. Все работает для нескольких картинок. НО если их больше 15 - то начинает подтормаживать, не знаю почему..возможно только у меня :)


NAlexey   (2004-06-11 14:59:00) [4]

>Justas   (11.06.04 14:50) [17]
Тебе уже предложили множество способов. Или не так? Ты всеравно спрашиваешь, есть ли какой либо компонент обрабатывающий эти события. Я тебе говорю что есть такие. Один из них TLabel. Что тебя не устраивает?


Justas   (2004-06-11 14:50:00) [5]


> NAlexey

зачем мне TLabel?? Я же гвоорю, что я хочу сделать. На форме есть 2 элемента TImage, один видимый, другой нет. Когда мышь находится над Image1, то Image2 должен становиться видимым, а когда мышь покидает Image1, то снова невидимым


NAlexey   (2004-06-11 13:46:00) [6]

Есть - TLabel.


Justas   (2004-06-11 13:12:00) [7]

а может есть компонент какой-нибудь?


NAlexey   (2004-06-11 10:01:00) [8]

Ну... Можно еще использовать WM_MOUSEHOVER и WM_MOUSELEAVE.


Udjin   (2004-06-11 09:38:00) [9]

ИМХО лучше наследника сделать. Например так.


...
type
...
TMyImage = class (TImage)
 protected
  procedure CmMouseEnter (var Msg : TMessage);message                 CM_MOUSEENTER;
  procedure CmMouseLeave (var Msg : TMessage);message                 CM_MOUSELEAVE;
end;
...
implementation
...
procedure TMyImage.CmMouseEnter(var Msg : TMessage);
begin
 // твой код
end;

procedure TMyImage.CmMouseLeave(var Msg: TMessage);
begin
 // твой код
end;


NAlexey   (2004-06-11 08:29:00) [10]

>jack128 ©   (10.06.04 20:44) [6]
Единственное что, это не будет работать если у кнопки Parent не форма...


jack128   (2004-06-10 23:27:00) [11]


> дык на аналогичное событие формы тоже обработчик повесить
> можно
и анализировать с кокого же из пары десятков контролов пришла мышь.. Оно надо, если есть проверенный способ?


RealRascal   (2004-06-10 23:11:00) [12]


> нет, не проще. С имитировать OnMouseEnter таким образом
> еще можно, а вот OnMouseLeave - это уже нетривиальная задача
> и одним обработчиком тут не обойдешся..

дык на аналогичное событие формы тоже обработчик повесить можно


jack128   (2004-06-10 23:08:00) [13]


> а не проще навесить обработчик на уже имеющееся стандартное
> событие onMouseMove?
нет, не проще. С имитировать OnMouseEnter таким образом еще можно, а вот OnMouseLeave - это уже нетривиальная задача и одним обработчиком тут не обойдешся..


RealRascal   (2004-06-10 22:55:00) [14]

а не проще навесить обработчик на уже имеющееся стандартное событие onMouseMove?


Justas   (2004-06-10 22:52:00) [15]


> jack128

Спасибо!


jack128   (2004-06-10 20:44:00) [16]

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   LogMemo: TMemo;
 private
   { Private declarations }
   procedure CmMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
   procedure CmMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CmMouseEnter(var Message: TMessage);
begin
 if  Message.lParam = 0 then
   LogMemo.Lines.Add(Name + ' enter')
 else
   LogMemo.Lines.Add(TComponent(Message.lParam).Name + ' enter');
end;

procedure TForm1.CmMouseLeave(var Message: TMessage);
begin
 if  Message.lParam = 0 then
    LogMemo.Lines.Add(Name + ' leave')
 else
   LogMemo.Lines.Add(TComponent(Message.lParam).Name + ' leave');
end;


Justas   (2004-06-10 19:46:00) [17]

Что-то ничего у меня не выходит :(
Что мне хочется сделать - есть картинка, которая по сути является кнопкой, когда мышь оказывается над ней, то надо подменить картинку, чтобы кнопка оказалось подсвеченной..как это можно реализовать?


Justas   (2004-06-10 13:39:00) [18]

Спасибо


Clickmaker   (2004-06-10 13:36:00) [19]

FOldProc := WinControl.WindowProc;
WinControl.WindowProc := NewProc;

...

procedure TForm1.NewProc(var Message: TMessage);
begin
 FOldProc(Message);
 if (Message.Msg = CM_MOUSEENTER) then begin
   // твой код здесь
 end;
end;


Justas   (2004-06-10 13:33:00) [20]

Спасибо
НО можно немного подробнее?
Заранее спасибо


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо