//+------------------------------------------------------------------+ //| 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)); } } //+------------------------------------------------------------------+