Но событие CHARTEVENT_CHART_CHANGE так же срабатывает, когда просто переключаешься на соседний график, и этот момент берутся размеры окна уже с того графика, на который переключился.
Скорее всего у вас в коде ошибка. OnChartEvent это события текущего чарта, а не какого-то другого.
Потеря фокуса тоже является событием графика. Я не проверял, но при необходимости в первую очередь проверил-бы именно это
if(!ChartGetInteger(ChartID(), CHART_BRING_TO_TOP))
Расскажите что сработало?
Интересно ведь.
пробовал переключать чарты и в МТ5 и в МТ4 - размеры чарта не изменяются
при переключении на другой чарт, происходит событие CHARTEVENT_CHART_CHANGE.
при возвращение на чарт, происходит два события CHARTEVENT_CHART_CHANGE.
int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { return(rates_total); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if (id ==CHARTEVENT_CHART_CHANGE) { Print("new CHARTEVENT_CHART_CHANGE"); } }
при переключении на другой чарт, происходит событие CHARTEVENT_CHART_CHANGE.
при возвращение на чарт, происходит два события CHARTEVENT_CHART_CHANGE.
как это изменяет размер чарта?
Пишу небольшую панель для некоторых операций. Благодаря событию CHARTEVENT_CHART_CHANGE отлавливаю момент, когда изменяется размер окна графика, и корректирую координаты панели, чтобы она была в зоне видимости (не вылазила за пределы окна графика).
вангую что человек вернется назад с этим вопросом когда оживут котировки, а его панели не будут обновляться правильно в разных окнах :)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Nikolai Semko, 2021.12.26 11:17
Что удалось выяснить:
- при переключении окон ресурс не удаляется
- при переключении окон происходит событие CHARTEVENT_CHART_CHANGE, так как меняется размер окна на размер окна предыдущих установок размера "не на все окно", т.е. словно окно перешло в такой режим:
- целесообразно контролировать активность окна (ChartGetInteger(0, CHART_BRING_TO_TOP)) и выключать формирование битмапа (заполнять канвас) для экономии ресурсов работы процессора в случае неактивности окна
В тестовом индикаторе счетчик сохраняется в ресурсе канваса.
так это же очевидная Ваша ошибка - использование одного и того же ресурса на многих чартах во многих индикаторах.
ваши индикаторы (или ЕА) не работают если окно не активно - то есть пользователь не сможет использовать несколько копий одновременно на разных чартах.
пс. ну и следовательно - у автора темы не будут работать панели, благодаря вашему совету :)
Потеря фокуса тоже является событием графика. Я не проверял, но при необходимости в первую очередь проверил-бы именно это
Сюрприз может крыться в ChartID() vs 0 vs <заранее сохранённый id> в аргументе. При переключении чартов в момент "последнего прости", в последнем OnChartEvent могут быть нюансы :-)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток.
Пишу небольшую панель для некоторых операций. Благодаря событию CHARTEVENT_CHART_CHANGE отлавливаю момент, когда изменяется размер окна графика, и корректирую координаты панели, чтобы она была в зоне видимости (не вылазила за пределы окна графика). Но событие CHARTEVENT_CHART_CHANGE так же срабатывает, когда просто переключаешься на соседний график, и этот момент берутся размеры окна уже с того графика, на который переключился. Как следствие - у панели меняются координаты, хотя этого не должно происходить.
Вопрос: как разделить событие CHARTEVENT_CHART_CHANGE на:
1) ту часть, когда действительно меняются свойства текущего графика (размеры и т.д.)
2) ту часть, когда переключаешься на соседний график
Т.е. как кодом отделить одно от другого?