# MQL5-MVC-GUI-Framework Универсальная графическая библиотека (фреймворк) для MetaTrader 5, построенная на базе паттерна проектирования **Model-View-Controller (MVC)**. ### О проекте Фреймворк предназначен для создания сложных, интерактивных и масштабируемых графических интерфейсов (GUI). Основной акцент на текущий момент сделан на реализации таблиц с динамическим управлением данными, разделением логики отрисовки и взаимодействия с пользователем. Разработка библиотеки велась поэтапно в рамках серии [обучающих статей на портале MQL5.com](https://www.mql5.com/ru/articles). Каждому этапу развития соответствует отдельный релиз (**Tag**) в данном репозитории. ### Ключевые возможности * **Архитектура MVC:** Четкое разделение данных (**Model**), визуализации (**View**) и логики управления (**Controller**). * **Динамические таблицы:** Поддержка иерархии "Ячейка -> Строка -> Модель". * **Графика на Canvas:** Высокая производительность отрисовки элементов интерфейса. * **Интерактивность:** Поддержка событий мыши, изменение размеров (Resizing) и состояний элементов. * **Матричные структуры:** Поддержка горизонтальных и вертикальных заголовков с синхронизированной прокруткой. * **Гибкая настройка:** Сортировка данных по клику на заголовок и настраиваемые параметры столбцов. ### Структура репозитория ```text MQL5/ └── Shared Projects/ └── MQL5-MVC-GUI-Framework/ ├── Controls/ // Графическое ядро и элементы │ ├── Base.mqh // Базовый класс графических объектов и обработка событий │ └── Controls.mqh // Библиотека интерактивных элементов управления ├── Tables.mqh // Ядро табличных компонентов (Модель) └── README.md // Описание проекта ``` ### История развития (Релизы по статьям) Библиотека эволюционировала вместе с выходом статей. Вы можете переключиться на нужный релиз (Tag), чтобы получить код, соответствующий конкретному этапу: * [v1.0.0](https://forge.mql5.io/artmedia70/Article-17653-MQL5-MVC-Table-Model) — Базовая модель данных ([Статья 17653](https://www.mql5.com/ru/articles/17653)) * [v1.1.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.1.0-Article-17803) — Классы таблицы и заголовка ([Статья 17803](https://www.mql5.com/ru/articles/17803)) * [v1.2.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.2.0-Article-17960) — Графический компонент View на Canvas ([Статья 17960](https://www.mql5.com/ru/articles/17960)) * [v1.3.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.3.0-Article-18221) — Внедрение Контроллера и интерактива ([Статья 18221](https://www.mql5.com/ru/articles/18221)) * [v1.4.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.4.0-Article-18658) — Логика контейнеров и вложенности ([Статья 18658](https://www.mql5.com/ru/articles/18658)) * [v1.5.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.5.0-Article-18941) — Интерактивное изменение размеров (Resizing) ([Статья 18941](https://www.mql5.com/ru/articles/18941)) * [v1.6.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.6.0-Article-19288) — Полная интеграция Модели и Вида ([Статья 19288](https://www.mql5.com/ru/articles/19288)) * [v1.7.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.7.0-Article-19979) — Сортировка и настройка столбцов ([Статья 19979](https://www.mql5.com/ru/articles/19979)) * [v1.8.0](https://forge.mql5.io/artmedia70/MQL5-MVC-GUI-Framework/releases/tag/v1.8.0-Article-20596) — Вертикальные заголовки и матрицы ([Статья 20596](https://www.mql5.com/ru/articles/20596)) ### Как использовать Для работы с библиотекой в своих проектах подключайте основной файл элементов управления: ```cpp #include "Controls\Controls.mqh" ``` Используйте код с осторожностью. При нахождении вашего проекта в другом каталоге внутри **Shared Projects**, используйте относительные пути: ```cpp #include "..\MQL5-MVC-GUI-Framework\Controls\Controls.mqh" ``` Используйте код с осторожностью. ### Расположение исполняемого файла Данный проект является библиотекой (набором заголовочных файлов `.mqh`) и не содержит самостоятельных исполняемых файлов (`.ex5`). Результат компиляции будет находиться в исполняемом файле того проекта (скрипта, индикатора или эксперта), в который подключена данная библиотека. ### Примечания * Все файлы библиотеки сохранены в кодировке **UTF-8** для корректного отображения в репозитории **Git** и поддержки многоязычности. * Для корректной работы относительных путей рекомендуется сохранять библиотеку именно в папку `Shared Projects\MQL5-MVC-GUI-Framework\`. * Библиотека разработана на основе цикла обучающих материалов. Для глубокого понимания архитектуры рекомендуется изучать статьи в хронологическом порядке: ### Список статей цикла: 1. [Реализация модели таблицы в MQL5: Применение концепции MVC](https://www.mql5.com/ru/articles/17653) — Основы структуры данных. 2. [Классы таблицы и заголовка на базе модели таблицы в MQL5: Применение концепции MVC](https://www.mql5.com/ru/articles/17803) — Формирование каркаса таблицы. 3. [Компонент View для таблиц в парадигме MVC на MQL5: Базовый графический элемент](https://www.mql5.com/ru/articles/17960) — Переход к графике на Canvas. 4. [Компоненты View и Controller для таблиц в парадигме MVC на MQL5: Простые элементы управления](https://www.mql5.com/ru/articles/18221) — Обработка событий и интерактив. 5. [Компоненты View и Controller для таблиц в парадигме MVC на MQL5: Контейнеры](https://www.mql5.com/ru/articles/18658) — Иерархия и вложенность элементов. 6. [Компоненты View и Controller для таблиц в парадигме MVC на MQL5: Изменяемые размеры элементов](https://www.mql5.com/ru/articles/18941) — Динамическое изменение геометрии. 7. [Таблицы в парадигме MVC на MQL5: Интегрируем компонент Model в компонент View](https://www.mql5.com/ru/articles/19288) — Отрисовка данных модели в графическом интерфейсе. 8. [Таблицы в парадигме MVC на MQL5: настраиваемые и сортируемые столбцы таблицы](https://www.mql5.com/ru/articles/19979) — Интерактивное управление колонками. 9. [Таблицы в парадигме MVC на MQL5: Таблица корреляции символов](https://www.mql5.com/ru/articles/20596) — Реализация вертикальных заголовков и матричных структур.