Новая версия платформы MetaTrader 5 build 1870: Добавление символов в Обзор рынка по ISIN - страница 12
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да, для случая с одним объектом можно сделать что-то такое:
А Comment просто принудительно делает ChartRedraw, поэтому с ним все работает.
fxsaber:
CCanvas C; // необходимо, чтобы в файле Canvas.mqh массив m_pixels был public
Поэтому и написал, что баг.
Бажочек. Маленький такой , т.к. в справке на ObjectDelete на этом сделан акцент:
"При вызове ObjectDelete() всегда используется асинхронный вызов, поэтому функция возвращает только результат постановки команды в очередь графика. В этом случае true означает только то, что команда успешно поставлена в очередь, сам результат её выполнения неизвестен."
Удаление то всегда происходит, но иногда просто не сразу, но со сменой ТФ всегда сразу.
Да, для случая с одним объектом можно сделать что-то такое:
А Comment просто принудительно делает ChartRedraw, поэтому с ним все работает.
Это понятно. Об этом я и писал: "(ChartRedraw или Comment - не важно, т.к. Comment тоже выполняет ChartRedraw)"
Но работает и с ChartXYToTimePrice (просто функция очень медленная, поэтому и привел ее в качестве примера), а она то уж вряд ли перерисовывает график.
Ну какой-же баг? Вы хотите чтобы в ObjectDelete принудительно сунули ChartRedraw? А "завтра" найдётся такой умник который станет замерять скорость выполнения ObjectDelete нескольких объектов в цикле и после каждого объекта будет ChartRedraw, ну и какая скорость будет при этом?
ChartRedraw перерисовывает чарт. Он не занимается удалением объекта (не остатков его отображения). Изначально же велась речь о том, что не что-то там отображается, а что объект полноценно существует. Код приведен для воспроизведения.
ChartRedraw перерисовывает чарт. Он не занимается удалением объекта (не остатков его отображения). Изначально же велась речь о том, что не что-то там отображается, а что объект полноценно существует. Код приведен для воспроизведения.
Не упорствуйте.
Представьте, что это не ОбжектДелит(), а ПриготовитьОбъектКУдалениюПриСледующейПерерисовке().
А Делит можете написать сами.
Не упорствуйте.
Представьте, что это не ОбжектДелит(), а ПриготовитьОбъектКУдалениюПриСледующейПерерисовке().
А Делит можете написать сами.
Бажочек. Маленький такой , т.к. в справке на ObjectDelete на этом сделан акцент:
"При вызове ObjectDelete() всегда используется асинхронный вызов, поэтому функция возвращает только результат постановки команды в очередь графика. В этом случае true означает только то, что команда успешно поставлена в очередь, сам результат её выполнения неизвестен."
Удаление то всегда происходит, но иногда просто не сразу, но со сменой ТФ всегда сразу.
Описание в справке абсолютно точное. Команда удаления лишь поставлена в очередь графика. И пока команда находится в очереди, пока она не выполнена, объект не является удаленным. ChartRedraw() принудительно инициирует процессинг команд в очереди чарта. Процессинг команд в очереди чарта может быть запущен и по многим другим причинам, но если вы хотите гарантировано запустить процессинг команд - используйте ChartRedraw(). И это не специфика команды ObjectDelete(), а абсолютно общее поведение для всех асинхронных команд работы с графиком. Такой подход позволяет использовать пакетную обработку команд, он описан в справке и изначально заложен в архитектуру терминала МТ5, т.е. не является новинкой.
И пока команда находится в очереди, пока она не выполнена, объект не является удаленным.
Находится в очереди часами.
Находится в очереди часами.
Сколько угодно долго. Если процессинг очереди не запущен, то команда продолжает оставаться в очереди. Магии тут нет.
Если вы используете в своей программе асинхронные команды работы с чартом, то для их фактического исполнения вы обязаны явно инициировать процессинг очереди команд чарта. Отсутствие такого кода в вашем примере является вашей ошибкой, а не багом терминала.
Я еще раз напоминаю, что такое поведение асинхронных команд работы с чартом описано в справке и изначально заложено в архитектуру терминала МТ5.
Сколько угодно долго. Если процессинг очереди не запущен, то команда продолжает оставаться в очереди. Магии тут нет.
Если вы используете в своей программе асинхронные команды работы с чартом, то для их фактического исполнения вы обязаны явно инициировать процессинг очереди команд чарта. Отсутствие такого кода в вашем примере является вашей ошибкой, а не багом терминала.
Я еще раз напоминаю, что такое поведение асинхронных команд работы с чартом описано в справке и изначально заложено в архитектуру терминала МТ5.
Логика понятна, спасибо. К сожалению, по Справке без этих пояснений не разобраться.