EasyAndFastMod/Controls/SeparateLine.mqh
2026-01-15 07:23:17 -05:00

122 satır
9,8 KiB
MQL5

//+------------------------------------------------------------------+
//| SeparateLine.mqh |
//| Copyright 2015, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#include "..\Element.mqh"
//+------------------------------------------------------------------+
//| Класс для создания разделительной линии |
//+------------------------------------------------------------------+
class CSeparateLine : public CElement
{
private:
//--- Свойства
ENUM_TYPE_SEP_LINE m_type_sep_line;
color m_dark_color;
color m_light_color;
//---
public:
CSeparateLine(void);
~CSeparateLine(void);
//--- Создание разделительной линии
bool CreateSeparateLine(const int x_gap,const int y_gap,const int x_size,const int y_size);
//---
private:
//--- Создаёт холст для рисования разделительной линии
bool CreateSepLine(void);
//---
public:
//--- (1) Тип линии, (2) цвета линии
void TypeSepLine(const ENUM_TYPE_SEP_LINE type) { m_type_sep_line=type; }
void DarkColor(const color clr) { m_dark_color=clr; }
void LightColor(const color clr) { m_light_color=clr; }
//---
public:
//--- Рисует элемент
virtual void Draw(void);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CSeparateLine::CSeparateLine(void) : m_type_sep_line(H_SEP_LINE),
m_dark_color(C'160,160,160'),
m_light_color(clrWhite)
{
//--- Сохраним имя класса элемента в базовом классе
CElementBase::ClassName(CLASS_NAME);
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CSeparateLine::~CSeparateLine(void)
{
}
//+------------------------------------------------------------------+
//| Создаёт разделительную линию |
//+------------------------------------------------------------------+
bool CSeparateLine::CreateSeparateLine(const int x_gap,const int y_gap,const int x_size,const int y_size)
{
//--- Выйти, если нет указателя на главный элемент
if(!CElement::CheckMainPointer())
return(false);
//--- Инициализация свойств
m_x =CElement::CalculateX(x_gap);
m_y =CElement::CalculateY(y_gap);
m_x_size =x_size;
m_y_size =y_size;
//--- Отступы от крайней точки
CElementBase::XGap(x_gap);
CElementBase::YGap(y_gap);
//--- Создание элемента
if(!CreateSepLine())
return(false);
//---
return(true);
}
//+------------------------------------------------------------------+
//| Создаёт холст для рисования разделительной линии |
//+------------------------------------------------------------------+
bool CSeparateLine::CreateSepLine(void)
{
//--- Формирование имени объекта
string name=CElementBase::ElementName("separate_line");
//--- Создание объекта
if(!CElement::CreateCanvas(name,m_x,m_y,m_x_size,m_y_size))
return(false);
//---
return(true);
}
//+------------------------------------------------------------------+
//| Рисует элемент |
//+------------------------------------------------------------------+
void CSeparateLine::Draw(void)
{
//--- Координаты для линий
int x1=0,x2=0,y1=0,y2=0;
//--- Размеры холста
int x_size =(int)::ObjectGetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_XSIZE)-1;
int y_size =(int)::ObjectGetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_YSIZE)-1;
//--- Очистить холст
m_canvas.Erase(::ColorToARGB(clrNONE,0));
//--- Если линия горизонтальная
if(m_type_sep_line==H_SEP_LINE)
{
//--- Сверху тёмная линия
x1=0; y1=0; x2=x_size; y2=0;
m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(m_dark_color));
//--- Снизу светлая линия
x1=0; x2=x_size; y1=y_size; y2=y_size;
m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(m_light_color));
}
//--- Если линия вертикальная
else
{
//--- Слева тёмная линия
x1=0; x2=0; y1=0; y2=y_size;
m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(m_dark_color));
//--- Справа светлая линия
x1=x_size; y1=0; x2=x_size; y2=y_size;
m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(m_light_color));
}
}
//+------------------------------------------------------------------+