Обсуждение статьи "Применение контейнеров для компоновки графического интерфейса: класс CBox"

 

Опубликована статья Применение контейнеров для компоновки графического интерфейса: класс CBox:

В данной статье описан альтернативный метод создания графического интерфейса на основе схем компоновки и контейнеров при помощи менеджера компоновки, а именно класса CBox. Класс CBox представляет собой вспомогательное средство управления, которое действует как контейнер основных элементов управления графического интерфейса. Он упрощает составление графических панелей, а иногда и сокращает время написания кода.

Самым простым способом создания графического интерфейса для какого-либо приложения является абсолютное расположение элементов управления внутри его диалогового окна. Тем не менее, иногда подобный подход к проектированию графического пользовательского интерфейса может быть неудобным и даже практически нецелесообразным. В данной статье описан альтернативный метод создания графического интерфейса на основе схем компоновки и контейнеров при помощи менеджера компоновки, а именно класса CBox.

Реализованный и используемый в данной статье класс менеджера компоновки в общих чертах схож с классами, применяемыми в некоторых широко распространенных языках программирования, например BoxLayout (Java) и Pack geometry manager (Python/Tkinter).


3.1. Стили компоновки

CBox предлагает два стиля компоновки: вертикальный и горизонтальный.

Базовая компоновка горизонтального стиля выглядит следующим образом:

Горизонтальный стиль класса CBox

Рис. 2. Горизонтальный стиль (центрированный)

Базовая компоновка вертикального стиля выглядит следующим образом:

Вертикальный стиль класса CBox

Рис. 3. Вертикальный стиль (центрированный)

По умолчанию CBox применяет горизонтальный стиль.

Комбинация данных типов компоновки (возможно, с использованием нескольких контейнеров) позволяет воссоздать практически любой вариант графического интерфейса. Более того, размещение элементов внутри контейнеров допускает сегментированное проектирование. Иными словами, вы можете изменять размер и расположение элементов управления в одном контейнере без воздействия на элементы других контейнеров.

Автор: Enrico Lambino

 

Большое спасибо Энрико за статью, CBox и примеры! Очень полезно.

Есть вопрос, хотя и немного не связанный, что нужно добавить, если я хочу, чтобы пользователь мог изменять размер диалога, перетаскивая границу диалога?

Еще раз спасибо!

 
Amir Yacoby:

У меня вопрос, хотя и немного не связанный с этим: что нужно добавить, если я хочу, чтобы пользователь мог изменять размер диалога, перетаскивая его границы?

Я не уверен в этом, но, насколько я знаю, такая возможность пока не поддерживается. Но было бы хорошо, если бы это было возможно, поскольку отдельные элементы управления и контейнеры будут по-прежнему следовать своим макетам без дополнительного позиционирования (например, если макеты центрированы, пространство будет максимизировано, так что элементы управления по-прежнему будут находиться в центре). В этом случае нужно просто переопределить метод OnResize() класса, чтобы снова вызвать метод Pack() главного контейнера CBox.
 
Enrico Lambino:
Я не уверен в этом, но, насколько я знаю, такая возможность пока не поддерживается. Но было бы хорошо, если бы это было возможно, поскольку отдельные элементы управления и контейнеры будут по-прежнему следовать своим макетам без дальнейшего изменения расположения (например, если макеты центрированы, пространство будет максимизировано, так что элементы управления по-прежнему будут находиться в центре). В этом случае вам просто нужно переопределить метод OnResize() класса, чтобы снова вызвать метод Pack() главного контейнера CBox.
Да, похоже, что MT терминал не поддерживает. Отличная работа, спасибо еще раз!
 

такой класс нужно в стандартные  внести разработчиками!

супер!!!

 
WeChat бесплатный опыт крики, еще одна прибыль более тысячи очков QQ группы: 375124107, плюс группа, пожалуйста, обратите внимание "77", спасибо за сотрудничество!
 

Где находится файл "Layouts\Box.mqh"?

Я не нашел всю директорию "Layouts". Спасибо.

 
Paul Xiang:

Где находится файл "Layouts\Box.mqh"?

Я не нашел всю директорию "Layouts". Спасибо.

В нижней части этого сообщения (здесь, и прокрутите до конца статьи: https: //www.mql5.com/en/articles/1867)
Using Layouts and Containers for GUI Controls: The CBox Class
Using Layouts and Containers for GUI Controls: The CBox Class
  • 2015.07.09
  • Enrico Lambino
  • www.mql5.com
This article presents an alternative method of GUI creation based on layouts and containers, using one layout manager — the CBox class. The CBox class is an auxiliary control that acts as a container for essential controls in a GUI panel. It can make designing graphical panels easier, and in some cases, reduce coding time.
 
Очень интересно... но для новичков, вроде меня, все эти файлы куда нужно поместить?
 
Здравствуйте. Очень хороший класс, но если мы помещаем radiogroup или checkgeoup внутрь бокса, то он не отображается.
Есть ли способ сделать так, чтобы это работало?
Если я оставлю тот же код, но добавлю его в главное окно/диалог, я смогу увидеть мою радиогруппу.

Спасибо. Люк
 
LucTelmosse:
Здравствуйте. Очень хороший класс, но если мы помещаем radiogroup или checkgeoup внутрь бокса, то он не отображается.
Есть ли способ сделать так, чтобы это работало?
Если я оставлю тот же код, но добавлю его в главное окно/диалог, я смогу увидеть мою радиогруппу.

Спасибо. Люк

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

Можно показать радиогруппу или контрольную группу. У меня есть несколько графических интерфейсов, которые делают это. Возможно, есть другие проблемы, например, не добавляется в контейнер CBOx или контейнер слишком мал. Во время разработки я устанавливаю для фона (основного и контейнеров) какой-либо цвет, чтобы было легче увидеть, где находятся границы. Я смогу помочь вам дальше, если вы покажете код, хотя бы для функции Create() главного диалога.