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

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