Программирование на Delphi - обмен опытом / Работа с мышью

© Зайцев Олег 1998-2004
Лучшая портативная техника. Плееры Камеры Телефоны Компьютеры
Покупателям, пришедшим на www.porta.ru по этой ссылке - дополнительная скидка 1%
Железо | Система | WEB | Компоненты | Графика | Ссылки | Мультимедиа | Сети | Прочее | Реестр | Литература

Статистика

Работа с мышью

Рекомендую:
Главная страница \ Железо \ Работа с мышью

  • Работа с мышью

    Работа с мышью

    Управление видимостью указателя мыши * * Задать вопрос Наверх
    Глобальное управление видимостью указателя мыши в пределах окон приложения производится посредством функции 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 возвращает систму в исходное состояное.
    Возвращаемые значения


    Примечание
    Данная настройка обычно производится из апплета "клавиатура" панели управления, изменять данную настройку из программы не рекомендуется

    Как узнать, включен ли режим обмены назначения кнопок мыши * * Задать вопрос Наверх
    GetSystemMetrics(SM_SWAPBUTTON)


    © Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru