← К каталогу
Исходный код · ID 2407

comment.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Библиотека MQL, предоставляющая класс для создания графической панели-комментария на графике торговой платформы. Панель поддерживает многострочный текст с настраиваемыми шрифтами, цветами и прозрачностью.

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

Состав библиотеки

Классов: 2 · методов: 14 · конструкторов: 1 · деструкторов: 0 · отдельных функций: 0

Классы
Класс class TComment

Вспомогательный класс для хранения строки текста и её цвета.

Класс class CComment

Класс для создания и управления графической панелью-комментарием на графике.

Методы и конструкторы
Конструктор · CComment void CComment(void)

Конструктор, инициализирующий параметры панели значениями по умолчанию.

Метод · CComment void Create(const string name,const uint x,const uint y)

Создаёт панель с заданным именем и позицией на графике.

Метод · CComment int CoordY()

Возвращает текущую вертикальную координату панели.

Метод · CComment int CoordX()

Возвращает текущую горизонтальную координату панели.

Метод · CComment void Move(const uint x,const uint y)

Перемещает панель на графике в указанную позицию.

Метод · CComment void SetAutoColors(const bool value)

Включает или выключает автоматический подбор цветов панели в зависимости от фона графика.

Метод · CComment void SetGraphMode(const bool value)

Переключает режим отображения между графической панелью и текстовым комментарием.

Метод · CComment void SetText(const int row,const string text,const color colour)

Устанавливает текст и цвет для указанной строки панели.

Метод · CComment void SetFont(const string font_name,const int font_size,const bool bold,const double font_interval)

Задаёт шрифт, размер, начертание и интервал текста панели.

Метод · CComment void SetTransparency(const uchar alpha)

Устанавливает уровень прозрачности фона панели.

Метод · CComment void SetColor(const color border,const color back,const uchar alpha)

Задаёт цвета рамки и фона панели.

Метод · CComment void Destroy()

Удаляет панель с графика и освобождает ресурсы.

Метод · CComment void Clear()

Очищает все строки текста панели.

Метод · CComment int OnChartEvent(const int id,const long lparam,const double dparam,const string sparam)

Обрабатывает события графика для интерактивного управления панелью.

Метод · CComment void Show()

Отображает панель на графике с учётом текста, шрифта и цветов.

Получить полный код

Поиск по коду файла

#property version    "1.00"
#property strict

#include <Canvas/Canvas.mqh>
#include <Arrays/List.mqh>

#define EVENT_NO_EVENTS 0
#define EVENT_MOVE      1
#define EVENT_CHANGE    2

class TComment : public CObject
  {
public:
   string            text;
   color             colour;
  };

class CComment
  {
private:
   CPoint            m_temp;
   CCanvas           m_comment;
   CPoint            m_pos;
   CList             m_list;
   CSize             m_size;

   string            m_name;
   string            m_font_name;
   int               m_font_size;
   bool              m_font_bold;
   double            m_font_interval;
   color             m_border_color;
   color             m_back_color;
   uchar             m_back_alpha;
   bool              m_graph_mode;
   bool              m_auto_colors;
   color             m_auto_back_color;
   color             m_auto_text_color;
   color             m_auto_border_color;
   color             m_chart_back_color;

   color Color2Gray(const color value)
     {
      int gray=(int)round(0.3*GETRGBR(value)+0.59*GETRGBG(value)+0.11*GETRGBB(value));
      if(gray>255) gray=255;
      return((color)ARGB(0,gray,gray,gray));
     }

   uchar GrayChannel(const color value)
     {
      int gray=(int)round(0.3*GETRGBR(value)+0.59*GETRGBG(value)+0.11*GETRGBB(value));
      if(gray>255) gray=255;
      return((uchar)gray);
     }

   color Bright(const color value,const int percent)
     {
      int r,g,b;

      r=GETRGBR(value);
      g=GETRGBG(value);
      b=GETRGBB(value);

      if(percent>=0)
        {
         r+=(255-r)*percent/100;
         if(r>255)r=255;

         g+=(255-g)*percent/100;
         if(g>255)g=255;

         b+=(255-b)*percent/100;
         if(b>255)b=255;
        }
      else
        {
         r+=r*percent/100;
         if(r<0)r=0;

         g+=g*percent/100;
         if(g<0)g=0;

         b+=b*percent/100;
         if(b<0)b=0;
        }

      return(ARGB(0,r,g,b));
     }

   void CalcColors()
     {
      m_auto_back_color=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND);
      color m_back_gray=Color2Gray(m_auto_back_color);
      uchar channel=GrayChannel(m_back_gray);

      if(channel>120)
        {
         if(m_back_color==clrNONE)
            m_auto_border_color=clrNONE;
         else
            m_auto_border_color=Bright(m_back_gray,-30);

         m_auto_text_color=Bright(m_back_gray,-80);
        }
      else
        {
         if(m_back_color==clrNONE)
            m_auto_border_color=clrNONE;
         else
            m_auto_border_color=Bright(m_back_gray,30);

         m_auto_text_color=Bright(m_back_gray,80);
        }
     }
public:

   void  CComment(void)
     {
      m_name=NULL;
      m_font_name="Lucida Console";
      m_font_size=14;
      m_font_bold=false;
      m_font_interval=1.7;
      m_border_color=clrNONE;
      m_back_color=clrBlack;
      m_back_alpha=255;
      m_graph_mode=true;
      m_auto_colors=false;
      m_chart_back_color=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND);
      m_auto_back_color=clrBlack;
      m_auto_border_color=clrNONE;

      ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
     };

   void  Create(const string name,const uint x,const uint y)
     {
      m_name=name;
      m_pos.x=(int)x;
      m_pos.y=(int)y;
     };

   int CoordY(){return(m_pos.y);}

   int CoordX(){return(m_pos.x);}

   void  Move(const uint x,const uint y)
     {
      m_pos.x=(int)x;
      m_pos.y=(int)y;

      if(ObjectGetInteger(0,m_name,OBJPROP_XDISTANCE)!=m_pos.x)
         ObjectSetInteger(0,m_name,OBJPROP_XDISTANCE,m_pos.x);

      if(ObjectGetInteger(0,m_name,OBJPROP_YDISTANCE)!=m_pos.y)
         ObjectSetInteger(0,m_name,OBJPROP_YDISTANCE,m_pos.y);
     };

   void SetAutoColors(const bool value)
     {
      m_auto_colors=value;
      if(value)
         CalcColors();
     }

   void  SetGraphMode(const bool value)
     {
      m_graph_mode=value;
     };

   void  SetText(const int row,const string text,const color colour)
     {
      if(row<0)
         return;

      int total=m_list.Total();

      if(row<total)
        {
         TComment *item=m_list.GetNodeAtIndex(row);
         item.text=text;
         item.colour=colour;
        }
      else
        {

         for(int i=total; i<=row; i++)
           {
            m_list.Add(new TComment);
            TComment *item=m_list.GetLastNode();
            if(row==i)
              {
               item.text=text;
               item.colour=colour;
              }
            else
              {
               item.text="";
               item.colour=clrNONE;
              }
           }
        }
     }

   void  SetFont(const string font_name,const int font_size,const bool bold,const double font_interval)
     {
      m_font

Показано первые 50% кода (символов: 6331)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
633,10₽ ≈ $7.74