Blame lazarus/alarm-clock/unit1.pas

Ivan Mahonin bcc3f9
unit Unit1;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
{$mode objfpc}{$H+}
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
interface
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
uses
Ivan Mahonin bcc3f9
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn,
Ivan Mahonin bcc3f9
  StdCtrls, ExtCtrls, DateUtils, OpenAL;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
type
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
  { TForm1 }
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
  TForm1 = class(TForm)
Ivan Mahonin bcc3f9
    CheckBox1: TCheckBox;
Ivan Mahonin bcc3f9
    Label1: TLabel;
Ivan Mahonin bcc3f9
    TimeEdit1: TTimeEdit;
Ivan Mahonin bcc3f9
    TimeEdit2: TTimeEdit;
Ivan Mahonin bcc3f9
    TimeEdit3: TTimeEdit;
Ivan Mahonin bcc3f9
    Timer1: TTimer;
Ivan Mahonin bcc3f9
    procedure FormCreate(Sender: TObject);
Ivan Mahonin bcc3f9
    procedure Timer1Timer(Sender: TObject);
Ivan Mahonin bcc3f9
  private
Ivan Mahonin bcc3f9
    { private declarations }
Ivan Mahonin bcc3f9
  public
Ivan Mahonin bcc3f9
    { public declarations }
Ivan Mahonin bcc3f9
  end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
var
Ivan Mahonin bcc3f9
  Form1: TForm1;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
implementation
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
{$R *.lfm}
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
// This procedure plays beep via OpenAL
Ivan Mahonin bcc3f9
// you don't need to understand how it works for now
Ivan Mahonin bcc3f9
// just use it if SysUtils.Beep does not works
Ivan Mahonin bcc3f9
procedure Beep;
Ivan Mahonin bcc3f9
const
Ivan Mahonin bcc3f9
  frequency = 440;
Ivan Mahonin bcc3f9
  rate = 10000;
Ivan Mahonin bcc3f9
  count = 2000;
Ivan Mahonin bcc3f9
var
Ivan Mahonin bcc3f9
  i: Integer;
Ivan Mahonin bcc3f9
  samples: array[0..count-1] of Smallint;
Ivan Mahonin bcc3f9
  device: PALCdevice;
Ivan Mahonin bcc3f9
  context: PALCcontext;
Ivan Mahonin bcc3f9
  buffer: ALuint;
Ivan Mahonin bcc3f9
  source: ALuint;
Ivan Mahonin bcc3f9
begin
Ivan Mahonin bcc3f9
  for i := 0 to count-1 do
Ivan Mahonin bcc3f9
    samples[i] := Round(32760*sin(2*pi*i*frequency/rate));
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
  device := alcOpenDevice(nil);
Ivan Mahonin bcc3f9
  context := alcCreateContext(device, nil);
Ivan Mahonin bcc3f9
  alcMakeContextCurrent(context);
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
  alGenBuffers(1, @buffer);
Ivan Mahonin bcc3f9
  alBufferData(buffer, AL_FORMAT_MONO16, @samples, SizeOf(samples), rate);
Ivan Mahonin bcc3f9
  alGenSources(1, @source);
Ivan Mahonin bcc3f9
  alSourcei(source, AL_BUFFER, buffer);
Ivan Mahonin bcc3f9
  alSourcePlay(source);
Ivan Mahonin bcc3f9
  Sleep(Round(count/rate*1000 + 10));
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
  alcMakeContextCurrent(nil);
Ivan Mahonin bcc3f9
  alcDestroyContext(context);
Ivan Mahonin bcc3f9
  alcCloseDevice(device);
Ivan Mahonin bcc3f9
end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
{ TForm1 }
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
procedure TForm1.Timer1Timer(Sender: TObject);
Ivan Mahonin bcc3f9
begin
Ivan Mahonin bcc3f9
  if CheckBox1.Checked then begin
Ivan Mahonin bcc3f9
    if HourOf(TimeEdit1.Time) = HourOf(Time) then begin
Ivan Mahonin bcc3f9
      if MinuteOf(TimeEdit1.Time) = MinuteOf(Time) then begin
Ivan Mahonin bcc3f9
        Beep;
Ivan Mahonin bcc3f9
      end;
Ivan Mahonin bcc3f9
    end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
    if HourOf(TimeEdit2.Time) = HourOf(Time) then begin
Ivan Mahonin bcc3f9
      if MinuteOf(TimeEdit2.Time) = MinuteOf(Time) then begin
Ivan Mahonin bcc3f9
        Beep;
Ivan Mahonin bcc3f9
      end;
Ivan Mahonin bcc3f9
    end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
    if HourOf(TimeEdit3.Time) = HourOf(Time) then begin
Ivan Mahonin bcc3f9
      if MinuteOf(TimeEdit3.Time) = MinuteOf(Time) then begin
Ivan Mahonin bcc3f9
        Beep;
Ivan Mahonin bcc3f9
      end;
Ivan Mahonin bcc3f9
    end;
Ivan Mahonin bcc3f9
  end;
Ivan Mahonin bcc3f9
end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
procedure TForm1.FormCreate(Sender: TObject);
Ivan Mahonin bcc3f9
begin
Ivan Mahonin bcc3f9
  TimeEdit1.Time := IncMinute(Time, 1);
Ivan Mahonin bcc3f9
  TimeEdit2.Time := IncMinute(Time, 5);
Ivan Mahonin bcc3f9
  TimeEdit3.Time := IncHour(Time, 1);
Ivan Mahonin bcc3f9
end;
Ivan Mahonin bcc3f9
Ivan Mahonin bcc3f9
end.
Ivan Mahonin bcc3f9