Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.041 c
3-1128368821
ALEX_T
2005-10-03 23:47
2005.11.13
Многопользоватльская прога


2-1129560830
Yurij-7
2005-10-17 18:53
2005.11.13
Аутентификация на локальных базах


14-1129897610
X9
2005-10-21 16:26
2005.11.13
Глючит комп


1-1130065186
Smarty
2005-10-23 14:59
2005.11.13
Помогите с Invalid floating point operation!!


14-1129816274
flipper
2005-10-20 17:51
2005.11.13
Никто не может зайти в компик (хр)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский