![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnMouseEnter [D5, WinXP]
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]Спасибо
НО можно немного подробнее?
Заранее спасибо