TextGetSize

Mevcut yazı tipi ayarları için çizgi genişliğine ve yüksekliğine dönüş yapar.

bool  TextGetSize(
   const string       text,          // metin dizgisi
   uint&               width,        // piksel bazında tampon genişliği
   uint&               height        // piksel bazında tampon yüksekliği
   );

Parametreler

text

[in]  Genişlik ve yüksekliğin alınacağı dizgi.

genişlik

[out]  Genişliğin alınması için giriş parametresi.

height

[out]  Yüksekliğin alınması için giriş parametresi.

Dönüş değeri

Başarılı ise 'true' değerine, aksi durumda 'false' değerine dönüş yapar. Muhtemel hata kodları:

  • ERR_INTERNAL_ERROR(4001) - işletim sistemi hatası.

 

Örnek:

#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()
  {
//--- grafiğe çıktı olarak üç satır metin hazırla
   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[];   // 1. dizgeden kelime kümesini almak için dizi
   string text_array2[];   // 2. dizgeden kelime kümesini almak için dizi
   string text_array3[];   // 3. dizgeden kelime kümesini almak için dizi
   
//--- üç kelime dizisini doldur
   if(!SplitTextIntoWords(text1text_array1) || !SplitTextIntoWords(text2text_array2) || !SplitTextIntoWords(text3text_array3))
      return;
      
//--- mevcut grafik kimliği
   long   chart_idChartID();
   
//--- grafiksel kaynağın parametrelerini bildir
   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;
  
//--- metin çıktısı için bir grafiksel kaynak oluştur
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- boşluk karakterinin boyutunu genişlik ve yüksekliğe göre al
   int space_w=0space_h=0;
   if(!TextGetSize(" "space_wspace_h))
     {
      PrintFormat("%s: TextGetSize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return
     }
   
//--- dizgeler arasındaki dikey girintiyi 2 artır ve üç dizideki metinleri grafik üzerinde çiz
   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);
   
//--- tüm metinler görüntülendikten sonra kaynak verileri güncelle
   Update(RES_NAMErc_datarc_widthrc_heighttrue);
   
//--- beş saniye bekle, ardından kaynağı serbest bırak ve grafiksel nesneyi sil
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   /*
   komut dosyasının yürütülmesi sonucunda grafik üzerinde üç metin dizgesi görüntülenir
   her bir dizgedeki her bir kelime bir önceki kelimeden belirli bir uzaklıkta görüntülenir
   (bu uzaklık, TextGetSize() fonksiyonu kullanılarak elde edilen bir önceki kelimenin metninin genişliğine eşittir)
   günlük, her dizgenin tüm kelimelerini boyutlarıyla birlikte içerecektir:
   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
   */ 
  }
//+----------------------------------------------------------------------------+
//| Boşluk ayırıcısını (“ ”) kullanarak bir dizgeyi kelime dizisine böl        |
//+----------------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Grafik üzerinde bir dizideki metni görüntüle                     |
//+------------------------------------------------------------------+
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;  // metin genişliği ve yüksekliği
   int x=text_x;           // çıktı metninin X koordinatı
   
//--- işlenen kelime dizisinin adını içeren bir başlık yazdır
   Print("Text array "array_num,":");
   
//--- kelime dizisine göre bir döngü içinde
   int total=(int)array.Size();
   for(int i=0i<totali++)
     {
      //--- sonraki kelimeyi al ve grafiğe gönder (kaynak piksel dizisine çizeriz)
      string word=array[i];
      TextOut(wordxtext_yANCHOR_LEFT_UPPERpixel_datares_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      
      //--- mevcut kelimenin metin boyutunu al
      ResetLastError();
      if(!TextGetSize(wordwidthheight))
        {
         PrintFormat("%s: TextGetSize(\"%s\") failed. Error code %d",__FUNCTION__wordGetLastError()); 
         continue
        }
      //--- metin verilerini günlüğe yazdır - kelime, genişliği ve yüksekliği,
      //--- ardından bir sonraki kelimenin X koordinatını (kelime genişliği) + (boşluk genişliği) kadar artır
      PrintFormat("[%d] word: \"%s\", width=%d, height=%d",iwordwidthheight);
      x+=width+space_w;
     }
  }
//+------------------------------------------------------------------+
//| Grafiğin tamamı için bir grafiksel kaynak oluştur                |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- piksel dizisinin büyüklüğünü ayarla
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- piksel dizisini saydam renkle doldur ve buna dayalı bir grafiksel kaynak oluştur
   ArrayInitialize(pixel_data0x00FFFFFF); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- grafiğin sol üst köşesinin koordinatlarında bir "bitmap etiket" nesnesi oluştur
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- oluşturulan bitmap nesnesinin genişlik ve yüksekliğini grafiksel kaynağın genişlik ve yüksekliğine eşit olarak ayarla.
//--- nesne çapa noktasını merkezine ayarla.
   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); 
     }
//--- bitmap nesnesi için önceden oluşturulmuş grafiksel kaynağı bir görüntü dosyası olarak belirt
//--- bu durumda, kullanılan grafiksel kaynağın adını belirtmek için adının önüne “::” eklememiz gerekir
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- her şey yolunda
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Grafiksel kaynak verilerini güncelle                             |
//+------------------------------------------------------------------+ 
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- sıfır boyut iletilirse ayrıl
   if(width==0 || height==0
      return
//--- kaynak verilerini güncelle ve grafiği yeniden çiz
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

 

Ayrıca Bakınız

Kaynaklar, ResourceCreate(), ResourceSave(), TextSetFont(), TextOut()