class TComment
Вспомогательный класс для хранения строки текста и её цвета.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «comment.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека MQL, предоставляющая класс для создания графической панели-комментария на графике торговой платформы. Панель поддерживает многострочный текст с настраиваемыми шрифтами, цветами и прозрачностью.
Класс позволяет перемещать панель мышью, автоматически адаптировать цвета к фону графика, а также переключаться между графическим режимом отображения и текстовым комментарием. Обеспечивается обработка событий графика для интерактивного взаимодействия.
Классов: 2 · методов: 14 · конструкторов: 1 · деструкторов: 0 · отдельных функций: 0
class TComment
Вспомогательный класс для хранения строки текста и её цвета.
class CComment
Класс для создания и управления графической панелью-комментарием на графике.
void CComment(void)
Конструктор, инициализирующий параметры панели значениями по умолчанию.
void Create(const string name,const uint x,const uint y)
Создаёт панель с заданным именем и позицией на графике.
int CoordY()
Возвращает текущую вертикальную координату панели.
int CoordX()
Возвращает текущую горизонтальную координату панели.
void Move(const uint x,const uint y)
Перемещает панель на графике в указанную позицию.
void SetAutoColors(const bool value)
Включает или выключает автоматический подбор цветов панели в зависимости от фона графика.
void SetGraphMode(const bool value)
Переключает режим отображения между графической панелью и текстовым комментарием.
void SetText(const int row,const string text,const color colour)
Устанавливает текст и цвет для указанной строки панели.
void SetFont(const string font_name,const int font_size,const bool bold,const double font_interval)
Задаёт шрифт, размер, начертание и интервал текста панели.
void SetTransparency(const uchar alpha)
Устанавливает уровень прозрачности фона панели.
void SetColor(const color border,const color back,const uchar alpha)
Задаёт цвета рамки и фона панели.
void Destroy()
Удаляет панель с графика и освобождает ресурсы.
void Clear()
Очищает все строки текста панели.
int OnChartEvent(const int id,const long lparam,const double dparam,const string sparam)
Обрабатывает события графика для интерактивного управления панелью.
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.