Форма программы при ведена на рис. 1.66. После того как пользователь установит время сигнала, задаст текст напоминания и щелкнет на кнопке ОК, окно программы должно исчезнуть с экрана. В установленное время на экране должно появиться окно с напоминанием. По явление окна должно сопровождаться звуковым сигналом.

Рис. 1.66. Форма программы Будильник

{ Будильник. Модуль главной формы. )
unit Alarm2_l_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls, ComCtrls, DateUtils;
type
TForml = class(TForm)
Timer1: TTimer;
Labell: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
UpDown1: TUpDown;
Label5: TLabel;
UpDown2: TUpDown;
Shape1: TShape;
Label7: TLabel;
Buttonl: TButton;
Shape2: TShape;
Label8: TLabel;
Editl: TEdit;
Label6: TLabel;
Label9: TLabel;
procedure FormCreate(Sender: TObject);
procedure TimerlTimer(Sender: TObject);
procedure UpDownlClick(Sender: TObject;
Button: TUDBtnType);
procedure UpDown2Click(Sender: TObject;
Button: TUDBtnType);
procedure ButtonlClick(Sender: TObject);
private
{ Private declarations }
public
I Public declarations }
end;
var
Forml: TForml;
implementation
uses Alarm2_2_;
{$R *.dfm)
var
Hour,Min: word; // время на индикаторе
AlHour, AlMin: word; // будильник установлен на AlHour.-AlMin
// начало работы программы
procedure TForml.FormCreate(Sender: TObject);
begin
Hour := HourOf(Now);
Min := MinuteOf(Now);
Label1.Caption := IntToStr(Hour);
if Min < 10
then Label2.Caption := 'O'+IntToStr(Min)
else Label2.Caption := IntToStr(Min);
end;
// сигнал от таймера
procedure TForml.TimerlTiraer(Sender: TObject);
var
cHour,cMin: word;
begin
// получить текущее время
cHour := HourOf(Now);
cMin := MinuteOf(Now);
if Timerl.Tag = 0 // окно программы на экране
then begin
/ проверим, совпадает ли текущее время
с отображаемым на индикаторе }
if cHour о Hour then
begin
Hour := cHour;
Labe11.Caption := IntToStr(Hour) ;
end;
if cMin <> Min then
begin
Min := cMin;
if min <10
then Label2.Caption := '0' + IntToStr(Min)
else Label2.Caption := IntToStr(Min);
end;
// обеспечим мигание двоеточия
if Label3.Visible
then Label3.Visible := False
else Iabel3.Visible := True;
end
else // окно программы скрыто, контролируем
// наступление момента подачи сигнала
if (cHour = AlHour) and (cMin = AlMin)
// сигнал !
then begin
Form2.Show;
Timerl.Tag := 0;
Timerl.Interval := 1000;
end;
end;
// щелчок на UpDownl изменяет
// время сигнала будильника — часы
procedure TForml.UpDownlClick(Sender: TObject; Button: TUDBtnType);
begin
if UpDownl.Position < 10
then Label4.Caption := '0' +
IntToStr(UpDownl.Position)
else Label4.Caption := IntToStr(UpDownl.Position);
end;
// щелчок на UpDown2 изменяет
// время сигнала будильника - ъмнуты
procedure TForml.UpDown2Click(Sender: TObject;
Button: TUDBtnType);
begin
if UpDown2.Position < 10
then Label5.Caption := '0' +
IntToStr(UpDown2.Position)
else Label5.Caption := IntToStr(UpDown2.Position);
end;
// щелчок на кнопке OK
procedure TForml.ButtonlClick(Sender: TObject);
begin
// установить будильник
AlHour := UpDownl.Position;
AlMin := UpDown2.Position;
Timer1.Tag := 1; ,
Forml.Hide; //
Timerl.Interval := 3000; // проверять каждые З секунды
end;
end.
{ Будильник. Модуль окна сообщения. )
unit Alarm2_2_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls,
MMSYSTEM, // для доступа к PlaySound
Alarm2_l_; // для доступа к стартовой форме программы
type
TForm2 = class(TForm)
Buttonl: TButton;
Labell: TLabel;
procedure ButtonlClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations j
public
( Public declarations )
end;
var
Form2: TForm2;
implementation
{$R *.dfra}
procedure TForm2.ButtonlClick(Sender: TObject);
begin
Form2.Hide; // скрыть окно с сообщением
Forml.Show; // сделать доступным главное окно
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
Labell.Caption := Forml .Edit 1 .Text; //' текст сообщения
PlaySound('tada.wav',0,SND_ASYNC); // звуковой сигнал
end;
end.