Работа с мышью Работа с мышью
Управление видимостью указателя мыши |
*
| *
|
| |
Глобальное управление видимостью указателя мыши в пределах окон приложения
производится посредством функции API ShowCursor(Visible : boolean):integer;
Если в качестве параметра указать false, то курсор исчезает с экрана. Подобный
вызов удобен для показа полноэкранных презентаций, написании ScreenSaver-ов.
При каждом вызове ShowCursor производится инкремент (параметр = true) или
декремент (параметр = false) внутренного счетчика, знак которого и определяет
видимость курсора. Новое значение счетчика возвращается при каждом вызове.
Установка области перемещения указателя мыши |
*
| *
|
| |
Установка области перемещения указателя мыши производится при помощи функции
API
function ClipCursor(lpRect : PRect):boolean;
lpRect - указатель на TRect, определяющий разрешенную область перемещения.
Курсор мыши не может покинуть заданную зону до отмены режима, который
производится вызовом ClipCursor с параметром NULL (0).
Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
R : TRect;
begin
// Определяем область (координаты абсолютные)
R := Rect(10,10,50,50);
// Устанавливаем
ClipCursor(@R);
// Пауза на 10 сек.
Sleep(10000);
// Отменяем
ClipCursor(0);
end;
Данной функцией следует пользоваться очень осторожно, т.к. блокировка курсора в
заданной области действует до момента вызова ClipCursor(0); Если приложение
зависнет, то пользователь не сможет нормально работать с мышкой. Диапазон
анулируется при нажатии CTRL+ALT+DEL
Определение и установка позиции указателя мыши. |
*
| *
|
| |
Для работы с указателем мыши предусмотрено две функции API
function GetCursorPos(lpPoint : TPoint):boolean;
Данная функция возвращает абсолютные экранные координаты указателя мыши. Если
вызов функции пошел успешно, то возвращается true
function SetCursorPos(X,Y : Integer):boolean;
Данная функция устанавливает абсолютные экранные координаты указателя мыши. Если
вызов функции пошел успешно, то возвращается true
При помощи SetCursorPos можно блокировать работу с мышкой посредством вызова
SetCursorPos(-1,-1) в цикле с маленьким интервалом. Например:
repeat
SetCursorPos(10000,10000);
Application.ProcessMessages;
until false;
Определение количества кнопок мыши |
*
| *
|
| |
Для определения количества кнопок мыши необходимо вызвать функцию
API GetSystemMetrics() с параметром SM_CMOUSEBUTTONS
Пример:
MouseButtonsCount := GetSystemMetrics(SM_CMOUSEBUTTONS);
Проверка, есть ли в системе мышь |
*
| *
|
| |
Для проверки, установлена ли в системе мышь, необходимо вызвать GetSystemMetrics() с
параметром SM_MOUSEPRESENT:
var
MousePresent : boolean;
... ... ...
MousePresent := GetSystemMetrics(SM_MOUSEPRESENT) > 0;
Проверка, есть ли у мыши колесико (Mouse Wheel) |
*
| NT/W2k
|
| |
Для проверки, установлена ли в системе мышь с колесиком (типа Microsoft Intelli Mouse)
необходимо вызвать GetSystemMetrics() с параметром SM_MOUSEWHEELPRESENT:
var
MouseWheelPresent : boolean;
... ... ...
MouseWheelPresent := GetSystemMetrics(SM_MOUSEWHEELPRESENT) > 0;
Примечание: работа этого вызова под W9* не гарантируется (вероятно, зависит от
драйвера мыши). В справке Borland сказано, что работает только под NT. Я лично
проверил - точно работает под W2K
Проверка режима работы мыши: для левши или для правши |
*
| *
|
| |
Для проверки, включен ли режим работы мыши "для левши" (в этом режиме
левая и правая кнопки меняют свое назначение) необходимо вызвать
GetSystemMetrics() с параметром SM_SWAPBUTTON:
var
MouseButtonsSwap : boolean;
... ... ...
MouseButtonsSwap := GetSystemMetrics(SM_SWAPBUTTON) > 0;
Если MouseButtonsSwap = true, то включен режим "для левши"
Управление временем между щелчками, воспринимаемыми как двойной |
*
| *
|
| |
Для получения времени между щелчками, которые воспринимаются как двойной
щелчек необходимо вызвать функцию API GetDoubleClickTime. Она возвратит время в
мс.
Для установки своего значения времени нужно вызвать SetDoubleClickTime(время).
Пример:
Caption := IntToStr(GetDoubleClickTime);
Примечание
Данная настройка обычно производится из апплета "клавиатура" панели
управления, изменять данную настройку из программы не рекомендуется
Как поменять местами функции клавиш мыши |
*
| *
|
| |
Для того, чтобы поменять назначение левой и правой клавиши мыши
(относительно текущей настройки) применяется функция API:
function SwapMouseButton(fSwap: BOOL): BOOL;
Вызов данной функции с параметром true приводит к тому, что при нажатии левой
кнопки мыши генерируется сообщение с указание, что нажата правая (и наоборот).
Вызов функции с параметром false возвращает систму в исходное состояное.
Возвращаемые значения
- false - если назначение клавиш мыши не было инвертировано на момент вызова функции
- true - если назначение клавиш мыши было инвертировано на момент вызова функции
Примечание
Данная настройка обычно производится из апплета "клавиатура" панели
управления, изменять данную настройку из программы не рекомендуется
Как узнать, включен ли режим обмены назначения кнопок мыши |
*
| *
|
| |
GetSystemMetrics(SM_SWAPBUTTON)
© Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта
необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru