TextOut

La funzione consente di visualizzare un testo in un array personalizzato (buffer) e restituisce il risultato di tale operazione. L'array è stato designato per creare la risorsa grafica.

bool  TextOut(
   const string       text,          // testo visualizzato
   int                x,             // coordinata X 
   int                y,             // coordinata Y
   uint               anchor,        // tipo di ancora
   uint               &data[],       // output buffer
   uint               width,         // larghezza buffer in pixels
   uint               height,        // altezza buffer in pixels
   uint               color,         // colore testo
   ENUM_COLOR_FORMAT  color_format   // formato del colore per l'output
   );

Parametri

text

[in] Testo visualizzato che verrà scritto nel buffer. Solo un testo su una-riga viene visualizzato.

x

[in] Coordinata X del punto di ancoraggio del testo visualizzato.

y

[in] Coordinata Y del punto di ancoraggio del testo visualizzato.

ancora

[in] Il valore dei 9 predefiniti metodi di visualizzazione del luogo del punto di ancoramento del testo. Il valore viene impostato da una combinazione di due flags - flags di allineamento testo orizzontale e verticale. I nomi dei flags sono elencati nella Nota seguente.

data[]

[in] buffer, in cui il testo viene visualizzato. Il buffer viene utilizzato per creare la risorsa del grafico.

width

[in] Larghezza Buffer in pixel.

height

[in] Altezza Buffer in pixel.

color

[in] Colore testo.

color_format

[in] Il formato del colore viene impostato dal valore dell'enumerazione ENUM_COLOR_FORMAT.

Valore restituito

Restituisce true se ha successo, altrimenti false.

Nota

Il punto di ancoraggio specificato da anchor è una combinazione di due flag di allineamento testo orizzontale e verticale. Flags allineamento testo orizzontale:

  • TA_LEFT - punto di ancoraggio sul lato sinistro del riquadro di delimitazione
  • TA_CENTER - il punto di ancoraggio orizzontale si trova al centro del riquadro di delimitazione
  • TA_RIGHT - punto di ancoraggio sul lato destro del riquadro di delimitazione

Flags allineamento testo verticale:

  • TA_TOP - punto di ancoraggio sul lato superiore del riquadro di delimitazionee
  • TA_VCENTER - punto di ancoraggio verticale si trova al centro del riquadro di delimitazione
  • TA_BOTTOM - punto di ancoraggio sul lato inferiore del riquadro di delimitazione

 

Possibili combinazioni di flags e punti di ancoraggio specifici, sono mostrati nell'immagine.
 

9 modi possibili di associare una stringa di testo

 

Esempio:

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

Vedi anche

Risorse, ResourceCreate(), ResourceSave(), TextGetSize(), TextSetFont()