Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизЗдраствуйте ещё раз... ! На тему SetCapture... И определения Найти похожие ветки
← →
EugenCFG (2003-12-23 22:32) [0]координат мыши в любом месте экрана. function SetCapture(Wnd: HWnd); HWnd;
Уже прекрасно понимаю как определить координаты на форме и в области non client. Но каким образом состыковать эту функцию с внешним миром? Т.е. при перемещении мыши по области рабочего стола хотелось бы получить координаты от верхнего левого угла. (Какой-нибудь Label на форме отображает реальные координаты курсора, где бы он не находился).
Самые главный вопрос это на какое событие? FormMouseMove, указанный в событиях формы не подходит.
Надо ловить сообщения от мышки? Пробовал. Максимально, что подходит из найденного это WM_NCHITTEST. Перемещение мыши в любом месте экрана). Это сообщение генерируется драйвером мыши при любых перемещениях мыши. Период возникновения сообщений WM_NCHITTEST зависит от скорости перемещения мыши, параметров драйвера и т.д. Но оно как оказалось не поможет... потому что сообщение WM_NCHITTEST, обычно передается функции DefWindowProc. Получив это сообщение, функция DefWindowProc определяет положение курсора мыши относительно расположенных на экране объектов и возвращает только то, что связанно с формой.
Есть такое сообщение от мышки WM_NCHITTEST (Перемещение мыши в любом месте экрана). Это сообщение генерируется драйвером мыши при любых перемещениях мыши. Период возникновения сообщений WM_NCHITTEST зависит от скорости перемещения мыши, параметров драйвера и т.д. Но оно как оказалось не поможет...
Мастера, помогите... а то уже и не знаю, что делать.
← →
alex-drob (2003-12-23 22:55) [1]var p:tpoint;
begin
windows.GetCursorPos(p);
label1.Caption:=inttostr(p.X);
end;
← →
Юрий Зотов (2003-12-23 23:11) [2]Боюсь, что SetCapture здесь не поможет. Вот почему (из описания SetCapture):
If the mouse cursor is over a window created by another thread , the system will direct mouse input to the specified window only if a mouse button is down .
Only the foreground window can capture the mouse. When a background window attempts to do so , the window receives messages only for mouse events that occur when the cursor hot spot is within the visible portion of the window . Also, even if the foreground window has captured the mouse, the user can still click another window, bringing it to the foreground.
А вот что ТОЧНО поможет - так это глобальный хук на мышь с отловом WM_MOUSEMOVE или WM_SETCURSOR.
См. SetWindowsHookEx и ( обязательно! ) статью Алексея Павлова на этом сайте.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c