Обсуждение статьи "Разработка интерактивного графического пользовательского интерфейса на MQL5 (Часть 1): Создание панели"
Отличные учебники... Хорошая работа
@Isaac Amo Я ценю отзывы и признание. Я польщен. Спасибо.
Ознакомьтесь с новой статьей: Создание интерактивного графического интерфейса пользователя на MQL5 (часть 1): Создание панели.
Автор: Аллан Мунене Мутирия
Очень мило с вашей стороны поделиться этой статьей. Удачная находка
Спасибо @Malcolm Campbell за добрый отзыв и рецензию.
Вышла новая статья Создание интерактивных графических интерфейсов на MQL5 (часть 1): создание панелей:
Автор Аллан Мунене Мутирия
Можно ли сделать так, чтобы эта панель свободно двигалась? Можно ли сделать так, чтобы эта панель свободно двигалась?
Статья мне, как начинающему изучать MQL5, очень понравилась. Спасибо за статью. Но я подумал, что функция deinitialization может быть значительно сокращена, если ObjectDelete выполнять в цикле по всем созданным и сохраненным именам графических объектов. Для этого нужно добавить массив строк, счетчик графических объектов и операторы передачи имен в массив в функции создания и инициализации параметров графических объектов. У меня это сделано так:
#define ADDOBJ ArrayResize(objectsArray, objectCount+1);\ objectsArray[objectCount] = objName;\ objectCount++; string objectsArray[]; int objectCount = 0;
//+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // Удаляем созданные графические объекты for(int i = 0; i < objectCount; i++) { if(ObjectFind(0, objectsArray[i]) >= 0) { ObjectDelete(0, objectsArray[i]); // Print("Объект удален: ", objectsArray[i]); } } }
Ещё я добавил:
input int base_x = 300; // Left indent input int base_y = 100; // Top indent input bool Include_DropDown = false; // Show DropDown //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CreatPanel(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Function to create Panel | //+------------------------------------------------------------------+ void CreatPanel() { createRecLabel("MAIN_REC",10,30,250,400,clrWhite,1,clrBlack); createRecLabel("MAIN_SUB_REC",15,35,240,390,C'245,245,245',1,clrNONE); createRecLabel("MAIN_LINE_UP",15,35,240,1,C'245,245,245',1,clrNONE,BORDER_RAISED); ... if(Include_DropDown) { createDropDown(); } ChartRedraw(0); }
А функции создания графических объектов немного изменил:
//+------------------------------------------------------------------+ //| Function to create text label | //+------------------------------------------------------------------+ bool createLabel(string objName, int xD, int yD, string txt, color clrTxt = clrBlack, int fontSize = 12, string font = "Arial Rounded MT Bold") { ResetLastError(); if(!ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0)) { Print(__FUNCTION__, ": failed to create the label! Error code = ", _LastError); return (false); } ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, base_x + xD); // Add base_x + ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, base_y + yD); // Add base_y + ObjectSetInteger(0, objName, OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetString(0, objName, OBJPROP_TEXT, txt); ObjectSetInteger(0, objName, OBJPROP_COLOR, clrTxt); ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, fontSize); ObjectSetString(0, objName, OBJPROP_FONT, font); ObjectSetInteger(0, objName, OBJPROP_BACK, false); ObjectSetInteger(0, objName, OBJPROP_STATE, false); ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false); ObjectSetInteger(0, objName, OBJPROP_SELECTED, false); ADDOBJ return (true); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Разработка интерактивного графического пользовательского интерфейса на MQL5 (Часть 1): Создание панели:
В статье рассматриваются основные этапы создания и реализации панели графического пользовательского интерфейса (Graphical User Interface, GUI) с помощью языка MetaQuotes Language 5 (MQL5). Пользовательские панели утилит повышают качество взаимодействия с системой при торговле, упрощая типовые задачи и визуализируя важную торговую информацию. Создавая пользовательские панели, трейдеры могут оптимизировать рабочий процесс и сэкономить время при торговых операциях.
Создадим панель графического интерфейса, где будут наиболее распространенные служебные инструменты, которые могут понадобиться трейдеру, поэтому постараемся описать и охватить всё в этой серии статей. В связи с этим количество необходимых элементов велико, но мы ограничим их группами для удобства понимания. Для разработки графического интерфейса будем использовать 4 элемента, и именно с их помощью создадим его. В панель войдут создание торговых кнопок, четких прямоугольников, обновления в реальном времени, использование эмодзи, шрифтов разного стиля, меток, подвижных элементов панели и эффектов наведения. Для иллюстрации всего этого — пример ниже.
Автор: Allan Munene Mutiiria