TextGetSize

Gibt die Breite und Höhe der Zeile mit den aktuellen Schrifteinstellungen zurück.

bool  TextGetSize(
   const string       text,          // Textzeile
   uint&               width,        // Pufferbreite in Punkte
   uint&               height        // Pufferhöhe in Punkte
   );

Optionen

text

[in]  Die Zeile, für deren wir die Höhe und Breite erhalten.

width

[out]  Die Eingangsparameter für die Breite.

height

[out]  Die Eingangsparameter für die Höhe.

Rückgabewert

Gibt bei Erfolg true zurück, ansonsten false. Mögliche Fehlercodes:

  • ERR_INTERNAL_ERROR(4001) - in dem Fall eines Betriebssystemfehlers.

 

Beispiel:

#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"
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- drei Zeilen Text für die Ausgabe in das Chart vorbereiten
   string text1="Dies ist die erste Textzeile";
   string text2="Die zweite Zeile enthält ebenfalls Text";
   string text3="Jedes Wort in jeder Zeile hat seine eigene Größe";
   
   string text_array1[];   // Array zum Abrufen der Wörter aus Zeichenfolge 1
   string text_array2[];   // Array zum Abrufen der Wörter aus Zeichenfolge 2
   string text_array3[];   // Array zum Abrufen der Wörter aus Zeichenfolge 3
   
//--- drei Arrays mit Wörtern füllen
   if(!SplitTextIntoWords(text1text_array1) || !SplitTextIntoWords(text2text_array2) || !SplitTextIntoWords(text3text_array3))
      return;
      
//--- aktuelle Chart-ID
   long   chart_idChartID();
   
//--- Deklaration der Parameter der grafischen Ressource
   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;
  
//--- Erstellen einer grafischen Ressource für die Textausgabe
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- Größe des Leerzeichens anhand von Breite und Höhe ermitteln
   int space_w=0space_h=0;
   if(!TextGetSize(" "space_wspace_h))
     {
      PrintFormat("%s: TextGetSize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return
     }
   
//--- Erhöhen des vertikalen Abstands zwischen den Zeichenfolgen um 2 und zeichnen Sie die Texte aus drei Arrays in das Chart ein.
   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);
   
//--- Nachdem alle Texte angezeigt wurden, aktualisieren Sie die Ressourcendaten.
   Update(RES_NAMErc_datarc_widthrc_heighttrue);
   
//--- fünf Sekunden warten, dann die Ressource freigeben und das grafische Objekt löschen
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   /*
   Als Ergebnis der Skriptausführung werden drei Textzeichenfolgen im Chart angezeigt.
   Jedes einzelne Wort in jeder Zeichenfolge wird in einem Abstand zum vorherigen Wort angezeigt,
   entsprechend der Breite des Textes des vorherigen Wortes, die mit der Funktion TextGetSize(); ermittelt wurde
   Das Journal enthält alle Wörter jeder Zeichenfolge mit ihren Größen:
   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
   */ 
  }
//+----------------------------------------------------------------------------+
//| Eine Zeichenfolge anhand des "Leerzeichen" (" ") einem Wort-Array zuweisen |
//+----------------------------------------------------------------------------+
bool SplitTextIntoWords(const string textstring &array[])
  {
   ResetLastError();
   if(StringSplit(textStringGetCharacter(" "0), array)<0)
     {
      PrintFormat("%s: StringSplit() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   return(true);
  }
//+------------------------------------------------------------------+
//| Text aus einem Array in einem Chart anzeigen                     |
//+------------------------------------------------------------------+
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;  // Breite und Höhe des Textes
   int x=text_x;           // X Koordinate des Ausgabetextes
   
//--- einen Header mit dem Namen des verarbeiteten Wort-Arrays ausgeben
   Print("Text array "array_num,":");
   
//--- in einer Schleife durch das Wort-Array
   int total=(int)array.Size();
   for(int i=0i<totali++)
     {
      //--- das nächste Wort abrufen und an das Chart senden (wir zeichnen es in das Ressourcen-Pixel-Array) 
      string word=array[i];
      TextOut(wordxtext_yANCHOR_LEFT_UPPERpixel_datares_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      
      //--- Textgröße des aktuellen Wortes abrufen
      ResetLastError();
      if(!TextGetSize(wordwidthheight))
        {
         PrintFormat("%s: TextGetSize(\"%s\") fehlgeschlagen. Error code %d",__FUNCTION__wordGetLastError()); 
         continue
        }
      //--- Ausdruck der Textdaten im Journal – das Wort, seine Breite und Höhe,
      //--- dann erhöhen wir die X-Koordinate des nächsten Wortes um (Wortbreite) + (Leerzeichenbreite).
      PrintFormat("[%d] word: \"%s\", width=%d, height=%d",iwordwidthheight);
      x+=width+space_w;
     }
  }
//+------------------------------------------------------------------+
//| Grafische Ressource für das gesamte Chart erstellen              |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- Festlegen der Größe des Pixelarrays
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- Füllen des Pixelarrays mit einer transparenten Farbe und Erstellen einer grafischen Ressource auf der Grundlage dieser Farbe
   ArrayInitialize(pixel_data0x00FFFFFF); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() fehlgeschlagen. Error code ",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- Erstellen des Grafiklabel-Objekt an den Koordinaten der oberen linken Ecke des Charts.
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- die Breite und Höhe des erstellten Bitmap-Objekts auf die Breite und Höhe der grafischen Ressource einstellen.
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_XSIZEwidth))
     {
      PrintFormat("%s: ObjectSetInteger() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_YSIZEheight))
     {
      PrintFormat("%s: ObjectSetInteger() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
//--- Angabe der zuvor erstellten grafischen Ressource für das Bitmap-Objekt als Bilddatei
//--- in diesem Fall müssen wir, um den Namen der verwendeten grafischen Ressource anzugeben, "::" vor ihrem Namen hinzufügen
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() fehlgeschlagen. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- alles in Ordnung
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Grafische Ressourcendaten aktualisieren                          |
//+------------------------------------------------------------------+ 
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- Verlassen, wenn Dimensionen von 0 übergeben wurden
   if(width==0 || height==0
      return
//--- Ressourcendaten aktualisieren und den Chart neu zeichnen
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

 

Sehen Sie auch

Ressourcen, ResourceCreate(), ResourceSave(), TextSetFont(), TextOut()