Читать книгу Delphi. Трюки и эффекты - Александр Чиртик - Страница 36
Глава 3
Мышь и клавиатура
3.1. Мышь
Ограничение перемещения указателя
ОглавлениеПри помощи несложных манипуляций можно также ограничить перемещение указателя мыши определенной областью экрана (прямоугольником). Для этого используется API-функция ClipCursor. Она принимает в качестве параметра структуру TRect с координатами прямоугольника, в пределах которого может перемещаться указатель, и в случае успешной установки ограничения возвращает отличное от нуля значение.
С ClipCursor тесно связана функция GetClipCursor, позволяющая получить координаты прямоугольника, которым в данный момент ограничено перемещение указателя.
Использование функций ClipCursor и GetClipCursor приведено в листинге 3.6.
Листинг 3.6. Ограничение перемещения указателя
var
lastRect: TRect;
cursorClipped: Boolean = False;
procedure SetCursorRect(newRect: TRect);
begin
if not cursorClipped then
begin
//Сохраняем старую область перемещения указателя
GetClipCursor(lastRect);
//Устанавливаем ограничение на перемещения указателя
cursorClipped := ClipCursor(Addr(newRect)) <> False;
end;
end;
procedure RestoreCursorRect();
begin
if cursorClipped then
begin
//Восстанавливаем область перемещения указателя
cursorClipped := ClipCursor(Addr(lastRect)) = False;
end;
end;
Здесь реализована пара процедур, первая из которых (SetCursorRect) ограничивает перемещение указателя мыши заданной областью экрана (параметр newRect). Перед ограничением на перемещение указателя в процедуре SetCursorRect происходит сохранение области перемещения, установленной ранее, чтобы действие процедуры можно было отменить. Для отмены ограничения перемещения указателя служит вторая процедура – RestoreCursorRect.
Примечание
Вообще, задание ограничения на перемещение указателя мыши не считается хорошим тоном. Потому для использования такой возможности в реальном приложении должны быть действительно веские причины.