Оценить:
 Рейтинг: 4.6

Программирование в Delphi. Трюки и эффекты

Год написания книги
2010
Теги
<< 1 ... 35 36 37 38 39 40 41 42 >>
На страницу:
39 из 42
Настройки чтения
Размер шрифта
Высота строк
Поля

Таблица 3.1. Параметры элементов управления формы, показанной на рис. 3.1

В коде листинга 3.8 объявляются переменные (члены класса TForm1) и методы, добавленные вручную.

Листинг 3.8. Форма для измерения пробега указателя

type

TForm1 = class(TForm)

...

private

isUp dating: Boolean; //Если равен False, то показания в txtDistance

//не обновляются

lastPos: TPoint; //Координаты указателя во время прошлого замера

distance: Real; //Пройденное расстояние в пикселах

procedure StartUpdating();

procedure StopUpdating();

procedure ShowDistance();

end;

Суммарное расстояние в пикселах, пройденное указателем, сохраняется в переменной distance. Ниже представлен способ перевода этого расстояния в метры (листинг 3.9).

Листинг 3.9. Перевод расстояния в метры с учетом масштаба

procedure TForm1.ShowDistance();

var

scale: Real;

distanceMetters: Real;

begin

//Пересчитываем текущий пробег в метры и показываем его

//в текстовом поле

//..определяем масштаб для перевода измерений в метры

scale:= 0.001 * StrToInt(txtWidth.Text) / Shape1.Width;

//..подсчитываем расстояние с учетом масштаба

distanceMetters:= scale * distance;

//..округляем до трех знаков (мм) и показываем

distanceMetters:= Int(distanceMetters * 1000) * 0.001;

txtDistance.Text:= FloatToStr(distanceMetters);

end;

Главная процедура приложения – обработчик для таймера Timer1. Таймер срабатывает с максимальной для него частотой (около 18 раз в секунду). Текст обработчика Timer1Timer приведен в листинге 3.10.

Листинг 3.10. Подсчет разницы между положениями указателя мыши

procedure TForm1.Timer1Timer(Sender: TObject);

var

curPos: TPoint;

delta: Real;

begin

if (curPos.X <> lastPos.X) or (curPos.Y <> lastPos.Y) then

begin

GetCursorPos(curPos);

//Вычисляем разницу между текущим и прошлым положением мыши

delta:= Sqrt(Sqr(curPos.X – lastPos.X) + Sqr(curPos.Y – lastPos.Y));

distance:= distance + delta;

//Не забываем сохранить новые координаты указателя

lastPos:= curPos;

if isUpdating then

begin

//Обновим показания в текстовом поле
<< 1 ... 35 36 37 38 39 40 41 42 >>
На страницу:
39 из 42

Другие электронные книги автора Александр Анатольевич Чиртик