![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WM_MOUSEMOVE [D5, Win95/98, WinXP]
Unit1 © (2005-09-07 17:47:00)Уважаемые Мастера, подскажите как организовать выполнение какого-либо действия при попадении мыши в некоторую область экрана?
Nick Denry (2005-09-13 13:11:00) [1]Unit1 (13.09.05 01:06) [11]
Это мои переменные для усатновки свойства (поля) окну.
Подробнее см. функцию SetProp;
Я не думаю, что функция SetProp(BtnWnd, szMouseState, msOver) вам будет нужна - это просто пример кода,
{(конкретнее - установка в поле окна szMouseState = 'MouseState' текущего состояния мыши (Up, Down, Over) и последующая отрисовка контрола в сообщении WM_PAINT)}
т.е. како либо действие, которое вы можете выполнить на это сообщение.
И вообще - я так понимаю речь идет о перерисовке состояний или все-таки нет?
Unit1 (2005-09-13 01:06:00) [2]2 Nick Denry:
прошу порщения, а что из себя представляют szMouseState, msOver - на них я получаю ошибку (они не идентифицируются) при компиляции.
P.S. Спасибо за код.
Nick Denry (2005-09-12 13:31:00) [3]Grief © (10.09.05 21:58) [8]
таймер в один - это перебор, обычно достаточно 250 или даже 400 :)
Nick Denry (2005-09-12 13:29:00) [4]Ели твое приложеие, и процедура главного окна, то использовать сообщение собственно 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), если требуетяс и далее отслеживать событие в обработчике этого эвента;
Если речь идет о каком либо элементе управления (кнопка, статик и т.д.), то либо необходимо саб(супер)классировать этот элемент, либо написать свой контрол на основе окна, имитирующий данный элемент.
Grief (2005-09-10 21:58:00) [5]тогда ставишь таймер в 1 и GetCursorPos - просто сделать и тормозить будет тока когда окно активно. Конечно, как было уже сказано - хуки не тормозят в принципе ,если не поставлены на все. Однако это другая история.
Unit1 (2005-09-10 13:09:00) [6]2 Digitman
Моего приложения.
Digitman (2005-09-09 08:09:00) [7]
> они тормозят
значит что-то не так делаешь
> окно активно, а мышь вылазит за его пределы
ЧЬЁ окно ? твоего приложения ? или чужого ?
Quadro (2005-09-08 20:46:00) [8]может быть CM_MOUSELEAVE для формы??
Unit1 (2005-09-08 20:27:00) [9]А можно как-то без хуков - они тормозят. Кроме того меня интересует только случай, когда окно активно, а мышь вылазит за его пределы.
Digitman (2005-09-08 08:11:00) [10]ставь глоб.хук WH_LL_MOUSE
Unit1 (2005-09-07 19:41:00) [11]2 Digitman ©:
Область вне окна программы.
Digitman (2005-09-07 17:51:00) [12]что считать "экраном" ?