Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как написать часы [D6]


Cukcik ©   (2003-02-10 12:31:00) 

Люди, кто знает, как написать часы, чтоб были три стрелки


mukha   (2003-02-10 21:58:00) [1]

Извиняюсь: Caption у кнопки - Старт


mukha   (2003-02-10 21:56:00) [2]

Примерно так:
На форме таймер и кнопка. Caption у кнопки - Пуск
Пример из учебника. Всё работает, разбирайся.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure ArrowDraw(DrawColor:TColor);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
CenterX, CenterY, Radius:integer;
HourArrow, MinArrow, SecArrow:integer;
Hour, Min, Sec, MSec:Word;
HourAngle, MinAngle, SecAngle:Real;
Colon:boolean;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.interval:=1000;
timer1.enabled:=false;
centerY:=form1.ClientHeight div 2;
centerX:=centerY;
radius:=centerX-20;
HourArrow:=Radius-50;
MinArrow:=Radius-20;
SecArrow:=Radius-10;
end;

procedure TForm1.FormPaint(Sender: TObject);
var i:integer;
begin
with form1.Canvas do begin
Pen.Color:=clBlue;
pen.Width:=4;
Brush.Color:=clWhite;
Ellipse(20,20,20+2*radius, 20+2*radius);
pen.Width:=2;
for i:=0 to 11 do begin
MoveTo(CenterX+Round((Radius-9)*sin(i/6*pi)),
Centery-Round((Radius-9)*cos(i/6*pi)));
LineTo (CenterX+Round((Radius-9)*sin(i/6*pi)),
CenterY-Round((Radius-9)*cos(i/6*pi)));
end;
Font.Height:=18;
Font.Color:=clBlack;
Brush.Color:=Form1.Color;
textOut(CenterX-TextWidth("12") div 2, CenterY-Radius-textheight("12")-5,"12");
textOut(CenterX+radius+5,CenterY-textheight("3"),"3");
textOut(CenterX-TextWidth("6") div 2,CenterY+Radius+5,"6");
textOut(CenterX-Radius-TextWidth("9")-5,CenterY-textheight("9"),"9");
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption="Старт" then begin
DecodeTime(Time, Hour, Min, Sec,MSec);
HourAngle:=(Hour mod 12)/12*(2*pi);
MinAngle:=Min/60*(2*pi);
SecAngle:=Sec/60*(2*pi);
ArrowDraw(clRed);
Button1.Caption:="Стоп";
Timer1.Enabled:=true;
end
else
begin
Button1.Caption:="Старт";
Timer1.Enabled:=false;
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
ArrowDraw(clWhite);
DecodeTime(Time, Hour, Min, Sec,MSec);
HourAngle:=(Hour mod 12)/12*(2*pi);
MinAngle:=Min/60*(2*pi);
SecAngle:=Sec/60*(2*pi);
ArrowDraw(clRed);
end;
procedure TForm1.ArrowDraw(DrawColor:Tcolor);
begin
with Form1.Canvas do begin
pen.Color:=DrawColor;
MoveTo(CenterX, CenterY);
pen.Width:=4;
LineTo(CenterX+Round(HourArrow*sin(HourAngle)),
CenterY-Round(HourArrow*cos(HourAngle)));
MoveTo(CenterX, CenterY);
pen.Width:=2;
LineTo(CenterX+Round(MinArrow*sin(MinAngle)),
CenterY-Round(MinArrow*cos(MinAngle)));
MoveTo(CenterX, CenterY);
pen.Width:=1;
LineTo(CenterX+Round(SecArrow*sin(SecAngle)),
CenterY-Round(SecArrow*cos(SecAngle)));

end;
end;
end.


Mirovodin   (2003-02-10 15:06:00) [3]

1. Написать функцию которая рисует линию, из точки X,Y длиной D на угол A.

2. Для часовой стрелки a = (360/12)*кол-во часов.
Для минутной стрелки a = (360/60)*кол-во минут
Для секундной стрелки a = (360/60)* кол-во секунд

3. Рисуем круг с центром в X,Y
Соответствие часов, углов на схеме:


0 град 12 часов

|
|
-----|----- 90 град. 3 часа
|
|
|
180 град, 6 часов


Axis_of_Evil   (2003-02-10 13:03:00) [4]

:>


Наверх

Титульная страница Поиск, карта сайта Написать письмо