TextGetSize

La funzione restituisce la larghezza della linea e l'altezza alle correnti impostazioni dei caratteri.

bool  TextGetSize(
   const string       text,          // stringa di testo
   uint&               width,        // larghezza del buffer in pixels
   uint&               height        // altezza del buffer in pixels
   );

Parametri

text

[in] Stringa, per cui lunghezza e larghezza devono essere ottenute.

width

[out] Parametro d'ingresso per la ricezione della larghezza.

height

[out] Parametro d'input per la ricezione di altezza.

Valore restituito

Restituisce true se ha successo, altrimenti false. Possibili errori di codice:

  • ERR_INTERNAL_ERROR(4001) - errore sistema operativo.

 

Esempio:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   COORD_X    200
#define   COORD_Y    100
#define   OBJ_NAME   "TestTextGetSizeBitmapLabel"
#define   RES_NAME   "TestTextGetSizeResource"
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- preparare tre righe di testo per l'output sul grafico
   string text1="This is the first line of text";
   string text2="The second line also contains text";
   string text3="Each word in each line has its own size";
   
   string text_array1[];   // array per ottenere l'insieme di parole dalla stringa 1
   string text_array2[];   // array per ottenere l'insieme di parole dalla stringa 2
   string text_array3[];   // array per ottenere l'insieme di parole dalla stringa 3
   
//--- riempire tre array di parole
   if(!SplitTextIntoWords(text1text_array1) || !SplitTextIntoWords(text2text_array2) || !SplitTextIntoWords(text3text_array3))
      return;
      
//--- ID del grafico corrente
   long   chart_idChartID();
   
//--- dichiarare i parametri della risorsa grafica
   uint   rc_width =(int)ChartGetInteger(chart_idCHART_WIDTH_IN_PIXELS); 
   uint   rc_height=(int)ChartGetInteger(chart_idCHART_HEIGHT_IN_PIXELS); 
   uint   rc_data[]; 
   uint   rc_size=rc_width*rc_height;
  
//--- creare una risorsa grafica per l'output di testo
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- ottenere la dimensione del carattere spazio in base alla larghezza e all'altezza
   int space_w=0space_h=0;
   if(!TextGetSize(" "space_wspace_h))
     {
      PrintFormat("%s: TextGetSize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return
     }
   
//--- aumentare di 2 l'indentazione verticale tra le stringhe e traccia i testi dei tre array sul grafico
   space_h+=2;
   TextArrayToChart(1text_array1COORD_XCOORD_Y+space_h*0space_wrc_datarc_widthrc_height);
   TextArrayToChart(2text_array2COORD_XCOORD_Y+space_h*1space_wrc_datarc_widthrc_height);
   TextArrayToChart(3text_array3COORD_XCOORD_Y+space_h*2space_wrc_datarc_widthrc_height);
   
//--- dopo che tutti i testi sono stati visualizzati, aggiornare i dati delle risorse
   Update(RES_NAMErc_datarc_widthrc_heighttrue);
   
//--- attendere cinque secondi, quindi libera la risorsa ed elimina l'oggetto grafico
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   /*
   tre stringhe di testo vengono visualizzate sul grafico come risultato dell'esecuzione dello script
   ogni singola parola in ogni stringa viene visualizzata ad una distanza dalla parola precedente,
   uguale alla larghezza del testo della parola precedente ottenuta utilizzando la funzione TextGetSize();
   il diario conterrà tutte le parole di ogni stringa con le loro dimensioni:
   Text array 1:
   [0word"This"width=29height=18
   [1word"is"width=12height=18
   [2word"the"width=21height=18
   [3word"first"width=25height=18
   [4word"line"width=24height=18
   [5word"of"width=13height=18
   [6word"text"width=24height=18
   Text array 2:
   [0word"The"width=26height=18
   [1word"second"width=51height=18
   [2word"line"width=24height=18
   [3word"also"width=29height=18
   [4word"contains"width=58height=18
   [5word"text"width=24height=18
   Text array 3:
   [0word"Each"width=36height=18
   [1word"word"width=34height=18
   [2word"in"width=12height=18
   [3word"each"width=34height=18
   [4word"line"width=24height=18
   [5word"has"width=25height=18
   [6word"its"width=16height=18
   [7word"own"width=28height=18
   [8word"size"width=28height=18
   */ 
  }
//+---------------------------------------------------------------------------------------------------------+
//| Dividi una stringa in un array di parole utilizzando il separatore di spazio (" ")                      |
//+---------------------------------------------------------------------------------------------------------+
bool SplitTextIntoWords(const string textstring &array[])
  {
   ResetLastError();
   if(StringSplit(textStringGetCharacter(" "0), array)<0)
     {
      PrintFormat("%s: StringSplit() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   return(true);
  }
//+----------------------------------------------------------------------+
//| Visualizzare il testo da un array su un grafico                      |
//+----------------------------------------------------------------------+
void TextArrayToChart(int array_numstring &array[], const int text_xconst int text_yint space_wuint &pixel_data[], const uint res_widthconst uint res_height)
  {
   int width=0height=0;  // larghezza e altezza del testo
   int x=text_x;           // Coordinata X del testo di output
   
//--- stampa un'intestazione con il nome dell'array di parole elaborato
   Print("Text array "array_num,":");
   
//--- in un ciclo tramite l'array di parole
   int total=(int)array.Size();
   for(int i=0i<totali++)
     {
      //--- ottenere la parola successiva e inviarla al grafico (la disegniamo nell'array di pixel della risorsa) 
      string word=array[i];
      TextOut(wordxtext_yANCHOR_LEFT_UPPERpixel_datares_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      
      //--- ottenere la dimensione del testo della parola corrente
      ResetLastError();
      if(!TextGetSize(wordwidthheight))
        {
         PrintFormat("%s: TextGetSize(\"%s\") failed. Error code %d",__FUNCTION__wordGetLastError()); 
         continue
        }
      //--- stampare i dati di testo nel journal - la parola, la sua larghezza e altezza,
      //--- quindi aumentare la coordinata X della parola successiva di (larghezza della parola) + (larghezza dello spazio)
      PrintFormat("[%d] word: \"%s\", width=%d, height=%d",iwordwidthheight);
      x+=width+space_w;
     }
  }
//+------------------------------------------------------------------+
//| Creare una risorsa grafica per l'intero grafico                  |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- impostare la dimensione dell'array di pixel
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- riempire l'array di pixel con un colore trasparente e creare una risorsa grafica basata su di esso
   ArrayInitialize(pixel_data0x00FFFFFF); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- creare l'oggetto Etichetta Grafica alle coordinate dell'angolo in alto a sinistra del grafico
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- impostare la larghezza e l'altezza dell'oggetto bitmap creato uguali alla larghezza e all'altezza della risorsa grafica.
//--- impostare il punto di ancoraggio dell'oggetto al suo centro.
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_XSIZEwidth))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_YSIZEheight))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
//--- specificare la risorsa grafica creata in precedenza per l'oggetto bitmap come file immagine
//--- in questo caso, per indicare il nome della risorsa grafica utilizzata, dobbiamo aggiungere "::" prima del suo nome
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- tutto è andato bene
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Aggiornare i dati della risorsa grafica                          |
//+------------------------------------------------------------------+ 
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- esci se vengono passate dimensioni zero
   if(width==0 || height==0
      return
//--- aggiorna i dati delle risorse e ridisegna il grafico
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

 

Vedi anche

Risorse, ResourceCreate(), ResourceSave(), TextSetFont(), TextOut()