192 líneas
14 KiB
MQL5
192 líneas
14 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Frame.mqh |
|
|
//| Copyright 2018, MetaQuotes Software Corp. |
|
|
//| http://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#include "..\Element.mqh"
|
|
#include "TextLabel.mqh"
|
|
//+------------------------------------------------------------------+
|
|
//| Класс для создания области для группирования элементов |
|
|
//+------------------------------------------------------------------+
|
|
class CFrame : public CElement
|
|
{
|
|
private:
|
|
//--- Экземпляры для создания элемента
|
|
CTextLabel m_text_label;
|
|
//---
|
|
public:
|
|
CFrame(void);
|
|
~CFrame(void);
|
|
//--- Возвращает указатель текстовой метки
|
|
CTextLabel *GetTextLabelPointer(void) { return(::GetPointer(m_text_label)); }
|
|
//--- Методы для создания области
|
|
bool CreateFrame(const string text,const int x_gap,const int y_gap);
|
|
//---
|
|
private:
|
|
void InitializeProperties(const string text,const int x_gap,const int y_gap);
|
|
bool CreateCanvas(void);
|
|
bool CreateTextLabel(void);
|
|
//---
|
|
public:
|
|
//--- Рисует элемент
|
|
virtual void Draw(void);
|
|
//---
|
|
private:
|
|
//--- Изменить ширину по правому краю окна
|
|
virtual void ChangeWidthByRightWindowSide(void);
|
|
//--- Изменить высоту по нижнему краю окна
|
|
virtual void ChangeHeightByBottomWindowSide(void);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor |
|
|
//+------------------------------------------------------------------+
|
|
CFrame::CFrame(void)
|
|
{
|
|
//--- Сохраним имя класса элемента в базовом классе
|
|
CElementBase::ClassName(CLASS_NAME);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Destructor |
|
|
//+------------------------------------------------------------------+
|
|
CFrame::~CFrame(void)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Создаёт группу объектов текстового поля ввода |
|
|
//+------------------------------------------------------------------+
|
|
bool CFrame::CreateFrame(const string text,const int x_gap,const int y_gap)
|
|
{
|
|
//--- Выйти, если нет указателя на главный элемент
|
|
if(!CElement::CheckMainPointer())
|
|
return(false);
|
|
//--- Инициализация свойств
|
|
InitializeProperties(text,x_gap,y_gap);
|
|
//--- Создание элемента
|
|
if(!CreateCanvas())
|
|
return(false);
|
|
if(!CreateTextLabel())
|
|
return(false);
|
|
//---
|
|
return(true);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Инициализация свойств |
|
|
//+------------------------------------------------------------------+
|
|
void CFrame::InitializeProperties(const string text,const int x_gap,const int y_gap)
|
|
{
|
|
m_x =CElement::CalculateX(x_gap);
|
|
m_y =CElement::CalculateY(y_gap);
|
|
m_x_size =(m_x_size<1 || m_auto_xresize_mode)? m_main.X2()-m_x-m_auto_xresize_right_offset : m_x_size;
|
|
m_y_size =(m_y_size<1 || m_auto_yresize_mode)? m_main.Y2()-m_y-m_auto_yresize_bottom_offset : m_y_size;
|
|
m_label_text =text;
|
|
//--- Цвет фона по умолчанию
|
|
m_back_color=(m_back_color!=clrNONE)? m_back_color : m_main.BackColor();
|
|
//--- Отступы и цвет текстовой метки
|
|
m_label_color =(m_label_color!=clrNONE)? m_label_color : clrBlack;
|
|
m_label_x_gap =(m_label_x_gap!=WRONG_VALUE)? m_label_x_gap : 0;
|
|
m_label_y_gap =(m_label_y_gap!=WRONG_VALUE)? m_label_y_gap : 0;
|
|
//--- Отступы от крайней точки
|
|
CElementBase::XGap(x_gap);
|
|
CElementBase::YGap(y_gap);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Создаёт объект для рисования |
|
|
//+------------------------------------------------------------------+
|
|
bool CFrame::CreateCanvas(void)
|
|
{
|
|
//--- Формирование имени объекта
|
|
string name=CElementBase::ElementName("frame");
|
|
//--- Создание объекта
|
|
if(!CElement::CreateCanvas(name,m_x,m_y,m_x_size,m_y_size))
|
|
return(false);
|
|
//---
|
|
ShowTooltip(true);
|
|
return(true);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Создаёт текстовую метку |
|
|
//+------------------------------------------------------------------+
|
|
bool CFrame::CreateTextLabel(void)
|
|
{
|
|
//--- Сохраним указатель на родительский элемент
|
|
m_text_label.MainPointer(this);
|
|
//--- КоординатЫ
|
|
int x=12;
|
|
int y=-6;
|
|
//--- Свойства
|
|
if(m_label_text=="")
|
|
{
|
|
y=1;
|
|
m_text_label.YSize(1);
|
|
m_border_color=m_back_color;
|
|
}
|
|
//---
|
|
m_text_label.LabelXGap(5);
|
|
m_text_label.Font(CElement::Font());
|
|
m_text_label.FontSize(CElement::FontSize());
|
|
//--- Создание объекта
|
|
if(!m_text_label.CreateTextLabel(m_label_text,x,y))
|
|
return(false);
|
|
//--- Добавить элемент в массив
|
|
CElement::AddToArray(m_text_label);
|
|
return(true);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Изменить ширину по правому краю формы |
|
|
//+------------------------------------------------------------------+
|
|
void CFrame::ChangeWidthByRightWindowSide(void)
|
|
{
|
|
//--- Выйти, если включен режим привязки к правой части окна
|
|
if(m_anchor_right_window_side)
|
|
return;
|
|
//--- Размеры
|
|
int x_size=0;
|
|
//--- Рассчитать и установить новый размер фону элемента
|
|
x_size=m_main.X2()-m_canvas.X()-m_auto_xresize_right_offset;
|
|
//--- Не изменять размер, если меньше установленного ограничения
|
|
if(x_size==m_x_size)
|
|
return;
|
|
//---
|
|
CElementBase::XSize(x_size);
|
|
m_canvas.XSize(x_size);
|
|
m_canvas.Resize(x_size,m_y_size);
|
|
//--- Перерисовать элемент
|
|
Draw();
|
|
//--- Обновить положение объектов
|
|
Moving();
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Изменить высоту по нижнему краю окна |
|
|
//+------------------------------------------------------------------+
|
|
void CFrame::ChangeHeightByBottomWindowSide(void)
|
|
{
|
|
//--- Выйти, если включен режим привязки к нижней части окна
|
|
if(m_anchor_bottom_window_side)
|
|
return;
|
|
//--- Размеры
|
|
int y_size=0;
|
|
//--- Рассчитать и установить новый размер фону элемента
|
|
y_size=m_main.Y2()-m_canvas.Y()-m_auto_yresize_bottom_offset;
|
|
//--- Не изменять размер, если меньше установленного ограничения
|
|
if(y_size==m_y_size)
|
|
return;
|
|
//---
|
|
CElementBase::YSize(y_size);
|
|
m_canvas.YSize(y_size);
|
|
m_canvas.Resize(m_x_size,y_size);
|
|
//--- Перерисовать элемент
|
|
Draw();
|
|
//--- Обновить положение объектов
|
|
Moving();
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Рисует элемент |
|
|
//+------------------------------------------------------------------+
|
|
void CFrame::Draw(void)
|
|
{
|
|
//--- Нарисовать фон
|
|
CElement::DrawBackground();
|
|
//--- Нарисовать рамку
|
|
CElement::DrawBorder();
|
|
}
|
|
//+------------------------------------------------------------------+
|