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:

//--- spessore ed altezza della tela (usata per il disegno)
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- mostra la finestra parametri prima di lanciare lo script
#property script_show_inputs
//--- abilitare per impostare il formato del colore
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- disegno array (buffer)
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script                                         |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
//--- crea l'oggetto OBJ_BITMAP_LABEL per il disegno    
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- specifica il nome delle risorse grafiche per scrivere l'oggetto CLOCK
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- variabili ausiliari
   double a;            // angolo della freccia
   uint   nm=2700;      // angolo del minuto
   uint   nh=2700*12;   // angolo dell'ora
   uint   w,h;          // variabili per ricevere la grandezza della stringa testuale 
   int    x,y;          // variabili per il calcolo delle coordinate correnti dei punti di ancoraggio della stringa testuale 
 
//--- ruota le "lancette" dell'orologio in un loop infinito, finchè lo script viene interrotto
   while(!IsStopped())
     {
      //--- ripulisce il buffer array del disegno dell'orologio
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
      //--- imposta il carattere per il disegno delle cifre per la facciata dell'orologio
      TextSetFont("Arial",-200,FW_EXTRABOLD,0);
      //--- disegna la facciata dell'orologio
      for(int i=1;i<=12;i++)
        {
         //--- riceve la grandezza dell'ora corrente sulla facciata dell'orologio
         TextGetSize(string(i),w,h);
         //--- calcola le coordinate dell'ora corrente sulla facciata dell'orologio
         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);
         //--- da in output l'ora sulla facciata dell'orologio per il buffer ExtImg[]
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
        }
      //--- ora, specifica il carattere per il disegno della parte dei minuti      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
      //--- riceve la grandezza della parte dei minuti
      TextGetSize("----->",w,h);
      //--- calcola le coordinate della parte dei minuti sulla facciata dell'orologio
      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);
      //--- da in output la parte dei minuti sulla facciata dell'orologio nel buffer ExtImg[]
      TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- ora, imposta il font per il disegno della parte dei minuti
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
      TextGetSize("==>",w,h);
      //--- calcola le coordinata della parte dell'ora sulla facciata dell'orologio
      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);
      //--- da in output la parte dell'ora sulla facciata dell'orologio nel buffer ExtImg[]
      TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- aggiorna la risorsa grafica
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
      //--- forza l'aggiornamento del chart
      ChartRedraw();
 
      //--- incrementa i contatori dell'ora e del minuto
      nm+=60;
      nh+=60;
      //--- mantiene una breve pausa tra i frames
      Sleep(10);
     }
//--- elimina l'oggetto CLOCK quando si completa l'operazione dello script
   ObjectDelete(0,"CLOCK");
//---
  }

Vedi anche

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