Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.42.158] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
привет всем!
помогите сделать простые стрелочные часы с обьектом PaintBox желательно! главное чтобы небыли замороченны чтобы я в них разобрался! обсолютно любые идеи даже самые тупые и глупые кто может! HELP ME! |
Сообщ.
#2
,
|
|
|
Положи на форму TTimer, поставь ему период порядка 200 мс. Напиши обработчик его события OnTimer. А дальше сплошная геометрия.
P.S. Рисовать на Canvas'е компонента, используя метод LineTo. Это если попроще. P.P.S. А цифирьки выводить методом TextOut. |
Сообщ.
#3
,
|
|
|
trainer, спасибо! а ты смог бы написать стрелочные часы на С под ДОС?? длин экзамен сдаем и никто незнает че делать а надо такую прогу! безразници как работать она буит главное чтобы стрелкка двигалась!
|
Сообщ.
#4
,
|
|
|
Цитата а еще вопрос как сделать так чтобы в Edit1 в каждый раз при сробатовании таймера а числу прибавлялось 1 ну тоесть чтобы цифры писались 1,2,3,... В обработчике таймера объяви переменную и прибавляй к ней число. На вскидку выглядеть может так: static MyTick; Edit1->Text = MyTick++; Насчет часов: Смотри аттач из личных запасов Добавлено Цитата |DC|*Magnum* @ trainer, спасибо! а ты смог бы написать стрелочные часы на С под ДОС?? А мне электронные можно? и что бы в трей скручивались Под ДОС!!! Прикреплённый файлclock.rar (4.38 Кбайт, скачиваний: 152) |
Сообщ.
#5
,
|
|
|
struct point_t{ int x, y; }; struct clock_arrow_t{ point_t arrow; point_t get_current( const point_t & center, const double & sin_alfa, const double & cos_alfa ){ point_t _pos; _pos.x = center.x + (arrow.x-center.x) * cos_alfa - (arrow.y-center.y) * sin_alfa; _pos.y = center.y + (arrow.y-center.y) * cos_alfa + (arrow.x-center.x) * sin_alfa; return _pos; } }; struct clock_t{ point_t center; clock_arrow_t sec_arrow; }; берем за основу, добавляем стрелок по желанию. рисуем, под ДОС только другие функции, но нарисовать линии я думаю не проблема будет // создаем часики, можно и конструктор написать. clock_t clock = { { 100, 100 }, { { 100, 80 } } }; // получаем время, из ДОС по иному unsigned short hour, min, sec, msec; Now().DecodeTime( & hour, & min, & sec, & msec ); // Так получаем конечную позицию стрелки, угол = (2*M_PI/max_param) * param. point_t sec_arrow_pos = clock.sec_arrow.get_current( clock.center, sin((M_PI/30) * sec), cos((M_PI/30) * sec) ); // рисуем, из ДОС по иному imPictureView->Canvas->FillRect( imPictureView->BoundsRect ); imPictureView->Canvas->MoveTo( clock.center.x, clock.center.y ); imPictureView->Canvas->LineTo( sec_arrow_pos.x, sec_arrow_pos.y ); |
Сообщ.
#6
,
|
|
|
Kamenev_D, спасибо конечно! но ты можешь чтото вроде таких тока под дос! у меня просто экзамен ни СИ БИЛДЕР 3,10 это просто изврашение
Добавлено Sazabis, я конечно не профи так сразу не пойму но тыбы не мог исходник скинуть если не проблемма конечно! |
Сообщ.
#7
,
|
|
|
|DC|*Magnum*, Это тоже под винды.
На форме TImage, называется imPictureView и TTimer называется tmClock функция tmClockTimer обработчик события OnTimer. Все, больше ничего нету... В этом примере крутиться секундная стрелка и все. Если нужна готовая прога то у Kamenev_D смотри, если будешь писать сам, то смотри как написана секундная стрелка и приделай по аналогии минутную и часовую. void __fastcall TfmMain::tmClockTimer( TObject *Sender ){ struct point_t{ int x, y; }; struct clock_arrow_t{ point_t arrow; point_t get_current( const point_t & center, const double & sin_alfa, const double & cos_alfa ){ point_t _pos; _pos.x = center.x + (arrow.x-center.x) * cos_alfa - (arrow.y-center.y) * sin_alfa; _pos.y = center.y + (arrow.y-center.y) * cos_alfa + (arrow.x-center.x) * sin_alfa; return _pos; } }; struct clock_t{ point_t center; clock_arrow_t sec_arrow; }; clock_t clock = { { 100, 100 }, { { 100, 80 } } }; unsigned short hour, min, sec, msec; Now().DecodeTime( & hour, & min, & sec, & msec ); point_t sec_arrow_pos = clock.sec_arrow.get_current( clock.center, sin((M_PI/30) * sec), cos((M_PI/30) * sec) ); imPictureView->Canvas->FillRect( imPictureView->BoundsRect ); imPictureView->Canvas->MoveTo( clock.center.x, clock.center.y ); imPictureView->Canvas->LineTo( sec_arrow_pos.x, sec_arrow_pos.y ); } |
Сообщ.
#8
,
|
|
|
Кстати, а реально написать часы под ДОС? Это же изврат полный. Какими функциями пользоваться для рисования стрелок? Честно говоря, даже не представляю как это может выглядеть.
|
Сообщ.
#9
,
|
|
|
Вот тебе часики под ДОС. Над кодом не смеяться: сам знаю, что он смешной, просто писал я его оооочень давно, когда только стал Си изучать (как раз под ДОС).
#include <stdio.h> #include <conio.h> #include <dos.h> #include <math.h> #include <time.h> #include <graphics.h> #define o outtextxy int gd=0,gm,i; char g[20],gg[20]; float a1,a2,a3,pi=3.1415925; struct time t; struct date d; int sec; void draw() { line(320,240,320+120*cos(a1),240+120*sin(a1)); line(320,240,320+150*cos(a2),240+150*sin(a2)); line(320,240,320+175*cos(a3),240+175*sin(a3)); } void date() { settextstyle(0,0,1); outtextxy(508,11,g); if((d.da_day)<10) outtextxy(496,23,gg); else outtextxy(499,23,gg); } void main() { initgraph(&gd,&gm,"d:\\borlandc\\bgi"); // ТУТ ДОЛЖЕН БЫТЬ ТВОЙ ПУТЬ!!! circle(320,240,215); setfillstyle(1,BLUE); floodfill(320,240,WHITE); circle(320,240,200); setfillstyle(1,0); floodfill(320,240,WHITE); for(i=0;i<12;i++) { a1=i*pi/6; line(320+180*cos(a1),240+180*sin(a1),320+200*cos(a1),240+200*sin(a1)); } settextstyle(0,0,2); gettime(&t); setcolor(4); rectangle(455,1,625,60); setcolor(4); rectangle(460,6,620,35); line(455,45,480,45); line(480,45,455,60); line(625,45,600,45); line(600,45,625,60); circle(540,44,5); setcolor(15); setfillstyle(1,10); floodfill(540,44,4); setfillstyle(1,9); floodfill(573,44,4); for(int r=17;r>0;r--) { ellipse(573,44,0,270,r,5); ellipse(507,44,270,180,r,5); } setcolor(0); line(455,46,455,59); line(625,46,625,59); do { settextstyle(4,0,4); setcolor(15); o(304,62,"12"); o(395,87,"1"); o(453,144,"2"); o(472,219,"3"); o(447,293,"4"); o(395,353,"5"); o(312,373,"6"); o(238,354,"7"); o(177,294,"8"); o(155,219,"9"); o(175,142,"10"); o(233,85,"11"); circle(320,240,20); circle(320,240,3); getdate(&d); sprintf(gg,"%2d.%02d.%d",d.da_day,d.da_mon,d.da_year); settextstyle(0,0,2); a1=(t.ti_hour%12+t.ti_min/60.0+t.ti_sec/3600.0)*pi/6-pi/2; a2=(t.ti_min+t.ti_sec/60.0)*pi/30-pi/2; a3=t.ti_sec*pi/30-pi/2; sprintf(g,"%02d:%02d:%02d",t.ti_hour,t.ti_min,t.ti_sec); setcolor(14); date(); setcolor(15); draw(); sec=t.ti_sec; if((t.ti_sec==0) && (t.ti_min==0)) printf("\a"); do { gettime(&t); } while (sec==t.ti_sec); setcolor(0); draw(); date(); } while(!kbhit()); closegraph(); } |
Сообщ.
#10
,
|
|
|
KAV, спаиб какраз такой клупый код и нужен глупый! чтобы подозрения не вызывать!
во наконецто заработало! спасибр друган вечто тебя помнить буду! |
Сообщ.
#11
,
|
|
|
А по-моему, выполнять с космической скоростью sin и cos может только очень быстрый комп.
Смысл часов теряется! Добавлено Цитата KAV @ { settextstyle(4,0,4); setcolor(15); o(304,62,"12"); o(395,87,"1"); o(453,144,"2"); o(472,219,"3"); o(447,293,"4"); o(395,353,"5"); o(312,373,"6"); o(238,354,"7"); o(177,294,"8"); o(155,219,"9"); o(175,142,"10"); o(233,85,"11"); circle(320,240,20); circle(320,240,3); getdate(&d); sprintf(gg Можно было бы вывести через sin и cos. Сейчас напишу... |
Сообщ.
#12
,
|
|
|
mad_avenger, да знаю я . Я же говорю: очень давнишний код, я его писал, только 3 месяца изучая C++ в 7 классе . Так что не придирайся (вообще, я sin и cos тогда толком почти не знал ).
|
Сообщ.
#13
,
|
|
|
Цитата mad_avenger @ Можно было бы вывести через sin и cos. зачем проц гонять, если значения статичные все хорошо написано |
Сообщ.
#14
,
|
|
|
можно выложить graphics.h старых времён,а то мне очень хочется часы посмотреть
|
Сообщ.
#15
,
|
|
|
Цитата Slam @ можно выложить graphics.h старых времён,а то мне очень хочется часы посмотреть держи, вряд ли поможет без ДОСовского компила (хотя бы трешки) Добавлено Цитата Kamenev_D @ Кстати, а реально написать часы под ДОС? Отож.. На курсе Комп. графика в ДОСе рисовали трехмерные фигуры и линии пересечения с плоскостями, поверхности, скругляли Безье и т.д. - а здесь обычное 2Д (правда динамическое) Прикреплённый файлlib.zip (7.57 Кбайт, скачиваний: 126) |