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

Автор: Александр Чиртик
Издательство:
Серия:
Жанр произведения: Программы
Год издания: 0
isbn: 978-5-911-80219-6
Скачать книгу
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;

      Как можно увидеть при внимательном рассмотрении листинга 3.10, обновление показаний происходит при истинном значении переменной 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 и т. д.). При этом такими же пропорциями должен обладать экран монитора.

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

      В завершение рассмотрим несложный, но достаточно полезный пример, позволяющий сделать более «живым» интерфейс приложения: изменение внешнего