Изменение назначения кнопок мыши
Как известно, операционная система Windows дает возможность работать за компьютером широкому кругу людей. Со стороны разработчиков было бы глупо не предусмотреть возможность простой адаптации манипулятора «мышь» к правше или левше. К тому же мышь адаптировать к таким различиям намного проще: конструкцию изменять не надо, достаточно программно поменять функции кнопок мыши.
Как поменять функции левой и правой кнопок мыши, демонстрирует листинг 3.7.
procedure TForm1.Button1Click(Sender: TObject);
begin
//Меняем местами функции левой и правой кнопок мыши
SwapMouseButton(True);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//Восстанавливаем функции кнопок мыши
SwapMouseButton(False);
end;
В листинге 3.7 не учитывается тот факт, что инверсия мыши уже может быть установлена при запуске программы (например, если за компьютером работает левша). Чтобы точно знать, была ли ранее применена инверсия к кнопкам мыши, можно использовать значение, возвращаемое функцией SwapMouseButton. Если это значение отлично от нуля, то ранее функции кнопок мыши были инвертированы.
Подсчет расстояния, пройденного указателем мыши
Рассмотрим небольшую программу, которая носит скорее познавательный, чем практический характер. Она умеет подсчитывать, сколько же метров (в буквальном смысле) пробегает указатель мыши за время ее работы. Внешний вид формы приложения показан на рис. 3.1.
Рис. 3.1. Программа измерения пробега указателя мыши
Использование такой программы крайне просто: сразу после запуска она начинает измерять пройденное указателем мыши расстояние в пикселах. Нижняя группа элементов управления нужна для правильного вывода пройденного расстояния в метрах. При нажатии кнопки Изменить масштаб становятся активными два текстовых поля (для ввода ширины и высоты прямоугольника). Чтобы программа правильно преобразовывала пройденное расстояние, нужно линейкой измерить ширину белого прямоугольника и ввести полученное значение (в мм) в текстовое поле. При повторном нажатии этой кнопкивведенные значения принимаются, и с этого момента показания пройденного расстояния переводятся в метры с учетом текущего разрешения и размера монитора.
Теперь приступим к рассмотрению реализации этого приложения. В табл. 3.1 приводятся сведения по настройке элементов управления, не являющихся рамками или статическими надписями.
В листинге 3.8 приводятся объявления переменных (членов класса TForml) и методов, добавленных вручную.
type
TForm1 = class(TForm)
…
private
isUpdating: Boolean; //Если равен False, то показания
//в txtDistance
//не обновляются
lastPos: TPoint; //Координаты указателя во время
//прошлого замера
distance: Real; //Пройденное расстояние в пикселах
procedure StartUpdating();
procedure StopUpdating();
procedure ShowDistance();
end;
Суммарное расстояние в пикселах, пройденное указателем, сохраняется в переменной distance. Рассмотрим, как осуществляется