Аналоговые часы трабла со стрелками
Добавлено: 26.05.2010 17:34:40
- Код: Выделить всё
Program fdgfaf;
uses graph, crt, SysUtils;
var
c : char;
T : TSystemTime;
gd, gm, r,r1, x, y,i,j,n : integer;
H, PrH, PrM, PrS : integer;
PrS1,PrH1,PrM1,PrM2 : integer;
x1,y1,x2,y2,a,b,a1,b1,a2,b2 : integer;
const
Grd : double=pi/180;
BEGIN
gd:=vga;
gm:=2;
InitGraph(gd,gm,'');
r:=174;
r1:=175;
//Џ®¤Ј®в®ўЄ* жЁдҐаЎ«*в*.
SetColor(15);
SetFillStyle(1,12);
Circle(300,250,200);
Circle(300,250,180);
FloodFill(110,250,15);
SetColor(15);
SetFillStyle(1,10);
Circle(300,250,174);
FloodFill(126,250,15);
SetColor(15);
SetFillStyle(1,15);
FloodFill(299,249,15);
SetFillStyle(1,12);
Bar(150,247,170,253);
Bar(435,247,455,253);
Bar(297,389,303,409);
Bar(297,95,303,115);
repeat
GetLocalTime(T);
if T.Hour>=12
then H:=T.Hour-12
else H:=T.Hour;
if PrH<>T.Hour
then
begin
x:=300+round((r-95)*sin(PrH*30*Grd));
y:=250-round((r-95)*cos(PrH*30*Grd));
SetColor(15);
Line(300,250,x,y);
PrH:=T.Hour;
end;
if (PrM<>T.Minute) and (PrM1<>T.Minute+1)
then
begin
a:=300+Round((r-65)*sin(PrM*6*Grd));
b:=250-Round((r-65)*cos(PrM*6*Grd));
a1:=300+Round((r-85)*sin(PrM*6*Grd));
b1:=250-Round((r-85)*cos(PrM*6*Grd));
a2:=300+Round((r-85)*sin(PrM1*6*Grd));
b2:=250-Round((r-85)*cos(PrM1*6*Grd));
PrM:=T.Minute;
PrM1:=T.Minute+1;
end;
if (PrS<>T.Second) and (PrS1<>T.Second+1)
then
begin
x:=300+Round((r-25)*sin(PrS*6*Grd));
y:=250-Round((r-25)*cos(PrS*6*Grd));
x1:=300+Round((r-105)*sin(PrS*6*Grd));
y1:=250-Round((r-105)*cos(PrS*6*Grd));
x2:=300+Round((r-105)*sin(PrS1*6*Grd));
y2:=250-Round((r-105)*cos(PrS1*6*Grd));
PrS:=T.Second;
PrS1:=T.Second+1;
end;
SetColor(0);
SetFillStyle(1,15);
Bar(345,240,400,255);
SetfillStyle(1,12);
OutTextXY(350,247,Format('%.2d.%.2d.%.4d',[T.Day, T.Month, T.Year]));
SetFillStyle(1,15);
Bar(265,365,370,390);
SetFillStyle(1,12);
SetColor(0);
OutTextXY(270,370,Format('%.2d:%.2d:%.2d',[T.Hour, T.Minute, T.Second]));
case T.Second of
00..01,59 : Bar(297,95,303,115);
14..16 : Bar(435,247,455,253);
29..31 : Bar(297,389,303,409);
44..46 : Bar(150,247,170,253);
end;
x:=300+Round((r-95)*sin(H*30*Grd));
y:=250-Round((r-95)*cos(H*30*Grd));
SetColor(0);
Line(300,250,x,y);
a:=300+Round((r-65)*sin(T.Minute*6*Grd));
b:=250-Round((r-65)*cos(T.Minute*6*Grd));
a2:=300+Round((r-85)*sin(PrM1*6*Grd));
b2:=250-Round((r-85)*cos(PrM1*6*Grd));
SetColor(4);
Line(a,b,a1,b1);
Line(a,b,a2,b2);
Line(a1,b1,301,250);
Line(a2,b2,301,250);
x:=300+Round((r-25)*sin(T.Second*6*Grd));
y:=250-Round((r-25)*cos(T.Second*6*Grd));
x2:=300+Round((r-105)*sin(PrS1*6*Grd));
y2:=250-Round((r-105)*cos(PrS1*6*Grd));
SetColor(12);
Line(x,y,x1,y1);
Line(x,y,x2,y2);
Line(x1,y1,300,250);
Line(x2,y2,300,250);
Delay(500);
setcolor(15);
Line(x,y,x1,y1);
Line(x,y,x2,y2);
Line(x1,y1,300,250);
Line(x2,y2,300,250);
until keypressed;
ReadLn;
CloseGraph;
END.
Вот моя программа.Часы рабочие, вот только сделать стрелки нужно объёмные.Вот тут я и столкнулся с такой проблемой.Секундную сделал, минутную не получаеться уродует её но потом когда новое положение минутной стрелки то всё нормализуеться.Подскажите пожалуйсто в чём проблема! p.s к часовой не пруступал т.к был шокирован минутной...