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

Шрифт
Интервал


Листинг 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); //Начинаем отсчет с текущей позиции указателя