Обсуждение статьи "Графические интерфейсы IX: Элементы "Индикатор выполнения" и "Линейный график" (Глава 2)"
Супер!
С моей точки зрения, сейчас Вы однозначно впереди всех разработчиков графики на MQL.
Для себя сделал вывод, что мне есть к чему стремиться.
Результат поражает воображение!
Удачи в дальнейшем развитии.
Супер!
С моей точки зрения, сейчас Вы однозначно впереди всех разработчиков графики на MQL.
Для себя сделал вывод, что мне есть к чему стремиться.
Результат поражает воображение!
Удачи в дальнейшем развитии.
Стремиться всегда есть к чему. )
Вот, посмотрите на работы мастера, которые Вас вдохновят ещё больше: Юрий Куликов >>>
Стремиться всегда есть к чему. )
Вот, посмотрите на работы мастера, которые Вас вдохновят ещё больше: Юрий Куликов >>>
Спасибо, действительно, впечатляет!
Знаете, хотел задать Вам вопрос...
Вы создавали свой проект используя ООП. Реализовали практически все основные элементы управления. Создали богатую библиотеку...
При этом, сколько уже наработанного до Вас кода Вы использовали в своей работе?
Ну например, насколько использовали библиотеку элементов управления в МТ, Канвас, и т.д...
Лично мне приходилось все создавать с нуля и по совершенно новой технологии, в которой никак нельзя было применить уже наработанные вещи.
В будущем, разработка моего проекта также не будет продолжатся другими разработчиками и они не смогут принимать участие в его развитии, так как технология никому кроме меня не знакома.
В Вашем случае, все наоборот... Все программисты смогут принять участие в улучшении и развитии Вашей библиотеки.
Ну а помешать этому может только одно, - лень.
При этом, сколько уже наработанного до Вас кода Вы использовали в своей работе?
Ну например, насколько использовали библиотеку элементов управления в МТ, Канвас, и т.д...
В первой статье этой серии я отвечал на этот вопрос: Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1). Там показана структура классов стандартной библиотеки для работы со стандартными графическими объектами-примитивами.
Список классов, которые я использую в проекте:
- CChartObjectRectLabel - прямоугольная метка.
- CChartObjectEdit - поле ввода.
- CChartObjectLabel - текстовая метка.
- CChartObjectBmpLabel - графическая метка.
- CChartObjectButton - кнопка.
- CCanvas - обеспечивает создание графического ресурса (с привязкой к объекту чарта или без) и рисование графических примитивов.
В идеале должен остаться только один класс - CCanvas. Полезная тема по этому вопросу здесь: Делаем краудсорсовый проект по Canvas >>>
Перед тем, как начать разработку, я изучил стандартную библиотеку для создания графических интерфейсов и версию Дмитрия Федосеева. Затем составил список, чего мне лично не хватает и начал работу над проектом. Список того, что нужно сделать, ещё довольно большой и постоянно пополняется предложениями от других заинтересованных пользователей. Просто всё это происходит в основном в личной переписке. Также идёт работа над ошибками и недоработками, которые постепенно выявляются при использовании библиотеки в своих проектах.
Ну а помешать этому может только одно, - лень.
С этим проблем нет. )
В первой статье этой серии я отвечал на этот вопрос: Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1). Там показана структура классов стандартной библиотеки для работы со стандартными графическими объектами-примитивами.
Список классов, которые я использую в проекте:
- CChartObjectRectLabel - прямоугольная метка.
- CChartObjectEdit - поле ввода.
- CChartObjectLabel - текстовая метка.
- CChartObjectBmpLabel - графическая метка.
- CChartObjectButton - кнопка.
- CCanvas - обеспечивает создание графического ресурса (с привязкой к объекту чарта или без) и рисование графических примитивов.
В идеале должен остаться только один класс - CCanvas. Полезная тема по этому вопросу: Делаем краудсорсовый проект по Canvas >>>
Перед тем, как начать разработку, я изучил стандартную библиотеку для создания графических интерфейсов и версию Дмитрия Федосеева. Затем составил список, чего мне лично не хватает и начал работу над проектом. Список того, что нужно сделать, ещё довольно большой и постоянно пополняется предложениями от других заинтересованных пользователей. Просто всё это происходит в основном в личной переписке. Также идёт работа над ошибками и недоработками, которые постепенно выявляются при использовании библиотеки в своих проектах.
С этим проблем нет. )
Спасибо за подробный ответ. )
Желаю Вам дальнейшей продуктивной работы.
Анатолий, прошу прощения за навязчивость, но хотелось бы знать каким образом возможно обновлять прогресс-бар внутри цикла с тяжёлыми вычислениями.
Например, имеем прогресс-бар m_progress_bar, имеем цикл внутри CProgram
m_progress_bar.Show(); // бессмысленно, так как он и так виден сразу при показе окна (m_window.Show()), к которому он привязан, // а хотелось бы создавать его в скрытом состоянии, и показывать тогда, когда он необходим int total=1000; // некое количество итераций цикла, которые хочется отобразить прогресс-баром for(int i=0;i<total;i++) { Func(); // Функция с тяжёлыми вычислениями на каждой итерации цикла m_progress_bar.Update(i,total); // ничего не даёт: прогресс-бар находится в "зависшем" - своём начальном состоянии } //--- по завершении цикла прогресс-бар необходимо скрыть, //--- и в данной ситуации он во время цикла не обновляется, а потом скрывается наложением на него иного объекта m_progress_bar.Hide(); // не скрывает почему-то прогресс-бар, приходится скрывать его под иным граф. объектом
Мог бы пояснить на таком "абстрактом" примере что я не понимаю?
Данные какие-нибудь передать было-бы невредно...
А это?
m_progress_bar.Update(i,total);
А это?
Не катит.
Почему?
//+------------------------------------------------------------------+ //| Обновляет прогресс бар | //+------------------------------------------------------------------+ void CProgressBar::Update(const int index,const int total) { //--- Установить новый индекс CurrentIndex(index); //--- Установить новый диапазон StepsTotal(total); //--- Рассчитаем ширину индикатора double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize(); //--- Скорректировать, если меньше 1 if((int)new_width<1) new_width=1; else { //--- Скорректировать с учётом ширины рамки int x_size=m_bar_bg.XSize()-(m_bar_border_width*2); //--- Скорректировать, если выход за границу if((int)new_width>=x_size) new_width=x_size; } //--- Установим индикатору новую ширину m_indicator.X_Size((int)new_width); //--- Рассчитаем процент и сформируем строку double percent =m_current_index/m_steps_total*100; string desc =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%"; //--- Установим новое значение m_percent.Description(desc); } //+------------------------------------------------------------------+
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Графические интерфейсы IX: Элементы "Индикатор выполнения" и "Линейный график" (Глава 2):
Вторая глава девятой части серии будет посвящена элементам «Индикатор выполнения» и «Линейный график». Как всегда, будут показаны подробные примеры того, как можно использовать эти элементы в своих MQL-приложениях.
Перечислим все составные части, из которых будет собираться элемент «Индикатор выполнения» в разрабатываемой библиотеке.
Рис. 1. Составные части элемента «Индикатор выполнения».
Автор: Anatoli Kazharski