Вот программа,которая создает аналоговые часы,которые выводят текущее время в часах, минутах и секундах. Нажатие пользователя мышью на компонент изменяет часовой пояс – нажатие в левой половине компонента увеличивает смещение, влевой – уменьшает.
private { Private declarations } public { Public declarations } end;
var Form1: TForm1; KooRX,KooRY,Rad:Integer; Arrow_H,Arrow_M,Arrow_S:Integer; H,M,S,MS:Word; HourAngle,MinAngle,SecAngle:Real; i,c:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender:TObject); begin Form1.BorderStyle:=bsSingle; //устанавливаем границы Form1.BorderIcons:=[biSystemMenu,biMinimize]; // вид границ Timer1.Interval:=1000; Timer1.Enabled:=false; KooRY:=Form1.ClientHeight div 2; KooRX:=KooRY; Rad:=KooRX-20; Arrow_H:=Rad-30; Arrow_M:=Rad-20; Arrow_S:=Rad-10; i:=0; end;
procedure TForm1.FormPaint(Sender:TObject); var i:integer; begin //Прорисовка циферблата with Form1.Canvas do begin //Вывод окружности Pen.Color:=clAqua; // цвет линии Pen.Width:=6; //толщиналинии Brush.Color:=clblack; // цвет заливки Ellipse(20,20,20+2*Rad,20+2*Rad); Pen.Width:=2; //Вывод рисок for i:=0 to 11 do begin moveto(KooRx+round((rad-9)*sin(i/6*pi)), KooRy-round((rad-9)*cos(i/6*pi))); // переход на координаты lineto(KooRx+round((rad)*sin(i/6*pi)), //рисование лини KooRy-round((rad)*cos(i/6*pi))); end; //Вывод цифр Font.Height:=10; //размер шрифта Font.Color:=clBlack; //цвет шрифта Brush.Color:=Form1.Color; TextOut(KooRX-TextWidth('12') div 2,KooRY-Rad-TextHeight('12')-5,'12'); // вывод значений на циферблат TextOut(KooRX+Rad+5,KooRY- TextHeight('3'),'3'); TextOut(KooRX-TextWidth('6') div 2,KooRY+Rad+5,'6'); TextOut(KooRX-Rad-TextWidth('9')-5,KooRY-TextHeight('9'),'9'); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if Button1.caption='Start' then begin // zapusk chasov drawarrows(clblack); //заливка decodetime(time,h,m,s,ms); //считыввание времени hourangle:=(h+i mod 12)/12*(2*pi); minangle:=m / 60 * (2*pi); secangle:=s / 60 * (2*pi); drawarrows(clred); Button1.Caption:='Stop'; timer1.Enabled:=true; end else begin //ostanovka chasov Button1.caption:='Start'; timer1.Enabled:=false; end; end;
procedure TForm1.Timer1Timer(Sender:TObject); begin //Стереть стрелки drawarrows(clblack); //narisovat strlki na novom meste decodetime(time,h,m,s,ms); hourangle:= (h+i mod 12)/12 * (2*pi); minangle:=m / 60 * (2*pi); secangle:=s / 60 * (2*pi); drawarrows(clred); Label1.Caption:=TimeToStr(Time);//Отображение текущего значения времени end;
procedure tform1.drawarrows(drawcolor: tcolor); begin with form1.canvas do begin pen.color:=drawcolor; moveto(KooRx,KooRy); //chasovaia strlka pen.width:=4; lineto(KooRx+round(arrow_H*sin(hourangle)), KooRy-round(arrow_H*cos(hourangle))); moveto(KooRx,KooRy); //minutnaia strlka pen.width:=3; lineto(KooRx+round(arrow_M*sin(minangle)), KooRy-round(arrow_M*cos(minangle))); moveto(KooRx,KooRy); //sekundnaia strlka pen.width:=1; lineto(KooRx+round(arrow_S*sin(secangle)), KooRy-round(arrow_S*cos(secangle))); end; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin C:=Form1.ClientHeight div 2; if x>c then i:=i+1 else i:=i-1; end;
end.
Всё работает хорошо. Проблема заключается в том,что нужно создать и добавить свой компонет, а я не знаю как это сделать и связать это с моими часами. Пожайлуста, подскажите как организовать компонент! очень нужно...