//+------------------------------------------------------------------+
//|                                                        FONTS.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
input color backdrop_clr=clrDarkSlateGray;
input color code_clr=clrGold;
input color font_clr=clrWhiteSmoke;
input color button_clr=clrMidnightBlue;
input int x_dist=10;
input int y_dist=15;
extern string font_edit="Terminal";
bool button_1=true;
bool start=true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+--------------;----------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
//==================================================================
void OnDeinit(const int reason)
  {
   f_Delete();
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   char code=32;
   int u=32;
   ObjectGetString(0,"Panel_1",OBJPROP_TEXT,0,font_edit);
   if(button_1 && start)
     {
     start=false;
      RectLabelCreate("LabelCreate",x_dist,y_dist,970,400,backdrop_clr,backdrop_clr);
      
      for(int t=1;t<=7;t++)
        {
         for(int r=0;r<=31;r++)
           {

            f_Label("text_"+(string)r+(string)t,x_dist+12+30*r,y_dist+17+50*t,CharToStr(code),15,font_clr,font_edit);
            f_Label("numb_"+(string)r+(string)t,x_dist+12+30*r,y_dist+50*t,(string)u,8,code_clr);
            code++; u++;
           }
        }
         if(ObjectFind("butt_1")!=-1) ObjectDelete("butt_1");
         ButtonCreate("butt_2",x_dist+25,y_dist+5,120,20,"Wingdings",9,font_clr,button_clr,false);
         ButtonCreate("butt_3",x_dist+148,y_dist+5,120,20,"Wingdings 2",9,font_clr,button_clr,false);
         ButtonCreate("butt_4",x_dist+271,y_dist+5,120,20,"Wingdings 3",9,font_clr,button_clr,false);
         ButtonCreate("butt_5",x_dist+394,y_dist+5,120,20,"Arial",9,font_clr,button_clr,false);
         ButtonCreate("butt_6",x_dist+847,y_dist+5,120,20,"Enter",9,font_clr,button_clr,false);
         EditCreate("Panel_1",font_edit,x_dist+517,y_dist+5,327,20);
        }
      ButtonCreate("butt_1",x_dist+4,y_dist+5,20,20,CharToStr(84),16,font_clr,button_clr,false,"Wingdings 2");
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--------------кнопка "X"----------------------------------    
   if(sparam=="butt_1" && !button_1)
     {
      button_1=true;start=true; return;
     }
   if(sparam=="butt_1" && button_1)
     {
      button_1=false; f_Delete();start=true;
     }
//--------------кнопка "Wingdings"----------------------------------    
   if(sparam=="butt_2")
     {
      font_edit="Wingdings"; f_Delete();start=true;
     }
//--------------кнопка "Wingdings 2"----------------------------------    
   if(sparam=="butt_3")
     {
      font_edit="Wingdings 2"; f_Delete();start=true;
     }
//--------------кнопка "Wingdings 3"----------------------------------    
   if(sparam=="butt_4")
     {
      font_edit="Wingdings 3"; f_Delete();start=true;
     }
//--------------кнопка "Arial"----------------------------------    
   if(sparam=="butt_5")
     {
      font_edit="Arial"; f_Delete();start=true; 
     }
//--------------кнопка "enter"----------------------------------    
   if(sparam=="butt_6")
     {
      f_Delete(); start=true;
     }
  }
//+------------------------------------------------------------------+
//   Удаляем объекты
//+------------------------------------------------------------------+ 
void f_Delete()
  {
   ObjectDelete("butt_1");
   ObjectDelete("butt_2");
   ObjectDelete("butt_3");
   ObjectDelete("butt_4");
   ObjectDelete("butt_5");
   ObjectDelete("butt_6");
   ObjectDelete("LabelCreate");
   ObjectDelete("Panel_1");
   for(int w=1;w<=7;w++)
     {
      for(int e=0;e<=31;e++)
        {
         ObjectDelete("text_"+(string)e+(string)w);
         ObjectDelete("numb_"+(string)e+(string)w);
        }
     }
  }
//+------------------------------------------------------------------+
//| Создает прямоугольную метку                                      |
//+------------------------------------------------------------------+
bool RectLabelCreate(
                     const string           name="RectLabel",          // имя метки                    
                     const int              x=0,                       // координата по оси X
                     const int              y=0,                       // координата по оси Y
                     const int              width=500,                 // ширина
                     const int              height=180,                // высота
                     const color            back_clr=clrRed,           // цвет фона                    
                     const color            clr=clrRed,                // цвет плоской границы (Flat)
                     //---------------------------------------------------------------------------
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,         // стиль плоской границы
                     const int              line_width=1,              // толщина плоской границы
                     const bool             back=false,                // на заднем плане
                     const bool             selection=false,           // выделить для перемещений
                     const bool             hidden=false,              // скрыт в списке объектов
                     const long             chart_ID=0,                // ID графика
                     const int              sub_window=0,              // номер подокна
                     const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER,  // угол графика для привязки
                     const ENUM_BORDER_TYPE border_lab=BORDER_FLAT,    // тип границы
                     const long             z_order=0)                 // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();

   if(ObjectFind(name)==-1)
     {
      //--- создадим прямоугольную метку     
      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
      //--- установим координаты метки
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      //--- установим размеры метки
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      //--- установим цвет фона
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      //--- установим тип границы
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border_lab);
      //--- установим угол графика, относительно которого будут определяться координаты точки
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим цвет плоской рамки (в режиме Flat)
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим стиль линии плоской рамки
      ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
      //--- установим толщину плоской границы
      ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (true) или отключим (false) режим перемещения метки мышью
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      //--- установим приоритет на получение события нажатия мыши на графике
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Создает текстовую метку                                          |
//+------------------------------------------------------------------+
bool f_Label(
             const string            name="Label",             // имя метки               
             const int               x=0,                      // координата по оси X
             const int               y=0,                      // координата по оси Y                 
             const string            text="error",             // текст
             const int               font_size=10,             // размер шрифта                         
             const color             clr=clrRed,               // цвет
             //------------------------------------------------------
             const string            font="Arial",             // шрифт   
             const double            angle=0.0,                // наклон текста
             const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
             const bool              back=false,               // на заднем плане
             const bool              selection=false,          // выделить для перемещений
             const bool              hidden=true,              // скрыт в списке объектов
             const long              chart_ID=0,               // ID графика
             const int               sub_window=0,             // номер подокна
             const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
             const long              z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
   if(ObjectFind(name)==-1)
     {
      //--- создадим текстовую метку
      ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);
      //--- установим координаты метки
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      //--- установим угол графика, относительно которого будут определяться координаты точки
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим текст
      // ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
      //--- установим шрифт текста
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      //--- установим размер шрифта
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      //--- установим угол наклона текста
      ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
      //--- установим способ привязки
      ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
      //--- установим цвет
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (true) или отключим (false) режим перемещения метки мышью
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      //--- установим приоритет на получение события нажатия мыши на графике
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
     }
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   return(true);
  }
//===============кнопки==============================================
bool ButtonCreate(const string  name="button",      // имя кнопки
                  const int x=0,                    // координата по оси X
                  const int y=0,                    // координата по оси Y
                  const int width=0,                // ширина кнопки
                  const int height=0,               // высота кнопки
                  const string text="error",        // текст
                  const int font_size=6,            // размер шрифта
                  const color clr=clrNONE,          // цвет текста
                  const color  back_clr=clrNONE,    // цвет фона 
                  const bool state=false,           // нажата/отжата  
                  const string  font="Arial",       // шрифт                                                
                  const color border_clr=clrNONE,   // цвет границы  
                  //------------------------------------------------                               
                  const bool back=false,            // на заднем плане
                  const bool selection=false,       // выделить для перемещений
                  const bool hidden=false,          // скрыт в списке объектов
                  const long z_order=0)             // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();

   if(ObjectFind(name)==-1)
     {
      //--- создадим кнопку
      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
      //--- установим координаты кнопки
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      //--- установим размер кнопки
      ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
      //--- установим угол графика, относительно которого будут определяться координаты точки
      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      //--- установим текст
      ObjectSetString(0,name,OBJPROP_TEXT,text);
      //--- установим шрифт текста
      ObjectSetString(0,name,OBJPROP_FONT,font);
      //--- установим размер шрифта
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size);
      //--- установим цвет текста
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      //--- установим цвет фона
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
      //--- установим цвет границы
      ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,border_clr);
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(0,name,OBJPROP_BACK,back);
      //--- включим (true) или отключим (false) режим перемещения кнопки мышью
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,selection);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden);
      //--- установим приоритет на получение события нажатия мыши на графике
      ObjectSetInteger(0,name,OBJPROP_ZORDER,z_order);
      //----- нажата/отжата
      ObjectSetInteger(0,name,OBJPROP_STATE,state);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Создает объект "Поле ввода"                                      |
//+------------------------------------------------------------------+
bool EditCreate(
                const string           name="Edit",              // имя объекта
                const string           text="Arial",             // текст               
                const int              x=110,                    // координата по оси X
                const int              y=110,                    // координата по оси Y
                const int              width=90,                 // ширина
                const int              height=12,                // высота
                //------------------------------------------------------------------
                const color            back_clr=clrDarkGray,     // цвет фона
                const color            border_clr=clrYellow,     // цвет границы
                const string           font="Arial",             // шрифт
                const int              font_size=10,             // размер шрифта
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // способ выравнивания
                const bool             read_only=false,          // возможность редактировать
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
                const color            clr=clrBlack,             // цвет текста              
                const bool             back=false,               // на заднем плане
                const bool             selection=false,          // выделить для перемещений
                const bool             hidden=false,             // скрыт в списке объектов
                const long             z_order=0,                // приоритет на нажатие мышью
                const long             chart_ID=0,               // ID графика
                const int              sub_window=0              // номер подокна
                )
  {
//--- сбросим значение ошибки
   ResetLastError();
   if(ObjectFind(name)==-1)
     {
      //--- создадим поле ввода
      ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0);
      //--- установим координаты объекта
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
      //--- установим размеры объекта
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      //--- установим текст
      //  ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
      //--- установим шрифт текста
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      //--- установим размер шрифта
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      //--- установим способ выравнивания текста в объекте
      ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
      //--- установим (true) или отменим (false) режим только для чтения
      ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
      //--- установим угол графика, относительно которого будут определяться координаты объекта
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- установим цвет текста
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      //--- установим цвет фона
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      //--- установим цвет границы
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      //--- отобразим на переднем (false) или заднем (true) плане
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- включим (true) или отключим (false) режим перемещения метки мышью
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      //--- установим приоритет на получение события нажатия мыши на графике
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
     }
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
