![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Зайдем с такой стороны: создадим панель в эксперте, и создадим панель в индикаторе. Код абсолютно аналогичный в обоих случаях.
Есть у кого-то мысли по поводу происходящего? Почему в индикаторе все ок, а в эксперте нет? Может быть, у кого-то тоже воспроизводится такая проблема? Попробовал уже несколько терминалов, везде одинаково.
Этот косяк ну очень сильно мешает в процессе работы над панелью, она постоянно виснет и съезжает после перекомпиляции, а еще и сам график символа удаляет иногда.
файлы в аттаче.
Проблема в MQL4 есть. Я открою заявку в сервисдеске.
Добавлено: заявка #1423384.
Проблема в MQL4 есть. Я открою заявку в сервисдеске.
Добавлено: заявка #1423384.
Есть способ решить эту проблему.
В методе Create инициализируете ее
И в конструкторе и деструкторе
В самом эксперте или индикаторе в функции OnInit()
В функции OnDeinit()
В результате при изменении параметров, смене временного периода графика и смене счета панель не создается заново.
....
Для сведения. Если вам надо изменить какой то метод класса или дополнить функционал класса, но класс написан не вами и может быть изменен кем то другим (к примеру классы позволяющие создавать панели с кнопками) то создавайте наследник от этого класса, а не редактируйте сам базовый класс. Тогда при очередном обновлении терминала изменения в базовом классе не затрут ваши изменения. Ваш класс просто унаследует все изменения базового класса. Это одно из преимуществ ООП.
В результате при изменении параметров, смене временного периода графика и смене счета панель не создается заново.
....
Для сведения. Если вам надо изменить какой то метод класса или дополнить функционал класса, но класс написан не вами и может быть изменен кем то другим (к примеру классы позволяющие создавать панели с кнопками) то создавайте наследник от этого класса, а не редактируйте сам базовый класс. Тогда при очередном обновлении терминала изменения в базовом классе не затрут ваши изменения. Ваш класс просто унаследует все изменения базового класса. Это одно из преимуществ ООП.
Спасибо! Для начала мне надо более подробно познакомиться с ооп, т.к. я не профессиональный прогер и пишу ботов для себя. И начал программирвать с языка mql :) Не совсем понял куда что вставлять и какой смысл, но думаю разберусь после более подробного ознакомления с ооп ) Основы знаю, но с классами плотно еще не работал
Не за что. Кстати стал проверять как это работает и обнаружил, что деструктор класса вызывается только при удалении эксперта содержащего панель, с графика.
В других случаях деструктор не вызывается. Поэтому присваивание isCreate=false в деструкторе не выполняется.
Не за что. Кстати стал проверять как это работает и обнаружил, что деструктор класса вызывается только при удалении эксперта содержащего панель, с графика.
В других случаях деструктор не вызывается. Поэтому присваивание isCreate=false в деструкторе не выполняется.
Супер, все получилось :) Немного прошарился в ооп даже.
Вы не подскажете, как можно менять цвет фона этой панели?
Супер, все получилось :) Немного прошарился в ооп даже.
Вы не подскажете, как можно менять цвет фона этой панели?
Цвет фона устанавливается в классе CDialog в методе CreateBackground(void). Вам надо переопределить этот метод. И написать свою реализацию этого метода, где уже устанавливаете свой цвет фона.
Цвет фона устанавливается в классе CDialog в методе CreateBackground(void). Вам надо переопределить этот метод. И написать свою реализацию этого метода, где уже устанавливаете свой цвет фона.
изменяет только цвет рамки почему-то, или есть что-то еще поверх бэкграунда
изменяет только цвет рамки почему-то
Посмотрите еще метод bool CDialog::CreateClientArea(void) там создается клиентская область и тоже устанавливается ее цвет. Получается, что там два объекта CPanel накладываются друг на друга.
.....
Сейчас экспериментировал. Там надо еще и метод Add() будет переопределить.