Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решил поэкспериментировать со стандартным UI компонентом CAppDialog. Немного переопределил его, чтобы можно было реализовать следующий функционал:
Казалось бы, всё работает. Исходник в прикрепленном файле "UI_Test_3_B.mq5" .
Но мне нужно, чтобы кнопка показа/скрытия диалога отжималась обратно, если я нажму на крестик в правом верхнем углу диалога. Окно не останавливает программу (как по умолчанию), так как я переопределил обработчик OnClickButtonClose диалога.
Поскольку, по умолчанию нельзя так просто узнать программно, показан диалог или скрыт, то пришлось искать соответствующий флаг среди StateFlags диалога, написав соответствующий метод:
Но тут я узнал о еще одной особенности CAppDialog. После его скрытия WND_STATE_FLAG_VISIBLE появляется в диалоге не сразу. По крайней мере, в обработчике OnChartEvent его отсутствие не определяется с помощью написанного мной метода getVisible().
Как видно из данного фрагмента, если диалог скрыт (!main.getVisible()), то кнопка отжимается (btnSH.State(false)). Это должно происходить после срабатывания метода Hide(), в переопределенном обработчике диалога OnClickButtonClose().
Но, к сожалению, флаги меняются с опозданием.
Что ж, я решил добавить обычный флаг visible в диалог и переопределить его методы Show() и Hide(), чтобы они записывали видимость в данную переменную. Исходник: UI_Test_3_E.mq5.
Но теперь отладчик неожиданно заругался:
Почему нельзя переопределить данные методы и отладчик отказывается работать по непонятной причине?
Информация о терминале, ОС и железе для Разработчиков: