Листинг 4
unit Unit1; 
  
  interface 
  
  uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, Buttons, ExtCtrls; 
  
  type 
  TfmExample = class(TForm) 
  Panel1: TPanel; 
  bbRun: TBitBtn; 
  bbClose: TBitBtn; 
  edInput: TEdit; 
  lbOutput: TLabel; 
  mmOutput: TMemo; 
  Timer1: TTimer; 
  procedure bbRunClick(Sender: TObject); 
  procedure Timer1Timer(Sender: TObject); 
  procedure FormActivate(Sender: TObject); 
  private 
  { Private declarations } 
  BegTime: TDateTime; // Начальное время цикла 
  Counter: Integer; // Счетчик цикла 
  public 
  { Public declarations } 
  end; 
  
  var 
  fmExample: TfmExample; 
  
  implementation 
  
  {$R *.DFM} 
  
  procedure TfmExample.bbRunClick(Sender: TObject); 
  // Запускает таймер. edInput содержит период его срабатывания. 
  var 
  Delay: Word; 
  begin 
  // Проверяем задание интервала 
  if edInput.Text='' then Exit; 
  try 
  Delay := StrToInt(edInput.Text); 
  except 
  ShowMessage('Ошибка в записи числа'); 
  edInput.SelectAll; 
  edInput.SetFocus; 
  Exit 
  end; 
  Counter := 0; // Сбрасываем счетчик 
  Timer1.Interval := Delay; // Устанавливаем интервал 
  BegTime := Time; // Засекаем время 
  Timer1.Enabled := True; // Пускаем таймер 
  Screen.Cursor := crHourGlass 
  end; 
  
  procedure TfmExample.Timer1Timer(Sender: TObject); 
  var 
  h, m, s, ms: Word; // Переменные для декодирования времени 
  const 
  MaxCount = 55; // Количество срабатываний таймера 
  begin 
  Counter := Counter + 1; // Наращиваем счетчик срабатываний 
  if Counter=MaxCount then // Конец цикла? 
  begin // - Да 
  Timer1.Enabled := False; // Останавливаем таймер 
  // Находим среднее время срабатывания: 
  DecodeTime((Time-BegTime)/MaxCount, h, m, s, ms); 
  mmOutput.Lines.Add( // Выводим результат 
  Format('Задано %s ms. Получено %d ms.', [edInput.Text, ms])); 
  edInput.Text := ''; // Готовим следующий запуск 
  edInput.SetFocus; 
  Screen.Cursor := crDefault 
  end; 
  end; 
  
  procedure TfmExample.FormActivate(Sender: TObject); 
  begin 
  edInput.SetFocus 
  end; 
  
  end.