#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");
//---
} |