Обсуждение статьи "Как создать графическую панель любой сложности и как это работает" - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не поможете с таким вопросом.
Я добавил в Ваш файл "AppWindowTwoButtonsClass" функцию сдвига панели setShift(). Теперь если мы двинем границу графика справа и она подойдет к панели, панель начнет двигаться влево вместе с границей графика.
Вызов этой функции выделил желтым.
Вопрос в том, можно ли каким-то образом сделать вызов этой функции через этот псевдокод
чтобы вызов был из класса наследника, а не из глобальной функции OnChartEvent().
Несколько дефайнов перепробовал: ON_NO_ID_EVENT(event,handler), ON_OTHER_EVENTS(handler). Но что-то плохо понимаю их работу.
Файл с добавочной функцией setShift() прикладываю.
Огромное спасибо за очень нужную статью.
У меня вопрос - можна ли в более простой способ "привязать" панел к месту куда я ее передвинул? Имею ввиду если поменять ТФ то чтобы панель отрисовалась там же где была. Пока что единственное что приходит в голову на таймере отслеживать перемещение и писать в глобальные. Если уже где-то обсуждался вопрос то буду весьма благодарен за ссылку.
Спасибо
на таймере отслеживать перемещение и писать в глобальные
Лучше из соответствующего OnChartEvent. В глобалки или в файл.
Лучше из соответствующего OnChartEvent. В глобалки или в файл.
Спасибо
Здравствуйте!
У меня такой вопрос - я хотел бы создать на торговой панели несколько вкладок т.е. по нажатии одной кнопки появляется один набор элементов, по нажатии другой кнопки другой набор элементов. Чтобы скрыть элементы из одной вкладки я применил свойство Hide() для этого элемента в обработчике события onClick кнопки-вкладки и элемент перестает быть видимым на панели, но своих свойств он не теряет и если кликнуть по тому месту где находился этот элемент, то onEvent() панели примет в обработку это событие. Вопрос - как сделать так чтобы скрытый элемент так же и не реагировал ни на какие действия пользователя. Пробовал включить свойство Элемент.Disable() опять же в методе onClick кнопки-вкладки, но ничего не происходит, элемент как реагировал на клик кнопки так и реагирует хотя и невидим. Как програмно его выключить по нажатию на одной вкладке и потом програмно включить по нажатию на другой вкладке?
Здравствуйте!
У меня такой вопрос - я хотел бы создать на торговой панели несколько вкладок т.е. по нажатии одной кнопки появляется один набор элементов, по нажатии другой кнопки другой набор элементов. Чтобы скрыть элементы из одной вкладки я применил свойство Hide() для этого элемента в обработчике события onClick кнопки-вкладки и элемент перестает быть видимым на панели, но своих свойств он не теряет и если кликнуть по тому месту где находился этот элемент, то onEvent() панели примет в обработку это событие. Вопрос - как сделать так чтобы скрытый элемент так же и не реагировал ни на какие действия пользователя. Пробовал включить свойство Элемент.Disable() опять же в методе onClick кнопки-вкладки, но ничего не происходит, элемент как реагировал на клик кнопки так и реагирует хотя и невидим. Как програмно его выключить по нажатию на одной вкладке и потом програмно включить по нажатию на другой вкладке?
Попробуйте удалять объекты, а не скрывать.
Здравствуйте!
У меня такой вопрос - я хотел бы создать на торговой панели несколько вкладок т.е. по нажатии одной кнопки появляется один набор элементов, по нажатии другой кнопки другой набор элементов. Чтобы скрыть элементы из одной вкладки я применил свойство 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() тут в справке показывается, сделали?