138 行
11 KiB
MQL5
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);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|