У каждого из этих диалогов есть свой пятизначный ID, с которого начинается значение sparam.
sparam: 20328ClientBack sparam: 01677Border
По этому ID (член класса CAppDialog::m_instance_id) и нужно вызывать соответствующий инстанс. А так, как сейчас, в OnChartEvent() передается управление обоим инстансам. Вот они и реагируют одинаково.
У каждого из этих диалогов есть свой пятизначный ID, с которого начинается значение sparam.
По этому ID (член класса CAppDialog::m_instance_id) и нужно вызывать соответствующий инстанс. А так, как сейчас, в OnChartEvent() передается управление обоим инстансам. Вот они и реагируют одинаково.
Спасибо за ответ! В теории понятно, а практически буду разбираться...
Данная проблема фиксилась наравне со многими другими в этой статье.
Если вкратце, то вот фрагмент:
Класс CAppDialog теперь учитывает instance_id окна при назначении идентификаторов элементам интерфейса. Без этой правки элементы управления в разных окнах с одинаковыми именами конфликтовали (влияли друг на друга).
В файле Dialog.mqh нужно в методе bool CAppDialog::Run заменить строку:
if(Id(m_subwin*CONTROLS_MAXIMUM_ID)>CONTROLS_MAXIMUM_ID)
на такую:
if(Id(StringToInteger(m_instance_id) + m_subwin * CONTROLS_MAXIMUM_ID) > CONTROLS_MAXIMUM_ID)Без правки стандартных классов в любом случае не обойтись, потому что поле m_instance_id сделано приватным и нет метода-аксессора к нему.
- www.mql5.com
В файле Dialog.mqh нужно в методе bool CAppDialog::Run заменить строку:
на такую:
Без правки стандартных классов в любом случае не обойтись, потому что поле m_instance_id сделано приватным и нет метода-аксессора к нему.Вот так вроде заработало хорошо. Огромное спасибо!!!
Вопрос наверное дурацкий, но после дальнейших обновлений придется каждый раз править Dialog.mqh ?
Вопрос наверное дурацкий, но после дальнейших обновлений придется каждый раз править Dialog.mqh ?
Можно везде использовать свои классы, пропатченные.
Еще, хоть я и не пробовал, можно поставить у модифицированных исходников атрибут "только чтение". По идее, инсталлятор должен их оставить как есть.
Основная задача выполнена - несколько окон работают и управляются раздельно. Спасибо всем откликнувшимся!
Но!)) Теперь появилась другая проблемка - диалоги минимизируются при переходе на другие графики и возврате обратно. Причем накладываются друг на друга и их уже невозможно восстановить в стандартном размере. Попробовал исправить так
virtual void OnClickButtonMinMax(void) {}
но минимизация по кнопке отключается, а при переходе на другие графики диалоги все равно сворачиваются.
Может заодно и по этому вопросу кто-нибудь укажет решение?)
Основная задача выполнена - несколько окон работают и управляются раздельно. Спасибо всем откликнувшимся!
Но!)) Теперь появилась другая проблемка - диалоги минимизируются при переходе на другие графики и возврате обратно. Причем накладываются друг на друга и их уже невозможно восстановить в стандартном размере. Попробовал исправить так
virtual void OnClickButtonMinMax(void) {}
но минимизация по кнопке отключается, а при переходе на другие графики диалоги все равно сворачиваются.
Может заодно и по этому вопросу кто-нибудь укажет решение?)
Проблема фиксилась в моих статьях, но так просто как предыдущую её не пропатчить. Потребуется прочитать, например, статью (раздел "Резиновые" окна), но с тех пор могло что-то измениться в MQL и потребуется "допиливать". Попробуйте для начала взять папку ControlsPlus и работать с ней. Вероятно, более поздняя версия "плюсовых контролов" лежит в более поздних статьях, в частности, про формы (но там не описываются принципы окон) https://www.mql5.com/ru/articles/7795.
- www.mql5.com
Но!)) Теперь появилась другая проблемка - диалоги минимизируются при переходе на другие графики и возврате обратно. Причем накладываются друг на друга и их уже невозможно восстановить в стандартном размере.
Проблема была только в МТ4, в МТ5 все работает норм.
Решил для себя, просто обнулив функцию Minimize:
#ifdef __MQL4__
virtual void Minimize() {};
#endif}
Конечно после этого сворачивать окна нельзя, но меня пока вполне и так устраивает. Всем спасибо за помощь!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Прошу совета специалистов по классам, в частности стандартному примеру ControlsDialog.
Есть потребность вывести на график несколько окон с идентичным дизайном для дальнейшей раздельной обработки событий (нажатие кнопок, ввод даты и т.п.). Попробовал просто объявить еще одну копию: новый диалог выводится, но любое событие обрабатывается сразу в двух окнах параллельно. То есть, если ввести дату, значение в поле edit, нажать радиобаттон и т.п., то введенные или измененные данные отображаются сразу в двух окнах.
Вообще возможна ли раздельная обработка событий для одного класса? Если да, то где копать информацию
ControlsDialog.mqh не трогал. Исправленный код controls.mq5
Результат
Заранее спасибо!