TextSetFont

La funzione imposta il tipo di carattere per la visualizzazione del testo utilizzando metodi di disegno, e restituisce il risultato di tale operazione. Il carattere Arial con la dimensione -120 (12 pt) viene utilizzato per impostazione predefinita.

bool  TextSetFont(
   const string  name,            // nome del font o percorso al file di font sul disco
   int           size,            // grandeza del carattere
   uint          flags,           // combinazione di flags
   int           orientation=0    // angolo di inclinazione del testo
   );

Parametri

name

[in] Nome font nel sistema o il nome della risorsa che contiene il tipo di carattere o il percorso del file del font sul disco.

grandezza

[in] La dimensione del carattere che può essere impostata utilizzando i valori positivi e negativi. In caso di valori positivi, la dimensione di un testo visualizzato non dipende dalla impostazioni di grandezza caratteri del sistema operativo. In caso di valori negativi, il valore è impostato in decimi di punto e la grandezza del testo dipende dalle impostazioni del sistema operativo ("scala standard" o "su larga scala"). Vedere la nota di seguito per ulteriori informazioni sulle differenze tra le modalità.

flags

[in] Combinazione di flags che descrive lo stile del carattere.

orientamento

[in] L'inclinazione orizzontale di testo per l'asse X, l'unità di misura è di 0,1 gradi. Ciò significa che orientation=450 sta per un'inclinazione pari a 45 gradi.

Valore restituito

Restituisce true se il carattere corrente è stato installato correttamente, in caso contrario false. Possibili errori di codice:

  • ERR_INVALID_PARAMETER(4003) - name presenta NULL o "" (empty string),
  • ERR_INTERNAL_ERROR(4001) - errore sistema operativo (per esempio, un tentativo di creare un font non-esistente).

Nota

Se "::" è usato nel nome del carattere, il tipo di carattere viene scaricato dalla risorsa EX5. Se il nome del font viene specificato con un' estensione, il tipo di carattere viene scaricato dal file, se il percorso inizia da "\" o "/", il file viene cercato relativamente alla MQL5 directory. In caso contrario, viene cercato relativamente al percorso del file che EX5 chiamato dalla funzione TextSetFont().

La grandezza del carattere viene impostata con valori positivi o negativi. Questo fatto definisce la dipendenza della dimensione del testo dalle impostazioni del sistema operativo (scala grandezza).

  • Se la grandezza è specificata da un numero positivo, questa grandezza si trasforma in unità di misura fisica di un dispositivo (pixel) quando si cambia il tipo di carattere logico in uno fisico, e questa grandezza corrisponde all'altezza dei glifi simbolo scelto tra i font disponibili . Questo caso non è raccomandato quando il testo visualizzato dalla funzione TextOut() e quelli visualizzati dall'oggetto grafico OBJ_LABEL ("Label") devono essere usati insieme sul chart.
  • Se la grandezza è specificata da un numero negativo, questo numero dovrebbe essere impostato in decimi di punto logico (-350 è pari a 35 punti logici) ed è divisa per 10. Un valore ottenuto viene poi trasformato in unità di misura fisiche di un dispositivo (pixel) e corrisponde al valore assoluto dell'altezza di un simbolo scelto tra i font disponibili. Moltiplica la grandezza del carattere specificata nelle proprietà dell'oggetto da -10 per rendere la dimensione di un testo sullo schermo simile a quella nrll'oggetto OBJ_LABEL.

I flag possono essere usati come combinazione di flag di stile con uno dei flag che specificano la larghezza del carattere. I nomi dei flags sono di seguito.

Flags per specificare lo stile del carattere

Flag

Descrizione

FONT_ITALIC

Italic

FONT_UNDERLINE

Sottolineato

FONT_STRIKEOUT

Barrato

 

Flags per specificare la larghezza del carattere

Flag

FW_DONTCARE

FW_THIN

FW_EXTRALIGHT

FW_ULTRALIGHT

FW_LIGHT

FW_NORMAL

FW_REGULAR

FW_MEDIUM

FW_SEMIBOLD

FW_DEMIBOLD

FW_BOLD

FW_EXTRABOLD

FW_ULTRABOLD

FW_HEAVY

FW_BLACK

 

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"
#define   COLOR_NULL 0x00FFFFFF
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- ID del grafico corrente
   long   chart_idChartID();
   
   string font_names[] ={"Arial""Tahoma""Calibri"};
   uint   flags_array[]={0FONT_ITALICFONT_UNDERLINEFONT_STRIKEOUT};
   uint   fw_array[]={FW_DONTCAREFW_THINFW_EXTRALIGHTFW_ULTRALIGHTFW_LIGHT,
                      FW_NORMALFW_REGULARFW_MEDIUMFW_SEMIBOLDFW_DEMIBOLD,
                      FW_BOLDFW_EXTRABOLDFW_ULTRABOLDFW_HEAVYFW_BLACK};
   
//--- disabilitare il disegno di qualsiasi attributo del grafico dei prezzi
   ChartSetInteger(chart_idCHART_SHOWfalse);
   
//--- 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;
   
//--- ciclare i nomi dei caratteri
   for(int i=0i<(int)font_names.Size(); i++)
     {
      //--- passare attraverso i flag dei caratteri
      for(int j=0j<(int)flags_array.Size(); j++)
        {
         //--- disegnare il testo con il carattere e il flag di stile ottenuti dall'array
         DrawText(font_names[i], flags_array[j], rc_datarc_widthrc_height);
         Sleep(800);
         ArrayInitialize(rc_dataCOLOR_NULL);
        }
      Sleep(800);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- dopo aver emesso tutti i testi con dimensioni e stili di carattere diversi,
//--- mostrare il testo con flag di larghezza di carattere differenti
   for(int i=0i<(int)fw_array.Size(); i++)
     {
      //--- impostare la dimensione e il nome del carattere per visualizzare il testo con flag di larghezza
      string font_name="Tahoma";
      int    size=-140;
      TextSetFont(font_namesizefw_array[i]);
      
      //--- creare una stringa di testo disegnata, inviala all'array di pixel della risorsa e aggiorna la risorsa
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagWidthDescription(fw_array[i]), sizesize/-10);
      TextOut(textCOORD_XCOORD_YANCHOR_LEFT_UPPERrc_datarc_widthrc_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMErc_datarc_widthrc_heighttrue);
      //--- attendere un secondo
      Sleep(1000);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- attendere cinque secondi, quindi libera la risorsa ed elimina l'oggetto grafico
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   
//--- consentire di disegnare qualsiasi attributo del grafico dei prezzi
   ChartSetInteger(chart_idCHART_SHOWtrue);
   ChartRedraw(chart_id);
   /*
   I messaggi di testo vengono visualizzati sul grafico come risultato dell'esecuzione dello script.
   I testi hanno caratteri diversi, così come flag di stile e larghezza
   */ 
  }
//+------------------------------------------------------------------+
//| Visualizza cinque stringhe di testo diverse |
//| dimensioni con il carattere e i flag specificati |
//+------------------------------------------------------------------+
void DrawText(const string font_nameuint flagsuint &pixels_array[], uint res_widthuint res_height)
  {
//--- emettere cinque stringhe di testo con diverse dimensioni di carattere
   for(int i=0i<5i++)
     {
      //--- calcolare la dimensione del carattere e impostare il carattere per l'output di testo utilizzando metodi di disegno
      int size=-140+10*i;
      TextSetFont(font_namesizeflags);
      
      //--- creare una stringa di testo disegnata, inviala all'array di pixel della risorsa e aggiorna la risorsa
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagDescription(flags), sizesize/-10);
      TextOut(textCOORD_XCOORD_Y+22*iANCHOR_LEFT_UPPERpixels_arrayres_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMEpixels_arrayres_widthres_heighttrue);
      //--- aspettare un attimo
      Sleep(800);
     }
  }
//+---------------------------------------------------------------------------+
//| Restituire una descrizione dei flag di stile del carattere |
//+---------------------------------------------------------------------------+
string FlagDescription(const uint flag)
  {
   switch(flag)
     {
      case FONT_ITALIC     :  return(" Italic");
      case FONT_UNDERLINE  :  return(" Underline");
      case FONT_STRIKEOUT  :  return(" Strikeout");
     }
   return("");
  }
//+-------------------------------------------------------------------------------+
//| Restituire la descrizione dei flag di larghezza del carattere |
//+-------------------------------------------------------------------------------+
string FlagWidthDescription(const uint flag)
  {
   switch(flag)
     {
      case FW_DONTCARE  :  return(" Dontcare");
      case FW_THIN      :  return(" Thin");
      case FW_EXTRALIGHT:  return(" Extralight");
      case FW_ULTRALIGHT:  return(" Ultralight");
      case FW_LIGHT     :  return(" Light");
      case FW_NORMAL    :  return(" Normal");
      case FW_REGULAR   :  return(" Regular");
      case FW_MEDIUM    :  return(" Medium");
      case FW_SEMIBOLD  :  return(" Semibold");
      case FW_DEMIBOLD  :  return(" Demibold");
      case FW_BOLD      :  return(" Bold");
      case FW_EXTRABOLD :  return(" Extrabold");
      case FW_ULTRABOLD :  return(" Ultrabold");
      case FW_HEAVY     :  return(" Heavy");
      case FW_BLACK     :  return(" Black");
     }
   return("");
  }
//+------------------------------------------------------------------+
//| 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_dataCOLOR_NULL); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code ",__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(), TextOut()