Article-17960-MQL5-MVC-View.../TestControls.mq5
2026-03-30 08:16:07 +07:00

138 行
11 KiB
MQL5

//+------------------------------------------------------------------+
//| TestControls.mq5 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Включаемые библиотеки |
//+------------------------------------------------------------------+
#include "Controls\Base.mqh"
CCanvasBase *obj1=NULL; // Указатель на первый графический элемент
CCanvasBase *obj2=NULL; // Указатель на второй графический элемент
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Создаём первый графический элемент
obj1=new CCanvasBase(0,0,"TestScr1",100,40,160,160);
obj1.SetAlpha(250); // Прозрачность
obj1.SetBorderWidth(6); // Ширина рамки
//--- Заливаем цветом фон и рисуем рамку с отступом в один пиксель от установленной ширины рамки
obj1.Fill(clrDodgerBlue,false);
uint wd=obj1.BorderWidth();
obj1.GetBackground().Rectangle(wd-2,wd-2,obj1.Width()-wd+1,obj1.Height()-wd+1,ColorToARGB(clrWheat));
obj1.Update(false);
//--- Устанавливаем наименование и идентификатор элемента и выводим в журнал его описание
obj1.SetName("Rectangle 1");
obj1.SetID(1);
obj1.Print();
//--- Внутри первого создаём второй элемент, устанавливаем для него прозрачность
//--- и указываем для второго элемента в качестве контейнера первый элемент
int shift=10;
int x=obj1.X()+shift;
int y=obj1.Y()+shift;
int w=obj1.Width()-shift*2;
int h=obj1.Height()-shift*2;
obj2=new CCanvasBase(0,0,"TestScr2",x,y,w,h);
obj2.SetAlpha(250);
obj2.SetContainerObj(obj1);
//--- Инициализируем цвет фона, указываем цвет для заблокированного элемента
//--- и делаем текущим цветом фона элемента цвет фона, заданный по умолчанию
obj2.InitBackColors(clrLime);
obj2.InitBackColorBlocked(clrLightGray);
obj2.BackColorToDefault();
//--- Инициализируем цвет переднего плана, указываем цвет для заблокированного элемента
//--- и делаем текущим цветом переднего плана элемента цвет текста, заданный по умолчанию
obj2.InitForeColors(clrBlack);
obj2.InitForeColorBlocked(clrDimGray);
obj2.ForeColorToDefault();
//--- Инициализируем цвет рамки, указываем цвет для заблокированного элемента
//--- и делаем текущим цветом рамки элемента цвет рамки, заданный по умолчанию
obj2.InitBorderColors(clrBlue);
obj2.InitBorderColorBlocked(clrSilver);
obj2.BorderColorToDefault();
//--- Устанавливаем наименование и идентификатор элемента,
//--- выводим в журнал его описание, и рисуем элемент
obj2.SetName("Rectangle 2");
obj2.SetID(2);
obj2.Print();
obj2.Draw(true);
//--- Проверим обрезку элемента по границам его контейнера
int ms=1; // Задержка при смещении в миллисекундах
int total=obj1.Width()-shift; // Количество итераций цикла смещения
//--- Ждём секунду и смещаем внутренний объект за левый край контейнера
Sleep(1000);
ShiftHorisontal(-1,total,ms);
//--- Ждём секунду и возвращаем внутренний объект на исходное место
Sleep(1000);
ShiftHorisontal(1,total,ms);
//--- Ждём секунду и смещаем внутренний объект за правый край контейнера
Sleep(1000);
ShiftHorisontal(1,total,ms);
//--- Ждём секунду и возвращаем внутренний объект на исходное место
Sleep(1000);
ShiftHorisontal(-1,total,ms);
//--- Ждём секунду и смещаем внутренний объект за верхний край контейнера
Sleep(1000);
ShiftVertical(-1,total,ms);
//--- Ждём секунду и возвращаем внутренний объект на исходное место
Sleep(1000);
ShiftVertical(1,total,ms);
//--- Ждём секунду и смещаем внутренний объект за нижний край контейнера
Sleep(1000);
ShiftVertical(1,total,ms);
//--- Ждём секунду и возвращаем внутренний объект на исходное место
Sleep(1000);
ShiftVertical(-1,total,ms);
//--- Ожидаем секунду и ставим внутреннему объекту флаг заблокированного элемента
Sleep(1000);
obj2.Block(true);
//--- Через три секунды, перед завершением работы, чистим за собой
Sleep(3000);
delete obj1;
delete obj2;
}
//+------------------------------------------------------------------+
//| Смещает объект по горизонтали |
//+------------------------------------------------------------------+
void ShiftHorisontal(const int dx, const int total, const int delay)
{
for(int i=0;i<total;i++)
{
if(obj2.ShiftX(dx))
ChartRedraw();
Sleep(delay);
}
}
//+------------------------------------------------------------------+
//| Смещает объект по вертикали |
//+------------------------------------------------------------------+
void ShiftVertical(const int dy, const int total, const int delay)
{
for(int i=0;i<total;i++)
{
if(obj2.ShiftY(dy))
ChartRedraw();
Sleep(delay);
}
}
//+------------------------------------------------------------------+