//--- larghezza e altezza dell'area di disegno (quella su cui avviene il disegno)
#define IMG_WIDTH 200
#define IMG_HEIGHT 200
//--- prima di eseguire lo script, mostra una finestra con i parametri
#property script_show_inputs
//--- fornire la possibilità di impostare il formato del colore
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- array (buffer) per il rendering
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- creare l'oggetto OBJ_BITMAP_LABEL per il disegno
ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- impostare il nome della risorsa grafica per il rendering nell'oggetto CLOCK
ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
//--- variabili ausiliarie
double a; // angolo della freccia
uint nm=2700; // contatore dei minuti
uint nh=2700*12; // contatore delle ore
uint w,h; // variabili per ottenere le dimensioni delle stringhe di testo
int x,y; // variabili per il calcolo delle coordinate correnti del punto di ancoraggio delle stringhe di testo
//--- fai girare le lancette dell'orologio in un ciclo infinito finché lo script non viene interrotto
while(!IsStopped())
{
//--- cancellare l'array del buffer di disegno dell'orologio
ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
//--- impostare il carattere per disegnare i numeri sul quadrante
TextSetFont("Arial",-200,FW_EXTRABOLD,0);
//--- disegnare il quadrante
for(int i=1;i<=12;i++)
{
//--- ottenere la dimensione dell'ora corrente sul quadrante
TextGetSize(string(i),w,h);
//--- calcolare le coordinate dell'ora corrente sul quadrante
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);
//--- inviare quest'ora al quadrante nel buffer ExtImg[]
TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
}
//--- impostare il carattere per disegnare la lancetta dei minuti
TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
//--- ottenere la dimensione della lancetta dei minuti
TextGetSize("----->",w,h);
//--- calcolare le coordinate della lancetta dei minuti sul quadrante
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);
//--- inviare la lancetta dei minuti al quadrante nel buffer ExtImg[]
TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
//--- impostare il carattere per disegnare la lancetta delle ore
TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
TextGetSize("==>",w,h);
//--- calcolare le coordinate della lancetta delle ore sul quadrante
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);
//--- inviare la lancetta delle ore al quadrante nel buffer ExtImg[]
TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
//--- aggiornare la risorsa grafica
ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
//--- aggiornamento forzato del grafico
ChartRedraw();
//--- aumentare i contatori delle ore e dei minuti
nm+=60;
nh+=60;
//--- fai una breve pausa tra i fotogrammi
Sleep(10);
}
//--- elimina l'oggetto CLOCK al termine dello script
ObjectDelete(0,"CLOCK");
//---
}
|