122 satır
9,8 KiB
MQL5
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));
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|