Форум: "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.036 c