Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c