Скачать книгу

обработчик для таймера 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

        //Обновим показания в текстовом поле

      ShowDistance();

      end;

      end;

      end;

      Из данного листинга видно, что обновление показаний происходит при истинном (True) значении переменной isUpdating. Значение этой переменной устанавливается в False во время изменения масштаба, чтобы во время ввода значений в текстовые поля не выводились неправильные цифры (листинг 3.11).

Листинг 3.11. Активизация и деактивизация режима изменения масштаба

      procedure TForm1.cmbScaleClick(Sender: TObject);

      begin

      if cmbScale.Caption = 'Изменить масштаб' then

      begin

      //Начинаем изменение масштаба

      StopUpdating();

      cmbScale.Caption:= 'Принять масштаб';

      txtWidth.Enabled:= True;

      end

      else

      begin

      //Заканчиваем изменение масштаба

      txtWidth.Enabled:= False;

      cmbScale.Caption:= 'Изменить масштаб';

      StartUpdating();

      end;

      end;

      Процедуры StartUpdating и StopUpdating скрывают действия, которые необходимо произвести для остановки и возобновления отображения пройденного в текстовом поле указателем мыши расстояния. В данном примере они выглядят достаточно просто (листинг 3.12).

Листинг 3.12. Включение и выключение обновления результатов измерения

      procedure TForm1.StartUpdating();

      begin

      //Включаем обновление показаний в текстовом поле

      isUpdating:= True;

      end;

      procedure TForm1.StopUpdating();

      begin

      //Отключаем обновление показаний в текстовом поле

      isUpdating:= False;

      end;

      В завершение остается реализовать код инициализации координат указателя мыши при запуске программы и обработчик события Click для кнопки cmbClear (листинг 3.13).

Листинг 3.13. Инициализация при запуске и код сброса счетчика

      procedure TForm1.FormCreate(Sender: TObject);

      begin

      //Инициализируем координаты мыши

      GetCursorPos(lastPos);

      StartUpdating();

      end;

      procedure TForm1.cmbClearClick(Sender: TObject);

      begin

      //Сбрасываем счетчик пройденного расстояния

      distance:= 0;

      GetCursorPos(lastPos); //Начинаем отсчет с текущей позиции указателя

      ShowDistance();

      end;

      Вот, собственно, и все, что нужно для работы рассматриваемой программы. Остается лишь уточнить, что способ установки масштаба, используемый в программе, предназначен для таких разрешений мониторов, при которых нет искажений по горизонтали или вертикали. Чаще всего это такие разрешения, при которых размеры изображения по горизонтали и вертикали подчиняются пропорции 4:3 (640 х 480, 800 х 600 и т. д.). При этом такими же пропорциями должен обладать и экран монитора.

      Подсвечивание элементов управления

      В реальных приложениях часто возникает необходимость изменять

Скачать книгу