OpenGL в Delphi

       

Работа с мышью и клавиатурой


Как обработать двойной щелчок левой кнопки мыши, опираясь на сообщения, мы рассмотрели выше в разделе "Перехват сообщений" данной главы. Проект из подкаталога Exl8 является примером на обработку остальных сообщений, связанных с мышью. При нажатой левой кнопки мыши за указателем остается след. Оконная функция дополнилась обработчиками сообщений wm_LButtonDown, wm_LButtonUp И wm_MouseMove Для определения координат курсора пользуемся тем, что поле iParam подобных сообщений содержит эти самые координаты.

Down: = not Down;
wm_Create: Down: = False;
wm_LButtonDown, wm_LButtonUp
wm_MouseMove: begin
If Down then begin xpos: = LoWord ( LParam);
ypos: = HiWord ( LParam);
InvalidateRect(Window, nil, False);
end;
end;
wm_Paint: begin
If Down then begin
dc: = BeginPaint (Window, MyPaint);
Ellipse (dc, xPos, yPos, xPos + 2, yPos + 2);
EndPaint (Window, MyPaint);
ReleaseDC (Window, dc);
end;
end;

Обратите внимание, что здесь при движении мыши с удерживаемой кнопкой окно перерисовывается точно так же, как и в предыдущем примере с таймером.
Последнее, что мы рассмотрим в данном разделе и что обязательно потребуется в дальнейшем - это обработка клавиатуры.
Как обычно, обратимся к несложной иллюстрации - проекту из подкаталога Exl9 Оконная функция дополнилась обработчиком соответствующего сообщения"

wm_Char: // анализ нажатой клавиши
case wParam of
$58, $78: If HiWord {GetKeyState (vk_Shift)) = 0 { Shift }
then MessageBox(Window, 'X', 'Нажата клавиша', MB_OK)
else MessageBox(Window, 'X вместе с Shift', 'Нажата клавиша', MB_OK);
end; // wm char

При нажатии клавиши 'X' выводится сообщение, в котором указано, нажата ли одновременно клавиша <Shift>. Я использовал шестнадцатеричное представление кода клавиши, но, конечно, можно использовать и десятичное. Надеюсь, здесь не требуются особые пояснения, и мы сможем использовать этот код в качестве шаблона в будущих проектах.



Содержание раздела