Обсуждение статьи "Как создать графическую панель любой сложности и как это работает" - страница 8
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте!
У меня такой вопрос - я хотел бы создать на торговой панели несколько вкладок т.е. по нажатии одной кнопки появляется один набор элементов, по нажатии другой кнопки другой набор элементов. Чтобы скрыть элементы из одной вкладки я применил свойство Hide() для этого элемента в обработчике события onClick кнопки-вкладки и элемент перестает быть видимым на панели, но своих свойств он не теряет и если кликнуть по тому месту где находился этот элемент, то onEvent() панели примет в обработку это событие. Вопрос - как сделать так чтобы скрытый элемент так же и не реагировал ни на какие действия пользователя. Пробовал включить свойство Элемент.Disable() опять же в методе onClick кнопки-вкладки, но ничего не происходит, элемент как реагировал на клик кнопки так и реагирует хотя и невидим. Как програмно его выключить по нажатию на одной вкладке и потом програмно включить по нажатию на другой вкладке?
Попробуйте пропатчить библиотеку контролов: в файле Wnd.mqh в начале метода OnMouseEvent не хватает строки:
Подробности описаны в статье (Применение OLAP в трейдинге (Часть 2) - статья про OLAP, но там есть раздел по GUI, где указанная проблема затрагивается):
в минимизированном состоянии кнопка "ресайза" скрывается и делается неактивной. Проблема находится в методе CWnd::OnMouseEvent. В нем не хватает такой проверки:
// if(!IS_ENABLED || !IS_VISIBLE) return false; - этой строки нетВ результате даже отключенные и невидимые "контролы" перехватывают события. Очевидно, что проблему можно было бы решить с помощью установки соответствующего Z-порядка управляющих элементов. Однако и здесь обнаружилась недоработка — библиотека не учитывает Z-порядок элементов. В частности, если заглянуть в метод CWndContainer::OnMouseEvent, то мы увидим простой цикл в обратном порядке по всем подчиненным элементам, без попыток определить их приоритет по Z-порядку.
Таким образом, требуется либо очередной "патч" библиотеки, либо некий "финт" в производном классе.
В принципе, в стандартной библиотеке контролов много что надо бы подправить. Поэтому была написана альтернативная, уже пропатченная, реализация ControlsPlus - целиком её можно взять в статье Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2 (если интересно - есть части 1 и 3).
Попробуйте пропатчить библиотеку контролов: в файле Wnd.mqh в начале метода OnMouseEvent не хватает строки:
Подробности описаны в статье (Применение OLAP в трейдинге (Часть 2) - статья про OLAP, но там есть раздел по GUI, где указанная проблема затрагивается):
В принципе, в стандартной библиотеке контролов много что надо бы подправить. Поэтому была написана альтернативная, уже пропатченная, реализация ControlsPlus - целиком её можно взять в статье Язык MQL как средство разметки графического интерфейса MQL-программ. Часть 2 (если интересно - есть части 1 и 3).
Спасибо, будем пробовать.
Как записать/передать текст в CLabel из OnTick ?
class CControlsDialog : public CAppDialog
{
private:
CLabel m_label; // CLabel object
.....
void OnTick()
{
m_label.Text(DoubleToString(Ask,4));
....
получаю ошибку
'm_label' - undeclared identifier ...
что не так?
Как записать/передать текст в CLabel из OnTick ?
получаю ошибку'm_label' - undeclared identifier ...
что не так?
А привязка к графику, координаты и т.д. как в функции CreateLabel() тут в справке показывается, сделали?
А привязка к графику, координаты и т.д. как в функции CreateLabel() тут в справке показывается, сделали?
да
если прямо там записать в объект текст, то все норм
а если в OnTick пытаюсь записать, то ругается
не надо же объект на каждом тике пересоздавать?да
если прямо там записать в объект текст, то все норм
а если в OnTick пытаюсь записать, то ругается
не надо же объект на каждом тике пересоздавать?А если m_label в public секцию перенести ?
пробовал, ошибка та же
просто я на 4-рке делаю
думаю что в этом засада
плюсом вот это еще не прокатывает, хотя и компилится
m_scroll_v1. Disable(); (пробую по переключению радиокнопок, интересно же менять интерфейс). Destroy() срабатывает, а вот Disable не хочет
пробовал
просто я на 4-рке делаю
думаю что в этом засада
плюсом вот это еще не прокатывает, хотя и компилится
m_scroll_v1. Disable(); (пробую по переключению радиокнопок, интересно же менять интерфейс). Destroy() срабатывает, а вот Disable не хочет
В 4-ке тоже все работает. А объект который определили. Вызов из него нужно делать. Типа Panel.m_label.Text( "Max.Margin")
так работает
спасибо!
сначала добавил родителя, потом перенес в паблик и работает
а это m_scroll_v1. Disable(); пока не пашет
так работает
спасибо!
сначала добавил родителя, потом перенес в паблик и работает
а это m_scroll_v1. Disable(); пока не пашет