Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Delphi. Трюки и эффекты - Александр Чиртик страница 33

Название: Delphi. Трюки и эффекты

Автор: Александр Чиртик

Издательство:

Жанр: Программы

Серия:

isbn: 978-5-911-80219-6

isbn:

СКАЧАТЬ преобразовывала пройденное расстояние, нужно линейкой измерить ширину белого прямоугольника и ввести полученное значение (в мм) в текстовое поле. При повторном нажатии этой кнопкивведенные значения принимаются, и с этого момента показания пройденного расстояния переводятся в метры с учетом текущего разрешения и размера монитора.

      Теперь приступим к рассмотрению реализации этого приложения. В табл. 3.1 приводятся сведения по настройке элементов управления, не являющихся рамками или статическими надписями.

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

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

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

      type

      TForm1 = class(TForm)

      …

      private

      isUpdating: 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;

      В приведенном расчете нет ничего сложного, как, собственно, нет ничего сложного и во всем примере. Главная процедура приложения – обработчик для таймера Timerl. Таймер срабатывает с максимальной для него частотой (не 1 мс, конечно, но где-то 18 раз в секунду). Текст обработчикаТ1тег1Т1тег приводится в листинге 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

      //Обновим СКАЧАТЬ