implementation

{$R *.dfm)

const
SOUND = 'tada.wav';
var
MediaPlayer : TMediaPlayer; // обеспечивает воспроизведение
// звукового фрагмента
// интервал
min: integer; // минут
sec: integer; // секунд

// в заголовок окна программы
// выводит, сколько времени осталось
procedure ShowTime;
var
buf: string[20];
begin
// минуты и секунды выводим двумя цифрами
if min < 10 then
buf := '0' + IntToStr(min) + ':'
else
buf := IntToStr(min) + ':';
if sec < 10 then
buf := buf + '0' + intToStr(sec)
else
buf := buf + IntToStr(sec);

Forml.Label3.Caption := buf;
end;

// сигнал от таймера
procedure TForml.TimerlTimer(Sender: TObject);
begin
sec := sec — 1;
ShowTime; // показать, сколько времени осталось
if (min = 0) and (sec = 0) then
// заданный интервал истек
begin
Timer1.Enabled := False; // стоп

// *** звуковой сигнал ****
//т. к. возможно, что WAV-файл не был
// загружен (см. FormCreate),
// то может возникнуть исключение
try
MediaPlayer.Play; // воспроизвести звуковой фрагмент
except
on EMCIDeviceError do;
end;

ShowMessage('Заданный интервал истек!');
Buttonl.Caption := 'Пуск';
Label3.Visible := False; // скрыть индикацию времени
// сделать видимыми поля ввода интервала
Labell.Visible := True;
Editl.Visible := True;
Label2.Visible := True;
Edit2.Visible := True;
exit;
end;

if (sec = 0) and (min > 0) then
begin
sec := 60;

min := min — 1;
end;
end;

// щелчок на кнопке Пуск/Стоп
procedure TForml.ButtonlClick(Sender: TObject);
begin
if Forml.Timerl.Enabled then
// таймер работает, надо остановить
begin
Timerl.Enabled
Buttonl.Caption
Label3.Visible
// сделать видимыми поля ввода интервала
Labell.Visible
Editl.Visible
Label2.Visible
Edit2.Visible
= False; // стоп
:= 'Пуск';
= False; // скрыть индикацию времени
= True;
= True;
= True;
= True;
end

else .
// таймер стоит, надо запустить
begin
min := StrToInt(Editl.Text);
sec := StrToInt(Edit2.Text);
if (sec = 0) and (min = 0) then
begin
ShowMessage('Надо задать интервал!');
exit;
end;

Timerl.Enabled := True; // запустить таймер
// скрыть поля ввода интервала
Labell.Visible
Editl.Visible
Label2.Visible
Edit2.Visible
Label3.Visible
= False;
¦ False;
= False;
= False;
= True;
Buttonl.Caption := 'Стоп';
ShowTime;
end;
end;

// создает компонент MediaPlayer и
// загружает WAV-файл
procedure TForml.FormCreate(Sender: TObject);
var
pWinDir: PChar; // указатель на nul-terminated-строку
sWinDir: String[80];
begin
// создадим компонент MediaPlayer
MediaPlayer : = TMediaPlayer.Create(self);
MediaPlayer.ParentWindow := Forml.Handle;
MediaPlayer.Visible := False;

// Стандартные WAV-файлы находятся в каталоге Media,
// но где находится и как называется каталог, в который
// установлен Windows? Выясним это.
// Чтобы получить имя каталога Windows,
// воспользуемся API-функцией GetWindowsDirectory.
// Строка, которая передается в API-функцию,
// должна быть nul-terminated-строкой.

// Получить имя каталога Windows
GetMem(pWinDir,80); // выделить память
// для строки
GetWindowsDirectory(pWinDir,80); // получить каталог Windows
sWinDir := pWindir;

// открыть WAV-файл
MediaPlayer.FileName := sWinDir + '\media\' + SOUND;
try
MediaPlayer.Open;
except
on EMCIDeviceError do;
end;
end;

end.