#property strict //--- ширина и высота канваса (холста, на котором происходит рисование) #define IMG_WIDTH 200 #define IMG_HEIGHT 200 //--- перед запуском скрипта покажем окно с параметрами #property script_show_inputs //--- дадим возможность задавать формат цвета input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA; //--- массив (буфер) для отрисовки uint ExtImg[IMG_WIDTH*IMG_HEIGHT]; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- создадим объект OBJ_BITMAP_LABEL для рисования ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0); //--- укажем имя графического ресурса для отрисовки в объекте CLOCK ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG"); //--- вспомогательные переменные double a; // угол стрелки uint nm=2700; // счетчик минут uint nh=2700*12; // счетчик часов uint w,h; // переменные для получения размеров текстовых строк int x,y; // переменные для расчета текущих координат точки привязки текстовых строк //--- крутим стрелки часов в бесконечном цикле, пока скрипт не остановят while(!IsStopped()) { //--- очистка массива буфера рисования часов ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0); //--- установка шрифта для отрисовки цифр на циферблате TextSetFont("Arial",-200,FW_EXTRABOLD,0); //--- рисуем циферблат for(int i=1;i<=12;i++) { //--- получим размеры текущего часа на циферблате TextGetSize(string(i),w,h); //--- вычислим координаты текущего часа на циферблате a=-((i*300)%3600*M_PI)/1800.0; x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2); y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2); //--- вывод этого часа на циферблат в буфер ExtImg[] TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); } //--- теперь установим шрифт для отрисовки минутной стрелки TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600)); //--- получим размеры минутной стрелки TextGetSize("----->",w,h); //--- вычислим координаты минутной стрелки на циферблате a=-(nm%3600*M_PI)/1800.0; x=IMG_WIDTH/2-int(sin(a)*h/2+0.5); y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5); //--- вывод минутной стрелки на циферблат в буфер ExtImg[] TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); //--- теперь установим шрифт для отрисовки часовой стрелки TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600)); TextGetSize("==>",w,h); //--- вычислим координаты часовой стрелки на циферблате a=-(nh/12%3600*M_PI)/1800.0; x=IMG_WIDTH/2-int(sin(a)*h/2+0.5); y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5); //--- вывод часовой стрелки на циферблат в буфер ExtImg[] TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format); //--- обновление графического ресурса ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format); //--- принудительное обновление графика ChartRedraw(); //--- увеличим счетчики часа и минут nm+=60; nh+=60; //--- выдержим небольшую паузу между кадрами Sleep(10); } //--- удалим объект CLOCK при завершении работы скрипта ObjectDelete(0,"CLOCK"); //--- }