Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.03 c
4-1084893032
Sanek_metaller
2004-05-18 19:10
2004.06.27
GetNextWindow()


8-1081886605
Юрий
2004-04-14 00:03
2004.06.27
JPEG ?! "низкоуровневый"


1-1086797154
td
2004-06-09 20:05
2004.06.27
про WordApplication


3-1085980430
Yuri_V
2004-05-31 09:13
2004.06.27
Как организовать "Поиск далее " в локальной базе данных


3-1086094755
Balu
2004-06-01 16:59
2004.06.27
Вставка новой записи в базу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский