Приветствую Анатолий, не увидел в базовом классе методов сохранения,загрузки параметров формы(положение, состояние...). Планируете ли в будущем добавить такие методы с учётом типа форм?
Такая статья запланирована. Но в моей версии, какие параметры сохранять и загружать будет определять сам разработчик MQL-приложения.
Доброго времени суток. Анатолий, конечно же хочу высказать глубочайшее уважение к Вашему труду и работе, которую Вы проделали. Но у меня при тестировании библиотеки на примере советника возник вопрос. Почему цвет окна получается черным, тогда как все цвета элементов, из которых оно состоит,по умолчанию выставлены как LightGray? Не происходит ли где-то наложения цветов, в результате чего окно получается черным? Скриншот прилагаю:
Доброго времени суток. Анатолий, конечно же хочу высказать глубочайшее уважение к Вашему труду и работе, которую Вы проделали. Но у меня при тестировании библиотеки на примере советника возник вопрос. Почему цвет окна получается черным, тогда как все цвета элементов, из которых оно состоит,по умолчанию выставлены как LightGray? Не происходит ли где-то наложения цветов, в результате чего окно получается черным? Скриншот прилагаю:
Какими у формы выставлены цвета по умолчанию Вы можете посмотреть в конструкторе класса CWindow (файл Window.mqh).
Если Вам нужно изменить цвета формы, воспользуйтесь соответствующими методами класса CWindow. Свойства формы устанавливаются перед её созданием.
В статье был показан вот такой пример:
//+------------------------------------------------------------------+ //| Создает форму для элементов управления | //+------------------------------------------------------------------+ bool CProgram::CreateWindow(const string caption_text) { //--- Добавим указатель окна в массив окон CWndContainer::AddWindow(m_window); //--- Свойства m_window.XSize(200); m_window.YSize(200); m_window.WindowBgColor(clrWhiteSmoke); m_window.WindowBorderColor(clrLightSteelBlue); m_window.CaptionBgColor(clrLightSteelBlue); m_window.CaptionBgColorHover(C'200,210,225'); //--- Создание формы if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,1,1)) return(false); //--- return(true); }
//---
Результат:
Не нашел метод, который изменял цвет текста Заголовка, поэтому решил добавить в window.mqh:
string m_caption_text;
int m_caption_height;
color m_caption_text_color;
color m_caption_bg_color;
color m_caption_bg_color_off;
color m_caption_bg_color_hover;
color m_caption_color_bg_array[];
И методы:
color CaptionTextColor(void) const { return(m_caption_text_color); }
Ну и этот метод соответственно меняется:
//| Создаёт текстовую метку заголовка |
//+------------------------------------------------------------------+
bool CWindow::CreateLabel(void)
{
string name=CElementBase::ProgramName()+"_window_label_"+(string)CElementBase::Id();
//--- Координаты объекта
int x=CElementBase::X()+m_label_x_gap;
int y=CElementBase::Y()+m_label_y_gap;
//--- Установим текстовую метку
if(!m_label.Create(m_chart_id,name,m_subwin,x,y))
return(false);
//--- Установим свойства
m_label.Description(m_caption_text);
m_label.Font(CElementBase::Font());
m_label.FontSize(CElementBase::FontSize());
m_label.Color(m_caption_text_color);
m_label.Corner(m_corner);
m_label.Selectable(false);
m_label.Z_Order(m_button_zorder);
m_label.Tooltip("\n");
//--- Сохраним координаты
m_label.X(x);
m_label.Y(y);
//--- Отступы от крайней точки
m_label.XGap(x-m_x);
m_label.YGap(y-m_y);
//--- Сохраним размеры
m_label.XSize(m_label.X_Size());
m_label.YSize(m_label.Y_Size());
//--- Сохраним указатель объекта
CElementBase::AddToArray(m_label);
return(true);
}
Не нашел метод, который изменял цвет текста Заголовка, поэтому решил добавить в window.mqh:
Хорошо. Тоже добавлю такую возможность в одной из следующих статей.
Последнюю на текущий момент версию библиотеки можно скачать вот в этой статье: Графические интерфейсы X: Новые возможности для нарисованной таблицы (build 9)
Возможно уже на следующей неделе выйдет новая версия (build 10).

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Графические интерфейсы I: Форма для элементов управления (Глава 2):
Эта статья является продолжением первой части серии о графических интерфейсах. Более подробно, для чего предназначена эта библиотека, можно прочитать в самой первой статье: Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1). Полный список ссылок на статьи первой части находится в конце каждой главы и там же есть возможность загрузить к себе на компьютер полную версию библиотеки на текущей стадии разработки. Файлы нужно разместить по тем же директориям, как они расположены в архиве.
В предыдущей главе мы рассматривали структуру библиотеки для создания графических интерфейсов. Были созданы (1) производные классы для объектов-примитивов, (2) базовый класс для всех элементов управления, (3) основные классы, предназначенные для хранения указателей на элементы и управления этими элементами в общем обработчике событий.
В этой статье мы создадим первый и самый главный элемент графических интерфейсов — форму для элементов управления. К этой форме можно будет присоединять множество различных элементов управления в любом расположении и в любых комбинациях. Форму можно будет перемещать, при этом все элементы управления, которые к ней присоединены, будут перемещаться вместе с ней.
Из каких частей состоит окно, которое мы собираемся создать?
Рис. 1. Составные части формы для элементов управления
Автор: Anatoli Kazharski