//+------------------------------------------------------------------+ //| 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