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

Вниз

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

 
Unit1   (2005-09-07 17:47) [0]

Уважаемые Мастера, подскажите как организовать выполнение какого-либо действия при попадении мыши в некоторую область экрана?


 
Digitman ©   (2005-09-07 17:51) [1]

что считать "экраном" ?


 
Unit1   (2005-09-07 19:41) [2]

2 Digitman ©:
Область вне окна программы.


 
Digitman ©   (2005-09-08 08:11) [3]

ставь глоб.хук WH_LL_MOUSE


 
Unit1   (2005-09-08 20:27) [4]

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


 
Quadro   (2005-09-08 20:46) [5]

может быть CM_MOUSELEAVE для формы??


 
Digitman ©   (2005-09-09 08:09) [6]


> они тормозят


значит что-то не так делаешь


>  окно активно, а мышь вылазит за его пределы


ЧЬЁ окно ? твоего приложения ? или чужого ?


 
Unit1   (2005-09-10 13:09) [7]

2 Digitman
Моего приложения.


 
Grief ©   (2005-09-10 21:58) [8]

тогда ставишь таймер в 1 и GetCursorPos - просто сделать и тормозить будет тока когда окно активно. Конечно, как было уже сказано - хуки не тормозят в принципе ,если не поставлены на все. Однако это другая история.


 
Nick Denry ©   (2005-09-12 13:29) [9]

Ели твое приложеие, и процедура главного окна, то использовать сообщение собственно WM_MOUSEMOVE:

 
WndProc
....
         
var
    tme : TTrackMouseEvent;
........
WM_MOUSEMOVE:
            begin
               if Wparam <> MK_LBUTTON {не нажата левая к. мыши}        
               then begin
                    SetProp(BtnWnd, szMouseState, msOver);                              
                    RedrawWindow(BtnWnd,0,0,RDW_INVALIDATE);
                               with tme do begin
                                 cbSize := SizeOf(tme);
                                 dwFlags := TME_LEAVE;
                                 hwndTrack := BtnWnd;
                                 dwHoverTime := HOVER_DEFAULT;
                               end;
                    TrackMouseEvent(tme);
                     end;
                end;


таким образом TrackMouseEvent(tme); позволяет отследит и уход мыши на

 WM_MOUSELEAVE:
                          begin
                             SetProp(BtnWnd, szMouseState, msUp);
                             RedrawWindow(BtnWnd,0,0,RDW_INVALIDATE);
                  {TrackMouseEvent(tme); WM_MOUSEHOVER}
                          end;


TrackMouseEvent(tme) срабатыавет один раз,после чего нужно снова вызвать TrackMouseEvent(tme), если требуетяс и далее отслеживать событие в обработчике этого эвента;


Если речь идет о каком либо элементе управления (кнопка, статик и т.д.), то либо необходимо саб(супер)классировать этот элемент, либо написать свой контрол на основе окна, имитирующий данный элемент.


 
Nick Denry ©   (2005-09-12 13:31) [10]

Grief ©   (10.09.05 21:58) [8]

таймер в один - это перебор, обычно достаточно 250 или даже 400 :)


 
Unit1   (2005-09-13 01:06) [11]

2 Nick Denry:

прошу порщения, а что из себя представляют szMouseState, msOver - на них я получаю ошибку (они не идентифицируются) при компиляции.

P.S. Спасибо за код.


 
Nick Denry ©   (2005-09-13 13:11) [12]

Unit1   (13.09.05 01:06) [11]

Это мои переменные для усатновки свойства (поля) окну.

Подробнее см. функцию SetProp;

Я не думаю, что функция SetProp(BtnWnd, szMouseState, msOver) вам будет нужна  - это просто пример кода,

{(конкретнее - установка в поле окна szMouseState = "MouseState" текущего состояния мыши (Up, Down, Over) и последующая отрисовка контрола в сообщении WM_PAINT)}

т.е. како либо действие, которое вы можете выполнить на это сообщение.

И вообще - я так понимаю речь идет о перерисовке состояний или все-таки нет?



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
14-1129805685
tayim
2005-10-20 14:54
2005.11.13
установка BDE


4-1126700173
XGarik
2005-09-14 16:16
2005.11.13
Копирование данных с ПК на КПК


14-1129731129
oldman
2005-10-19 18:12
2005.11.13
Вот такая вот задачка по физике :)))


3-1128229447
Alexx2004
2005-10-02 09:04
2005.11.13
Сортировка в Dbgrid


9-1119805079
wiz
2005-06-26 20:57
2005.11.13
Rust! новая демка