22.11.2010, 19:37 | #1 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Создание часов в паскале
Код:
program jfj; uses graphABC; var x,y:integer; r:word; begin circle(250,250,70); circle(250,250,7); Line (250,250,210,290); Line (250,250, 290, 210); line (250,250,280,200) end. |
22.11.2010, 19:37 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Многие этим интересовались, например тут Самодельный MP3 плеер на 100 часов музыки Вопросы по ремонту электронных часов Ремонт автомобильных часов АЧК-10 |
22.11.2010, 21:42 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Естественно, выдает ошибку. Потому что Delay - это процедура модуля CRT, а у Вас этот модуль не присоединен.
|
22.11.2010, 23:38 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот Вам часы:
Код:
program jfj; uses graph,CRT,DOS; var i:integer; X1,X2,Y1,Y2,H,M,S,S100:word; SS:String; begin {Здесь нужно инициализировать графический режим} REPEAT ClearDevice; SetColor(Yellow); SetLineStyle(SolidLn,0,ThickWidth); Circle(320,240,200); SetTextStyle(DefaultFont,HorizDir,2); SetTextJustify(CenterText,CenterText); For i:=1 to 12 do begin X1:=320+ROUND(180*Sin(30*i*Pi/180)); X2:=320+ROUND(200*Sin(30*i*Pi/180)); Y1:=240-ROUND(180*Cos(30*i*Pi/180)); Y2:=240-ROUND(200*Cos(30*i*Pi/180)); Line(X1,Y1,X2,Y2); X1:=320+ROUND(160*Sin(30*i*Pi/180)); Y1:=240-ROUND(160*Cos(30*i*Pi/180)); STR(i,SS); OutTextXY(X1,Y1,SS); end; SetLineStyle(SolidLn,0,NormWidth); For i:=1 to 60 do begin X1:=320+ROUND(190*Sin(6*i*Pi/180)); X2:=320+ROUND(200*Sin(6*i*Pi/180)); Y1:=240-ROUND(190*Cos(6*i*Pi/180)); Y2:=240-ROUND(200*Cos(6*i*Pi/180)); Line(X1,Y1,X2,Y2); end; SetLineStyle(SolidLn,0,ThickWidth); SetColor(LightRed); GetTime(H,M,S,S100); If H>=12 then H:=H-12; Line(320,240,320+ROUND(100*Sin(30*(H+M/60)*Pi/180)), 240-ROUND(100*Cos(30*(H+M/60)*Pi/180))); Line(320,240,320+ROUND(160*Sin(M*6*Pi/180)), 240-ROUND(160*Cos(M*6*Pi/180))); SetColor(LightBlue); Circle(320,240,10); Delay(60000); UNTIL KeyPressed; CloseGraph; END. 1. Часы идут и даже показывают правильное время (если, конечно, на компьютере установлено таковое). 2. Выход из программы - нажатие любой клавиши. Правда, придется с минутку подождать, пока кончится время задержки. Установлена задержка в 1 минуту; в принципе, можно поставить и меньше. 3. Название Вашего графического модуля (поправите, если надо) и инициализация графического режима - самостоятельно (зависит от реализации Паскаля и свойств системы). |
23.11.2010, 08:40 | #4 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Спасибо большое...у меня кстати тоже кое-что получилось)
Проверьте пожалуйста правильно ли написана программа для этих часов. Код:
uses CRT, graphABC, Utils; var x1,y1,xh,yh,xm,ym,xc,yc,gd,gm,X,Y,i,a:integer; n:array[0..12] of string; curTime : DateTime; s:string; procedure ShowCurArrows(ShowColor : ColorType); begin SetPenColor( ShowColor ); xc:=round(X-180*cos(pi/180*(90+6*CurTime.Second))); yc:=round(Y-180*sin(pi/180*(90+6*CurTime.Second))); line(x,y,xc,yc); xm:=round(X-155*cos(pi/180*(90+6*CurTime.Minute))); ym:=round(Y-155*sin(pi/180*(90+6*CurTime.Minute))); line(x,y,xm,ym); xh:=round(X-115*cos(pi/180*(90+6*((CurTime.Hour mod 12)*5+ CurTime.Minute div 12)))); yh:=round(Y-115*sin(pi/180*(90+6*((CurTime.Hour mod 12)*5+ CurTime.Minute div 12)))); line(x,y,xh,yh); end; begin n[1]:=' 1'; n[2]:=' 2'; n[3]:='3'; n[4]:='4'; n[5]:='5'; n[6]:='6'; n[7]:='7'; n[8]:='8'; n[9]:='9'; n[10]:='10'; n[11]:='11'; n[12]:='12'; X:=WindowWidth div 2; Y:=WindowHeight div 2; circle(X,Y,190); a:=270; for i:=1 to 60 do begin x1:=round(X-205*cos(pi/180*a)); y1:=round(Y+205*sin(pi/180*a)); a:=a+6; if (a-6) mod 30=0 then TextOut(x1-16,y1-18,n[12-(i div 5)]) else end; xh:=X; yh:=Y; xm:=X; ym:=Y; xc:=X; yc:=Y; circle(X,Y,3); circle(X,Y,6); circle(X,Y,9); repeat CurTime := CurrentDateTime; ShowCurArrows( clBlack); delay(1000); ShowCurArrows( clWhite ); until keypressed; end. |
23.11.2010, 09:58 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Ну а так, внешне... Ну, например, такое: Код:
n[1]:=' 1'; n[2]:=' 2'; n[3]:='3'; n[4]:='4'; n[5]:='5'; n[6]:='6'; n[7]:='7'; n[8]:='8'; n[9]:='9'; n[10]:='10'; n[11]:='11'; n[12]:='12'; Код:
For i:=1 to 12 do STR(i,n[i]); |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
23.11.2010, 15:14 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так, ну адаптировал я Вашу программу к тем типам и процедурам, к которым привык, получилось так:
Код:
uses CRT, graph, DOS; var x1,y1,xh,yh,xm,ym,xc,yc,gd,gm,X,Y,i,a,Hour,Minute,Second,S100:integer; n:array[0..12] of string; s:string; procedure ShowCurArrows(ShowColor:BYTE); begin SetColor(ShowColor); xc:=round(X-180*cos(pi/180*(90+6*Second))); yc:=round(Y-180*sin(pi/180*(90+6*Second))); line(x,y,xc,yc); xm:=round(X-155*cos(pi/180*(90+6*Minute))); ym:=round(Y-155*sin(pi/180*(90+6*Minute))); line(x,y,xm,ym); xh:=round(X-115*cos(pi/180*(90+6*((Hour mod 12)*5+ Minute div 12)))); yh:=round(Y-115*sin(pi/180*(90+6*((Hour mod 12)*5+ Minute div 12)))); line(x,y,xh,yh); end; begin Initgraph(<тут должны быть индивидуальные пераметры>); n[1]:=' 1'; n[2]:=' 2'; n[3]:='3'; n[4]:='4'; n[5]:='5'; n[6]:='6'; n[7]:='7'; n[8]:='8'; n[9]:='9'; n[10]:='10'; n[11]:='11'; n[12]:='12'; X:=GetMaxX div 2; Y:=GetMaxY div 2; circle(X,Y,190); a:=270; for i:=1 to 60 do begin x1:=round(X-205*cos(pi/180*a)); y1:=round(Y+205*sin(pi/180*a)); a:=a+6; if (a-6) mod 30=0 then OutTextXY(x1-16,y1-18,n[12-(i div 5)]) else end; xh:=X; yh:=Y; xm:=X; ym:=Y; xc:=X; yc:=Y; circle(X,Y,3); circle(X,Y,6); circle(X,Y,9); repeat GetTime(Hour,Minute,Second,S100); ShowCurArrows(Black); delay(1000); ShowCurArrows(White); until keypressed; CloseGraph; end. Так что еще работать и работать. |
23.11.2010, 17:07 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ага, кое в чем разобрался.
Отбой, всё правильно - часы идут и показывают. Просто у меня цвета обратные - белый по черному, и при обращениях к процедуре нужно было переставить черный и белый местами. Но непонятный сдвиг лимба нумерации относительно окружности циферблата всё-таки имеет место быть. Или это дизайн такой? |
23.11.2010, 19:41 | #8 (permalink) |
Member
Регистрация: 11.11.2010
Сообщений: 85
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Репутация: 20
|
Ага...спасибо...подправлю.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|