На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> делаем часы , помогите сделать пройтейшие стрелочные часы!
    привет всем!
    помогите сделать простые стрелочные часы с обьектом PaintBox желательно!
    главное чтобы небыли замороченны чтобы я в них разобрался! обсолютно любые идеи даже самые тупые и глупые кто может! HELP ME!
      Положи на форму TTimer, поставь ему период порядка 200 мс. Напиши обработчик его события OnTimer. А дальше сплошная геометрия. :)

      P.S. Рисовать на Canvas'е компонента, используя метод LineTo. Это если попроще. :)
      P.P.S. А цифирьки выводить методом TextOut. :)
      Сообщение отредактировано: trainer -
        trainer, спасибо! а ты смог бы написать стрелочные часы на С под ДОС?? длин экзамен сдаем и никто незнает че делать а надо такую прогу! безразници как работать она буит главное чтобы стрелкка двигалась!
        Сообщение отредактировано: |DC|*Magnum* -
          Цитата
          а еще вопрос как сделать так чтобы в Edit1 в каждый раз при сробатовании таймера а числу прибавлялось 1 ну тоесть чтобы цифры писались 1,2,3,...


          В обработчике таймера объяви переменную и прибавляй к ней число. На вскидку выглядеть может так:

          ExpandedWrap disabled
             static MyTick;
             Edit1->Text = MyTick++;


          Насчет часов: Смотри аттач из личных запасов :yes:

          Добавлено
          Цитата |DC|*Magnum* @
          trainer, спасибо! а ты смог бы написать стрелочные часы на С под ДОС??
          :lol: :D

          А мне электронные можно? и что бы в трей скручивались :lool:
          Под ДОС!!! :lool: :lool:
          Сообщение отредактировано: Kamenev_D -

          Прикреплённый файлПрикреплённый файлclock.rar (4.38 Кбайт, скачиваний: 152)
            ExpandedWrap disabled
                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;
                };

            берем за основу, добавляем стрелок по желанию.

            рисуем, под ДОС только другие функции, но нарисовать линии я думаю не проблема будет

            ExpandedWrap disabled
                
              // создаем часики, можно и конструктор написать.
              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 );
              Kamenev_D, спасибо конечно! но ты можешь чтото вроде таких тока под дос! у меня просто экзамен ни СИ БИЛДЕР 3,10 это просто изврашение

              Добавлено
              Sazabis, я конечно не профи так сразу не пойму но тыбы не мог исходник скинуть если не проблемма конечно!
                |DC|*Magnum*, Это тоже под винды.
                На форме TImage, называется imPictureView и TTimer называется tmClock
                функция tmClockTimer обработчик события OnTimer. Все, больше ничего нету...
                В этом примере крутиться секундная стрелка и все.
                Если нужна готовая прога то у Kamenev_D смотри, если будешь писать сам, то смотри как написана секундная стрелка и приделай по аналогии минутную и часовую.

                ExpandedWrap disabled
                  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 );
                   
                  }
                  Кстати, а реально написать часы под ДОС? Это же изврат полный. Какими функциями пользоваться для рисования стрелок? Честно говоря, даже не представляю как это может выглядеть. :wacko:
                    Вот тебе часики под ДОС. Над кодом не смеяться: сам знаю, что он смешной, просто писал я его оооочень давно, когда только стал Си изучать (как раз под ДОС).
                    ExpandedWrap disabled
                      #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();
                       }
                    P.S. Это еще и с пейджером в правом верхнем углу :)
                    Сообщение отредактировано: KAV -
                      KAV, спаиб какраз такой клупый код и нужен глупый! чтобы подозрения не вызывать!
                      во наконецто заработало! спасибр друган вечто тебя помнить буду!
                      Сообщение отредактировано: |DC|*Magnum* -
                        А по-моему, выполнять с космической скоростью 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.
                        Сейчас напишу...
                          mad_avenger, да знаю я :). Я же говорю: очень давнишний код, я его писал, только 3 месяца изучая C++ в 7 классе :). Так что не придирайся (вообще, я sin и cos тогда толком почти не знал :ph34r: ).
                            Цитата mad_avenger @
                            Можно было бы вывести через sin и cos.

                            зачем проц гонять, если значения статичные :) все хорошо написано :)
                              можно выложить graphics.h старых времён,а то мне очень хочется часы посмотреть :(
                                Цитата Slam @
                                можно выложить graphics.h старых времён,а то мне очень хочется часы посмотреть :(

                                держи, вряд ли поможет без ДОСовского компила (хотя бы трешки)

                                Добавлено
                                Цитата Kamenev_D @
                                Кстати, а реально написать часы под ДОС?


                                Отож..

                                На курсе Комп. графика в ДОСе рисовали трехмерные фигуры и линии пересечения с плоскостями, поверхности, скругляли Безье и т.д. - а здесь обычное 2Д (правда динамическое)

                                :)
                                Прикреплённый файлПрикреплённый файлlib.zip (7.57 Кбайт, скачиваний: 126)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0483 ]   [ 16 queries used ]   [ Generated: 15.05.24, 10:08 GMT ]