TextSetFont

Устанавливает шрифт для вывода текста методами рисования и возвращает результат успешности этой операции. По умолчанию используется шрифт Arial и размер -120 (12 pt).

bool  TextSetFont(
   const string  name,            // имя шрифта или путь к файлу шрифта на диске
   int           size,            // размер шрифта
   uint          flags,           // комбинация флагов
   int           orientation=0    // угол наклона текста
   );

Параметры

name

[in]  Имя шрифта в системе, или имя ресурса, содержащего шрифт, или путь к файлу шрифта на диске.

size

[in]  Размер шрифта, который может задаваться положительными и отрицательными значениями. При положительных значениях размер выводимого текста не зависит от настроек размеров шрифтов в операционной системе. При отрицательных значениях значение задается в десятых долях пункта и размер текста будет зависеть от настроек системы ("стандартный масштаб" или "крупный масштаб"). Более подробно о разнице в режимах смотрите в Примечании.

flags

[in]  Комбинация флагов, описывающих стиль шрифт.

orientation

[in]  Угол наклона текста по горизонтали к оси X, единица измерения равна 0.1 градуса. То есть orientation=450 означает наклон в 45 градусов.

Возвращаемое значение

Возвращает true в случае успешной установки текущего шрифта, иначе false. Возможные коды ошибок:

  • ERR_INVALID_PARAMETER(4003) - name представляет NULL или "" (пустая строка),
  • ERR_INTERNAL_ERROR(4001) - ошибка операционной системы (например, попытка создания несуществующего шрифта).

Примечание

Если в имени шрифта используется "::", то шрифт загружается из ресурса EX5. Если имя шрифта name указано с расширением, то шрифт загружается из файла, при этом – если путь начинается с "\" или "/", то файл ищется относительно каталога MQL5, иначе ищется относительно пути EX5-файла, вызвавшего функцию TextSetFont().

Размер шрифта задается положительными или отрицательными значениями, знак определяет зависимость размера текста от настроек операционной системы (масштаба шрифта).

  • Если размер задается положительным числом, то при отображении логического шрифта в физический происходит преобразование размера в физические единицы измерения устройства (пиксели) и этот размер соответствует высоте ячеек символов из доступных шрифтов. Не рекомендуется в тех случаях, когда предполагается совместное использование на графике текстов, выведенных функцией TextOut(), и текстов, отображаемых с помощью графического объекта OBJ_LABEL ("Текстовая метка").
  • Если размер задается отрицательным числом, то указанный размер предполагается заданным в десятых долях логического пункта (значение -350 равно 35 логических пунктов) и делится на 10, а затем полученное значение преобразуется в физические единицы измерения устройства (пиксели) и соответствует абсолютному значению высоты символа из доступных шрифтов. Чтобы получить на экране текст такого же размера, как и в объекте OBJ_LABEL, возьмите указанный в свойствах объекта размер шрифта и умножьте на -10.

Флаги могут использоваться в виде комбинации флагов стиля с одним из флагов, задающем толщину шрифта. Наименования флагов приведены ниже.

Флаги для задания стиля начертания шрифта

Флаг

Описание

FONT_ITALIC

Курсив

FONT_UNDERLINE

Подчёркивание

FONT_STRIKEOUT

Перечёркивание

 

Флаги для задания толщины шрифта

Флаг

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

Пример:

#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()
  {
//--- идентификатор текущего графика
   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};
   
//--- запретим отрисовку любых атрибутов ценового графика
   ChartSetInteger(chart_idCHART_SHOWfalse);
   
//--- объявляем параметры графического ресурса 
   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;
  
//--- создаём графический ресурс для вывода текста
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- цикл по именам шрифтов
   for(int i=0i<(int)font_names.Size(); i++)
     {
      //--- цикл по флагам шрифта
      for(int j=0j<(int)flags_array.Size(); j++)
        {
         //--- рисуем текст с полученным из массива шрифтом и флагом начертания
         DrawText(font_names[i], flags_array[j], rc_datarc_widthrc_height);
         Sleep(800);
         ArrayInitialize(rc_dataCOLOR_NULL);
        }
      Sleep(800);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- после вывода всех текстов с разными размерами и начертаниями шрифта,
//--- покажем текст с разными флагами толщины шрифта
   for(int i=0i<(int)fw_array.Size(); i++)
     {
      //--- устанавливаем размер и название шрифта для вывода текста с флагами толщины
      string font_name="Tahoma";
      int    size=-140;
      TextSetFont(font_namesizefw_array[i]);
      
      //--- создаём рисуемую строку текста, выводим её в массив пикселей ресурса и обновляем ресурс
      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);
      //--- подождём секунду
      Sleep(1000);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- подождём пять секунд, затем освободим ресурс и удалим графический объект
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   
//--- разрешим отрисовку любых атрибутов ценового графика
   ChartSetInteger(chart_idCHART_SHOWtrue);
   ChartRedraw(chart_id);
   /*
   в результате работы скрипта на график будут выведены текстовые сообщения
   разными шрифтами с разными размерами и флагами начертания и ширины текста
   */ 
  }
//+------------------------------------------------------------------+
//| Выводит на график пять строк текста разных                       |
//| размеров с указанным шрифтом и флагами                           |
//+------------------------------------------------------------------+
void DrawText(const string font_nameuint flagsuint &pixels_array[], uint res_widthuint res_height)
  {
//--- выведем пять строк текста с разными размерами шрифта
   for(int i=0i<5i++)
     {
      //--- рассчитываем размер шрифта и устанавливаем шрифт для вывода текста методами рисования
      int size=-140+10*i;
      TextSetFont(font_namesizeflags);
      
      //--- создаём рисуемую строку текста, выводим её в массив пикселей ресурса и обновляем ресурс
      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);
      //--- подождём немного
      Sleep(800);
     }
  }
//+------------------------------------------------------------------+
//| Возвращает описание флагов начертания шрифта                     |
//+------------------------------------------------------------------+
string FlagDescription(const uint flag)
  {
   switch(flag)
     {
      case FONT_ITALIC     :  return(" Italic");
      case FONT_UNDERLINE  :  return(" Underline");
      case FONT_STRIKEOUT  :  return(" Strikeout");
     }
   return("");
  }
//+------------------------------------------------------------------+
//| Возвращает описание флагов толщины шрифта                        |
//+------------------------------------------------------------------+
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("");
  }
//+------------------------------------------------------------------+
//| Создаёт графический ресурс на весь график                        |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- устанавливаем размер массива пикселей 
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- заполняем массив пикселей прозрачным цветом и на его основе создаём графический ресурс 
   ArrayInitialize(pixel_dataCOLOR_NULL); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code ",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- создаём объект "Графическая метка" на координатах верхнего левого угла графика
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- устанавливаем созданному объекту-рисунку ширину и высоту, равные ширине и высоте графического ресурса. 
//--- устанавливаем точку привязки объекта по его центру. 
   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); 
     }
//--- указываем для объекта-рисунка в качестве файла изображения ранее созданный графический ресурс 
//--- в этом случае для указания имени используемого графического ресурса нужно перед его именем дописать "::" 
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- всё успешно
   return(true);
  }
//+------------------------------------------------------------------+ 
//| Обновляет данные графического ресурса                            | 
//+------------------------------------------------------------------+ 
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- если переданы нулевые размеры - уходим 
   if(width==0 || height==0
      return
//--- обновляем ресурсные данные и перерисовываем график 
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

Смотри также

Ресурсы, ResourceCreate(), ResourceSave(), TextOut()