Обсуждение статьи "Язык MQL как средство разметки графического интерфейса MQL-программ (Часть 3). Дизайнер форм"

 

Опубликована статья Язык MQL как средство разметки графического интерфейса MQL-программ (Часть 3). Дизайнер форм:

В этой статье мы завершаем описание концепции построения оконного интерфейса MQL-программ с помощью конструкций языка MQL. Специальный графический редактор позволит интерактивно настраивать раскладку, состоящую из основных классов элементов GUI, и затем экспортировать её в MQL-описание для использования в вашем MQL-проекте. Представлено внутреннее устройство редактора и руководство пользователя. Исходные коды прилагаются.

Редактор рассчитан на классы интерфейсных элементов Стандартной библиотеки. Для создания аналогичных инструментов для других библиотек потребуется написать конкретные реализации всех абстрактных сущностей из предложенной системы разметки. При этом следует руководствоваться реализацией классов разметки для Стандартной библиотеки.

Следует обратить внимание, что название "библиотека стандартных компонентов" не совсем соответствует действительности, так как в контексте предыдущих статей нам уже пришлось существенно её модифицировать и вывести в параллельную версионную ветку в папке ControlsPlus. В рамках данной статьи мы будем продолжать её использовать и модифицировать.

Перечислим типы элементов, которые будет поддерживать редактор.

  • контейнеры CBox с горизонтальной (CBoxH) и вертикальной ориентацией (CBoxV),
  • кнопка CButton,
  • поле ввода CEdit,
  • метка CLabel,
  • поле ввода с перебором значений SpinEditResizable,
  • календарь CDatePicker,
  • выпадающий список ComboBoxResizable,
  • список ListViewResizable,
  • группа независимых переключателей CheckGroupResizable,
  • группа зависимых переключателей RadioGroupResizable.

Все классы обеспечивают адаптивное изменение размера (некоторые стандартные типы умели это изначально, для других пришлось вносить существенные правки).

Процесс редактирования формы

Процесс редактирования формы

Автор: Stanislav Korotky

 
Мощно получилось!
 
Поздравляю! Отличная работа и статьи.
 
Наконец то, достойная конкуренция (имею ввиду результат). Теперь, держитесь!))) 
 

Визуальный редактор, все таки, должен включать ручное редактирование элементов - растягивание, перемещение, печатание текста, копирование и прочее. Желательно наличие вспомогательной разметки. 

Этот редактор подает надежды, хотя я не представляю как автор реализует остальные требования, так как не понимаю его технологии. Он "встал на плечи" стандартной библиотеки и с одной стороны это дало мощный толчек вперед, с другой - заставляет наследовать ее ограничения. Она же не предназначена для масштабной трансформации... Много функционала придется дописывать сверху.

Список требований к будущему редактору:

1. Мануальная настройка элементов.

2. Копирование элементов.

3. Одновременное управление свойством множества элементов.

4. Вспомогательная раметка.

5. Многооконный режим.

6. Создание окон разных типов.

7. Поддержка свойств окон: "всегда сверху", блокируещее остальные, с/без сворачивания.

8. Параллельное редактирование окон.

9. Удаление окон.

Пока все. 


ЗЫ. Насколько я знаю, контроллы СБ состоят из МТ-объектов, что с одной стороны - упрощает систему взаимодействия с элементами и мануальную настройку (давным давно у меня был редактор на основе МТ-объектов и его несложно было сделать), с другой (если принять это упрощение) - отнимает все преимущества канваса (среди которых - скорость, визуальные эффекты и многое другое). То есть - "допинг-эффект" от использования СБ при создании редактора, его жестко ограничивает в развитии. Но, посмотрим...

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Интересно, что даже без канваса, автор может сделать вспомогательную разметку, если решит вопрос ручной установки элементов. Я так делал. Конечно, разметка на канвасе визуально круче, но в редакторе шарпа например, разметка хоть и скудная, но практичная. Лишь пара линий помогают позиционировать контроллы. Я был удивлен когда заглянул в него после того, как сделал свою разметку. 

Панель задачь тоже нужно сделать. Желательно.
 
Это очень хорошо!
Поздравляю!

Удивительно, как MT5 становится все лучше и лучше с течением времени.
В ближайшем будущем, я думаю, любой сможет построить и настроить любой графический интерфейс, который будет соответствовать вашим потребностям.
 
В кодовой базе опубликован новый пример программы с графическим интерфейсом, построенным на основе декларативного проектирования компоновки MQL - ChartBrowser.
ChartBrowser
ChartBrowser
  • www.mql5.com
This is an utility which allows you to list all open charts, indicators, expert advisers, and scripts in alphabetic order, and switch between them.
 

Здравствуйте,

Я столкнулся с подобной ситуацией на одном из своих ноутбуков.

Все выглядит крошечным, кроме текстовых меток.

Значение параметра "TerminalInfoInteger(TERMINAL_SCREEN_DPI)" равно 192.

Вы знаете, как решить эту проблему? Я думал, что библиотеки будут автоматически подстраиваться под настройки экрана.


 
Guilherme Mendonca #:

Привет,

Я столкнулся с подобной ситуацией на одном из своих ноутбуков.

Все выглядит крошечным, кроме текстовых меток.

Значение параметра "TerminalInfoInteger(TERMINAL_SCREEN_DPI)" равно 192.

Вы знаете, как решить эту проблему? Я думал, что библиотеки будут автоматически подстраиваться под настройки моего экрана.


К сожалению, у меня нет возможности проверить это в разных условиях. Библиотека основана на стандартных элементах управления (с небольшими исправлениями, не связанными с dpi). Так что если она и подстраивается каким-то образом, то это, похоже, общая проблема, а не библиотеки.

Но я думаю, что сначала вам следует проверить настройки масштаба в Windows.

 
Guilherme Mendonca #:

Я столкнулся с подобной ситуацией на одном из своих ноутбуков.

Просто идея - попробуйте изменить Defines.mqh на:

#define  CONTROLS_FONT_SIZE                  (-10)

Добавляется знак минус.

Или другая идея:

#define  CONTROLS_FONT_SIZE                  ((int)(10.0 / (TerminalInfoInteger(TERMINAL_SCREEN_DPI) / 96.0)))
Дайте мне знать, если любой из вариантов поможет.