Страница 1 из 4

Аналоговые часы трабла со стрелками

СообщениеДобавлено: 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 к часовой не пруступал т.к был шокирован минутной...

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 17:49:06
скалогрыз
всегда рисуй и минутную и секундную стрелки (независимо от того изменились минуты или нет).
тоже касается и часовой!

процедуры и функции - твои друзья!

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 17:54:48
Водород
ты можешь подсказать в чём тут ошибка?

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:13:44
скалогрыз
Водород писал(а):ты можешь подсказать в чём тут ошибка?


у тебя не задано начальное значение PrM, PrM1, PrM2

ты сий код сам писал?!

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:25:33
Водород
Эти значиния из компа беруться t.minute

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:33:51
скалогрыз
Водород писал(а):Эти значиния из компа беруться t.minute

а если у тебя окажется, что (PrM=T.Minute) а (PrM1<>T.Minute+1), то как проверка заработает?
Код: Выделить всё
if (PrM<>T.Minute) and (PrM1<>T.Minute+1)

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:38:30
Водород
всё нормально работает, это чтоб на шаг вперёд шла стрелка чтоб объёмную стрелку сделать

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:44:58
скалогрыз
Водород писал(а):всё нормально работает, это чтоб на шаг вперёд шла стрелка чтоб объёмную стрелку сделать

это ты сейчас проверил (подумал), или на обум сказал?

представь такую ситуацию: у тебя (о чудо!) изначально PrM =0, PrM1 = хз_чему, t.Minute вернулся так же 0.
подумай чему будут равны координаты a,b,a1,b1,a2,b2 к моменту отрисовки минутной стрелки и почему.

и помни, что защита в пятницу!

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:46:53
Водород
блин ты меня загрузил, ты попробуй код скопироват ьи вставить и посомтри как работает

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:48:39
скалогрыз
Водород писал(а):блин ты меня загрузил, ты попробуй код скопироват ьи вставить и посомтри как работает

хех!

ты сам этот код писал?!

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:55:01
Водород
ололо а откуда знаешь что защита в пятницу? :mrgreen:
а так я механизм движения в инете нашол под себя подстраивал

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 18:56:51
скалогрыз
Водород писал(а):ололо а откуда знаешь что защита в пятницу? :mrgreen:

дружу с копетаном очевидность.

Водород писал(а):а так я механизм движения в инете нашол под себя подстраивал

ты всю программу с интернета скачал?!
какие строчки в программе относятся к "механизму движения"?!

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 19:01:06
Водород
нет не скачивал,
вот механизм
const
Grd : double=pi/180;
x:=300+Round((r-25)*sin(t.minute*6*Grd));
y:=250-Round((r-25)*cos(t.minute*6*Grd));
расчитываються координаты следующего положения стрелок(ну т.е если это не объёмная стрелка а просто линия)

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 19:06:25
скалогрыз
Водород писал(а):нет не скачивал,
вот механизм
const
Grd : double=pi/180;
x:=300+Round((r-25)*sin(t.minute*6*Grd));
y:=250-Round((r-25)*cos(t.minute*6*Grd));
расчитываються координаты следующего положения стрелок(ну т.е если это не объёмная стрелка а просто линия)

это всё хорошо, но у тебя всё-равно координаты кривые приходят на отрисовку, потому что они не инициализированы.
например PrM1, a1, b1.

Re: Аналоговые часы трабла со стрелками

СообщениеДобавлено: 26.05.2010 19:07:07
Водород
может скайп, icq?