Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2011, 14:26   #1
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
Сообщение graph. Часы на паскале

Привет всем! Вот недавно решил написать часы, на паскале для себя) а тут получилось не часы а эхолокатор какой-то, помогите исправить ошибку в коде, чтобы всё норм было!
Код:
program clock;
uses
    Graph, Crt;
var
   x1,x2,x3,y1,y2,y3,xt, yt:integer; {координаты}
   n:real;
   color, i,b:byte; {цвет и счетчики циклов}
   s:string;        {чтобы рисовать текст}
   Gm, Gd:Integer;
begin
     Gd:=Detect;
     InitGraph(Gd,Gm,'');
     If GraphResult <> grOk then
        Halt(1);
     Repeat
     for i:=1 to 12 do begin   {"рисование" циферблата}
     xt:=115 + round(100*sin(6.28*30*i/360));
     yt:=115 - round(100*cos(6.28*30*i/360));
     MoveTo(xt,yt);
     SetTextStyle(DefaultFont, HorizDir, 1);   { CharSize = 1 }
     SetTextJustify(LeftText, TopText);
     end;

     for b:=1 to 60 do begin; {"рисование" минутной, секундной, и часовой стрелки}
     n:=n+1;
     x1:=round(90*sin(6.28*n/60));
     y1:=round(90*cos(6.28*n/60));
     SetColor(red);
     MoveTo(320,240);
     LineTo(x1,y1);
     x2:=round(60*sin(6.28*n/3600));
     y2:=round(60*cos(6.28*n/3600));
     SetColor(White);
     MoveTo(320,240);
     LineTo(x2,y2);
     x3:=round(40*sin(6.28*n/216000));
     y3:=round(40*sin(6.28*n/216000));
     SetColor(Green);
     MoveTo(320,240);
     LineTo(x3,y3);
     Delay(10)
     end;
     until KeyPressed;
     Readln;
     CloseGraph
end.
p.s: как нарисовать цифры на циферблате, а то чё-то всю справку пролистал, ни чего не нашёл.
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк

Последний раз редактировалось ivannes; 29.06.2011 в 14:42.
ivannes вне форума Ответить с цитированием
Старый 29.06.2011, 17:08   #2
Leo08
Delphi master
Пользователь
 
Аватар для Leo08
 
Регистрация: 28.05.2011
Сообщений: 96
По умолчанию

Цифры на циферблате можно вывести функциями OutTextXY и OutText.
Более подробно о выводе текста на экран Вы можете узнать на сайте http://pascaler.ru/pascal/graphic/3/
БЯЯЯГГАААААА
Leo08 вне форума Ответить с цитированием
Старый 29.06.2011, 17:24   #3
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
Хорошо

Цитата:
Сообщение от ivannes Посмотреть сообщение
p.s: как нарисовать цифры на циферблате, а то чё-то всю справку пролистал, ни чего не нашёл.
SetTextStyle(4,4,4); {какая-то означает высоту, какая-то ширину, какая-то шрифт}
OutTextXY(50,50,'1'); {в ячейках 50x50 написать "1"} {русский не подд.}
OutTextXY(60,60,'2');
и т.д.
hon вне форума Ответить с цитированием
Старый 29.06.2011, 17:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот, нашёл поиском по форуму:

CLOCKS.rar

Цитата:
Рисует механические (аналоговые) часы
(с) Levsha100
взято на форуме программистов
тут: http://www.programmersforum.ru/showthread.php?t=56059


а ещё ОЧЕНЬ рекомендую сходить сюда:
Часы в Паскале
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.06.2011, 04:45   #5
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
По умолчанию

пасибо, но у меня есть ещё вопросы
как сделать отчистку, чтобы сильно не рябило, и как правильно использовать gettime, чтобы и время правильно показал, и часы шли?
Код:
program clock;
uses
    Graph, Crt, DOS;
var
   x1,x2,x3,y1,y2,y3,xt, yt:integer; {координаты}
   n:real;
   color, i,b:byte; {цвет и счетчики циклов}
   s:string;        {чтобы рисовать текст}
   Gm, Gd:Integer;
   c,m,h, hund:word;
begin
     Gd:=Detect;
     InitGraph(Gd,Gm,'');
     If GraphResult <> grOk then
        Halt(1);
     Repeat
     cleardevice;
     for i:=1 to 12 do begin   {"рисование" циферблата}
     xt:=115 + round(100*sin(6.28*30*i/360));
     yt:=115 - round(100*cos(6.28*30*i/360));
     MoveTo(xt,yt);
     SetColor(lightBlue);
     SetTextStyle(DefaultFont, HorizDir, 1);   { CharSize = 1 }
     SetTextJustify(LeftText, TopText);
     str(i,s);
     OutTextXY(xt,yt,s);
     end;
     {"рисование" минутной, секундной, и часовой стрелки}
     gettime(c,m,h, hund);
     x1:=115+round(90*sin(6.28*c/60));
     y1:=115-round(90*cos(6.28*c/60));
     SetColor(red);
     SetLineStyle(0,0,3);
     MoveTo(120,120);
     LineTo(x1,y1);
     x2:=115+round(60*sin(6.28*m/3600));
     y2:=115-round(60*cos(6.28*m/3600));
     SetColor(White);
     SetLineStyle(0,0,3);
     MoveTo(120,120);
     LineTo(x2,y2);
     x3:=115+round(40*sin(6.28*h/216000));
     y3:=115-round(40*cos(6.28*h/216000));
     SetColor(Green);
     setlineStyle(0,0,3);
     MoveTo(120,120);
     LineTo(x3,y3);
     Delay(10);
     until KeyPressed;
     Readln;
     CloseGraph
end.
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк

Последний раз редактировалось ivannes; 30.06.2011 в 06:00.
ivannes вне форума Ответить с цитированием
Старый 30.06.2011, 08:02   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Repeat
cleardevice;
Ну это не самая лучшая идея.
Оформи код вывода часов в процедуру, которой будешь передавать колор.
Тогда
Код:
     Repeat
       Часы(Белый);       Delay(10);       Часы(Черный);
       Меняем время. 
     until KeyPressed;
Тогда часы будут себя стирать - зарисовывая цветом фона
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2011, 10:28   #7
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
По умолчанию

а можно что-нить попроще т.к. я в паскале не так долго и не умею писать процедурки такого профиля
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк
ivannes вне форума Ответить с цитированием
Старый 30.06.2011, 15:22   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
можно что-нить попроще т.к. я в паскале не так долго и не умею писать процедурки такого профиля
речь идёт о Вашем же примере.
Stilet абсолютно правильно предложил.
выкиньте cleardevice; (из-за него и "мигает")
вместо него, измените алгоритм.
НАЧАЛО ЦИКЛА
прежде, чем считать новое время,
рисуйте стрелки часов ЦВЕТОМ ФОНА (это равносильно стиранию нарисованного ранее)
потом считываете новое время, пересчитываете новое положение стрелок
выводите их своими цветами.
делайте задержку (маленькую. например, на 1/100 секунды - это Delay(100);
потом повторяете цикл (переход на НАЧАЛО ЦИКЛА)

и всё...

примерно так:
Код:
program clock;
uses
    Graph, Crt, DOS;
var
   x1,x2,x3,y1,y2,y3,xt, yt:integer; {координаты}
   n:real;
   color, i,b:byte; {цвет и счетчики циклов}
   s:string;        {чтобы рисовать текст}
   Gm, Gd:Integer;
   c,m,h, hund:word;
begin
     Gd:=Detect;
     InitGraph(Gd,Gm,'');
     If GraphResult <> grOk then
        Halt(1);
     cleardevice;
     for i:=1 to 12 do begin   {"рисование" циферблата}
       xt:=115 + round(100*sin(6.28*30*i/360));
       yt:=115 - round(100*cos(6.28*30*i/360));

       MoveTo(xt,yt);
       SetColor(lightBlue);
       SetTextStyle(DefaultFont, HorizDir, 1);   { CharSize = 1 }
       SetTextJustify(LeftText, TopText);
       str(i,s);
       OutTextXY(xt,yt,s);
     end;

     gettime(h, m, c, hund);

     x1:=115+round(90*sin((c*6+270)*Pi/180));
     y1:=115-round(90*cos((c*6+270)*Pi/180));
     x2:=115+round(60*sin((m*6+270)*Pi/180));
     y2:=115-round(60*cos((m*6+270)*Pi/180));
     x3:=115+round(40*sin((h*6+270)*Pi/180));
     y3:=115-round(40*cos((h*6+270)*Pi/180));

     repeat
       {стираем старое - рисуем чёрным цветом}
       SetColor(BLACK);
       SetLineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x1,y1);
       SetLineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x2,y2);
       setlineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x3,y3);


       {"рисование" минутной, секундной, и часовой стрелки}
       gettime(h, m, c, hund);
       x1:=115+round(90*sin((c*6+270)*Pi/180));
       y1:=115-round(90*cos((c*6+270)*Pi/180));
       x2:=115+round(60*sin((m*6+270)*Pi/180));
       y2:=115-round(60*cos((m*6+270)*Pi/180));
       x3:=115+round(40*sin((h*6+270)*Pi/180));
       y3:=115-round(40*cos((h*6+270)*Pi/180));
       SetColor(red);
       SetLineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x1,y1);

       {minutnay strelka}
       SetColor(White);
       SetLineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x2,y2);

       {chasovay strelka}
       SetColor(Green);
       setlineStyle(0,0,3);
       MoveTo(120,120);
       LineTo(x3,y3);

       Delay(50);
     until KeyPressed;
     Readln;
     CloseGraph
end.

Последний раз редактировалось Serge_Bliznykov; 30.06.2011 в 17:19.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.07.2011, 14:33   #9
ivannes
Пользователь
 
Аватар для ivannes
 
Регистрация: 16.06.2011
Сообщений: 42
По умолчанию

спасибо! вот что-то такое мне и надо было!
Помог? тогда жми на весы
Девушка что оператор мобильной связи, когда денег нет, то она не доступна ©Радио Маяк
ivannes вне форума Ответить с цитированием
Старый 08.01.2014, 00:45   #10
Babnik88
Новичок
Джуниор
 
Регистрация: 08.01.2014
Сообщений: 1
По умолчанию

можно стрелку закрашивать цветом фона как на видео:
http://www.youtube.com/watch?v=eYAipib1cAU
И никакого мигания нет.
Babnik88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль.Как подключить модуль ''graph'' в паскале abc? AndrewPl Помощь студентам 11 22.03.2013 19:11
программа цифровые часы на Паскале ЯН_КА Помощь студентам 16 21.11.2010 13:40
graph в паскале Милана Р Помощь студентам 0 07.06.2010 15:34
Работа с графическим модулем Graph на Паскале ifen Помощь студентам 0 09.06.2009 19:51
2 задачи на Graph в Паскале Rise Помощь студентам 1 30.05.2009 18:04