Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Report by IAG.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆
  1. Аналоговые часы с будильником

Интерфейс:

Код программы:

unit unit2_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ComCtrls, Menus;

type

TForm2 = class(TForm)

Timer1: TTimer;

Label1: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

// эти объявления вставлены вручную

procedure Vector(x0,y0,a,l: integer);

procedure DrawClock;

procedure N2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

a:string;

Form2: TForm2;

implementation

uses

DateUtils; // для доступа к SecondOf,

// MinuteOf и HourOf

const

R = 85 ; // радиус циферблата часов

var

x0,y0: integer; // центр циферблата

ahr,amin,asec: integer; // положение стрелок (угол)

// инициализация формы

procedure TForm2.FormCreate(Sender: TObject);

var

t: TDateTime;

begin

// зададим размер формы

// в соответствии с размером циферблата

x0 := R+10;

y0 := R+10;

t := Now();

// положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(Today)*6;

Timer1.Interval := 1000; // период сигнал от таймера 1 сек

Timer1.Enabled := True; // пуск таймера

end;

// вычерчивает вектор заданной длины из точки (x0,y0)

procedure TForm2.Vector(x0,y0: integer; a, l: integer);

// x0,y0 - начало вектора

// a - угол между осью x и вектором

// l - длина вектора

const

GRAD = 0.0174532; // коэффициент пересчета угла из градусов в радианы

var

x,y: integer; // координаты конца вектора

begin

Canvas.MoveTo(x0,y0);

x := Round(x0 + l*cos(a*GRAD));

y := Round(y0 - l*sin(a*GRAD));

Canvas.LineTo(x,y);

end;

// рисует стрелки

procedure TForm2.DrawClock;

var

t: TDateTime;

begin

// шаг секундной и минутной стрелок 6 градусов,

// часовой - 30.

// стереть изображение стрелок

Canvas.Pen.Color := clLime;

Canvas.Pen.Width :=3;

// часовую

Vector(x0,y0, ahr, R-30);

// минутную

Vector(x0,y0, amin, R-15);

// секундную

Vector(x0,y0, asec, R-7);

t := Now();

// новое положение стрелок

ahr := 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6;

amin := 90 - MinuteOf(t)*6;

asec := 90 - SecondOf(t)*6;

// нарисовать стрелки

// часовая стрелка

Canvas.Pen.Width := 3;

Canvas.Pen.Color := clWhite;

Vector(x0,y0, ahr, R-25);

// минутная стрелка

Canvas.Pen.Width := 2;

Canvas.Pen.Color := clWhite;

Vector(x0,y0, amin, R-10);

// секундная стрелка

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clGreen;

Vector(x0,y0, asec, R-18);

end;

// прорисовка циферблата и начальных стрелок

procedure TForm2.FormPaint(Sender: TObject);

var

x,y: integer; // координаты маркера на циферблате

a: integer; // угол между OX и прямой (x0,yo) (x,y)

pc: TColor; // цвет карандаша

pw: integer; // ширина карандаша

s1,s2,s3,s4:string; //цифры циферблата

begin

pc := Canvas.Pen.Color;

pw := Canvas.Pen.Width;

Canvas.Pen.Width := 1;

Canvas.Pen.Color := clWhite;

a:=0; // метки ставим от 3-х часов, против

// часовой стрелки

// циферблат

while a < 360 do

begin

x:=x0+Round( R * cos(a*2*pi/360));

y:=x0-Round( R * sin(a*2*pi/360));

Form2.Canvas.MoveTo(x,y);

if (a mod 30) = 0

then Canvas.Ellipse(x-2,y-2,x+3,y+3)

else Canvas.Ellipse(x-1,y-1,x+1,y+1);

a:=a+6; // 1 минута - 6 градусов

begin

s1:='12';

Canvas.Font.Color :=clwhite;

Form2.Canvas.TextOut(86, 18, s1);

s2:='3' ;

Canvas.Font.Color :=clwhite;

Form2.Canvas.TextOut(165, 85, s2);

s3:='6';

Canvas.Font.Color :=clwhite;

Form2.Canvas.TextOut(89, 157, s3);

s4:='9';

Canvas.Font.Color :=clwhite;

Form2.Canvas.TextOut(15, 85, s4);

end;

end;

// восстановить карандаш кисть

Canvas.Pen.Width := pw;

Canvas.Pen.Color := pc;

END;

procedure TForm2.N2Click(Sender: TObject);

begin

end;

// прорисовка текущих положений стрелок часов

procedure TForm2.Timer1Timer(Sender: TObject);

begin

DrawClock;

form2.ClientHeight:=3*R;

form2.ClientWidth:=2*R+20;

label1.Caption:=timetostr (time); //цифровые часы

end;

end.

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm4 = class(TForm)

Edit1..2: TEdit;

Timer1..2: TTimer;

Button1..2: TButton;

Panel1: TPanel;

Label1..3: TLabel;

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

var

st:systemtime;

Form4: TForm4;

implementation

//считываем время

procedure TForm4.Button1Click(Sender: TObject);

begin

Timer2.Enabled:=true;

end;

//сбрасываем время

procedure TForm4.Button2Click(Sender: TObject);

begin

Timer2.Enabled:=false;

end;

//Информируется текущем времени с Windows и вставляет в цифровые час

procedure TForm4.Timer1Timer(Sender: TObject);

begin

getlocaltime(ST);

Panel1.Caption:=IntToStr(ST.wHour)+':'+IntToStr(ST.wMinute)+

':'+IntToStr(ST.wSecond);

end;

//Сравнивает, если совпадает то дает сигнал

procedure TForm4.Timer2Timer(Sender: TObject);

begin

getlocaltime(ST);

if (ST.Whour=StrToInt(Edit1.Text))and (ST.WMinute=StrToInt(Edit2.Text)) then beep;

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]