Справочник MQL4

TextOut

Выводит текст в пользовательский массив (буфер) и возвращает результат успешности этой операции. Данный массив предназначается для создания графического ресурса.

bool  TextOut(
   const string        text,          // выводимый текст
   int                 x,             // координатa X 
   int                 y,             // координатa Y 
   uint                anchor,        // способ привязки
   uint                &data[],       // буфер для вывод
   uint                width,         // ширина буфера в точках
   uint                height,        // высота буфера в точках
   uint                color,         // цвет текста
   ENUM_COLOR_FORMAT   color_format   // формат цвета для вывода
   );

Параметры

text

[in]  Выводимый текст, который будет записан в буфер. Осуществляется только однострочный вывод текста.

x

[in]  Координатa X точки привязки для выводимого текста.

y

[in]  Координатa Y точки привязки для выводимого текста.

anchor

[in]  Значение из набора 9 предопределенных способов расположения точки привязки  выводимого текста. Задаётся комбинацией двух флагов – флага выравнивания текста по горизонтали и флага выравнивания текста по вертикали. Наименования флагов приведены в Примечании.

data[]

[in]  Буфер, в который выводится текст. Данный буфер используется для создания графического ресурса.

width

[in]  Ширина буфера в точках (пикселях).

height

[in]  Высота буфера в точках (пикселях).

color

[in]  Цвет текста.

color_format

[in]  Формат цвета, задаётся значением из перечисления ENUM_COLOR_FORMAT.

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

Возвращает true в случае успешного выполнения, иначе false.

Примечание

Способ привязки, задаваемый параметром anchor, является комбинацией двух флагов выравнивания текста по вертикали и горизонтали. Флаги выравнивания текста по горизонтали:

TA_LEFT – точка привязки на левой стороне ограничивающего прямоугольника

TA_CENTER – точка привязки по горизонтали находится в середине ограничивающего прямоугольника

TA_RIGHT – точка привязки на правой стороне ограничивающего прямоугольника

Флаги выравнивания текста по вертикали:

TA_TOP – точка привязки на верхней стороне ограничивающего прямоугольника

TA_VCENTER – точка привязки по вертикали находится в середине ограничивающего прямоугольника

TA_BOTTOM – точка привязки на нижней стороне ограничивающего прямоугольника

 

Возможные комбинации флагов и задаваемые ими способы привязки показаны на рисунке.
 

9 возможных способов привязки текстовой строки

Пример:

#property strict
//--- ширина и высота канваса (холста, на котором происходит рисование)
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- перед запуском скрипта покажем окно с параметрами
#property script_show_inputs
//--- дадим возможность задавать формат цвета
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- массив (буфер) для отрисовки 
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- создадим объект OBJ_BITMAP_LABEL для рисования    
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- укажем имя графического ресурса для отрисовки в объекте CLOCK
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- вспомогательные переменные
   double a;            // угол стрелки
   uint   nm=2700;      // счетчик минут
   uint   nh=2700*12;   // счетчик часов
   uint   w,h;          // переменные для получения размеров текстовых строк 
   int    x,y;          // переменные для расчета текущих координат точки привязки текстовых строк
 
//--- крутим стрелки часов в бесконечном цикле, пока скрипт не остановят
   while(!IsStopped())
     {
      //--- очистка массива буфера рисования часов
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
      //--- установка шрифта для отрисовки цифр на циферблате
      TextSetFont("Arial",-200,FW_EXTRABOLD,0);
      //--- рисуем циферблат
      for(int i=1;i<=12;i++)
        {
         //--- получим размеры текущего часа на циферблате
         TextGetSize(string(i),w,h);
         //--- вычислим координаты текущего часа на циферблате
         a=-((i*300)%3600*M_PI)/1800.0;
         x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2);
         y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2);
         //--- вывод этого часа на циферблат в буфер ExtImg[]
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
        }
      //--- теперь установим шрифт для отрисовки минутной стрелки      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
      //--- получим размеры минутной стрелки
      TextGetSize("----->",w,h);
      //--- вычислим координаты минутной стрелки на циферблате
      a=-(nm%3600*M_PI)/1800.0;
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
      //--- вывод минутной стрелки на циферблат в буфер ExtImg[]
      TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- теперь установим шрифт для отрисовки часовой стрелки      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
      TextGetSize("==>",w,h);
      //--- вычислим координаты часовой стрелки на циферблате
      a=-(nh/12%3600*M_PI)/1800.0;
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
      //--- вывод часовой стрелки на циферблат в буфер ExtImg[]
      TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- обновление графического ресурса
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
      //--- принудительное обновление графика
      ChartRedraw();
 
      //--- увеличим счетчики часа и минут
      nm+=60;
      nh+=60;
      //--- выдержим небольшую паузу между кадрами
      Sleep(10);
     }
//--- удалим объект CLOCK при завершении работы скрипта
   ObjectDelete(0,"CLOCK");
//---
  }

Смотри также

Ресурсы, ResourceCreate(), ResourceSave(), TextGetSize(), TextSetFont()