Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

OnMouseEnter   Найти похожие ветки 

 
Justas   (2004-06-10 13:11) [0]

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


 
Clickmaker ©   (2004-06-10 13:30) [1]

Подменяешь WindowProc или пишешь наследника
Там ловишь сообщения
CM_MOUSEENTER
CM_MOUSELEAVE


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

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


 
Clickmaker ©   (2004-06-10 13:36) [3]

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:39) [4]

Спасибо


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

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


 
jack128 ©   (2004-06-10 20:44) [6]

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 22:52) [7]


> jack128

Спасибо!


 
RealRascal ©   (2004-06-10 22:55) [8]

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


 
jack128 ©   (2004-06-10 23:08) [9]


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


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


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

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


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


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


 
NAlexey ©   (2004-06-11 08:29) [12]

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


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

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


...
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 10:01) [14]

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


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

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


 
NAlexey ©   (2004-06-11 13:46) [16]

Есть - TLabel.


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


> NAlexey

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


 
NAlexey ©   (2004-06-11 14:59) [18]

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


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


> NAlexey

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

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


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

2 Justas:

Компонент TezRgnBtn.


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


> KraksPaks

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
3-1085649589
Tormoz
2004-05-27 13:19
2004.06.27
Потеря памяти при работе с БД


1-1087188290
nitro
2004-06-14 08:44
2004.06.27
Помогите! Image становится белым цветом при рисовании?!


14-1086797011
karlsn
2004-06-09 20:03
2004.06.27
подкиньте ссылочку!


14-1086857820
Ded Moroz
2004-06-10 12:57
2004.06.27
Теория по HDD


14-1086856930
Apocalepse
2004-06-10 12:42
2004.06.27
Опять удалили