Здравствуйте.
Существуют ли основания/гарантии того, что следующие предположения верны:
Существует эксперт, который содержит обработчик OnChartEvent. Из другого скрипта сначала отправляем пользовательское событие через EventChartCustom, а потом удаляем графический объект с графика, что приводит к отправке обработчику CHARTEVENT_OBJECT_DELETE. Обработчик получит события в том порядке, который наблюдает скрипт (сначала пользовательское, а потом CHARTEVENT_OBJECT_DELETE).
К этой статье прилагается в конце индикатор с именем: test_types_of_chart_events. Описание о нём в пп.3.1.2. статьи. На основе его работы можно понаблюдать порядок получения событий.
Запустите его на график и упоминаемые вами программы.
P./S.: Для событий, не перечисленных явно в его коде и не запрещённых во внешних параметрах(и внутри кода) к обработке, вывод информации предусмотрен через default в его блоке switch(id)
{
...
//---
default: nameChartEvent="UNKNOWN"; break;
}
//---
StringConcatenate(text,LINE_NUMBER,nameChartEvent,": id = ",
IntegerToString(id),", lparam: ",lparam,
", dparam: ",dparam,", sparam: ",sparam);
Print(text);
Не стоило бы уповать на этот порядок. Искать другой способ решения задачи.
1. Графические объекты объединены в группы, удаление одного элемента группы приводит к удалению и остальных элементов той же самой группы (структура имени: №группы-№подгруппы-индекс_элемента).
2. Удаление объектов отлавливает обработчик OnChartEvent, видя удаление эл-та группы, он удаляет всю группу (если ручками удаляем один элемент, то под снос идёт вся группа-подгруппа).
3. В то же время удаление может производиться программно из эксперта. Например, мы хотим перерисовать сложную фигуру из трендовых линий. Для этого мы должны удалить целиком старую группу, и следующим шагом нарисовать новую фигуру (с теми же номерами группы и подгруппы). Да, можно инкрементировать подгруппу, но оставить прежний номер видится более правильным.
4. Очевидно, что удаление из эксперта и удаление в обработчике будут мешать друг другу, поэтому подумал о такой схеме: шлём обработчику событий графика сообщение-запрет на игнорирование удаления какой-то группы-подгруппы (Говорим-не трогай группу 1-1, удалять будет эксперт), удаляем группу из эксперта, шлём сообщение отменяющее предыдущий запрет, отрисовываем фигуру из эксперта под старым именем.
Запутанно описал, наверное.
1. Скрипт, который шлёт пользовательское событие графику через EventChartCustom() ("событие 1"), потом удаляет графический объект с графика (это генерирует CHARTEVENT_OBJECT_DELETE "собыие 2"), шлёт пользовательское событие через EventChartCustom() ("событие 3").
2. Эксперт, который содержит обработчик OnChartEvent().
Выходные закончились, надеюсь получить ответ от сотрудников МК. Господа, допустим имеем:
1. Скрипт, который шлёт пользовательское событие графику через EventChartCustom() ("событие 1"), потом удаляет графический объект с графика (это генерирует CHARTEVENT_OBJECT_DELETE "собыие 2"), шлёт пользовательское событие через EventChartCustom() ("событие 3").
2. Эксперт, который содержит обработчик OnChartEvent().
Пропавшее сообщение? Просто супер )).
У одного графика может быть более одного обработчика OnChartEvent? Даже в одном эксперте? Терминал дёрнит их обоих при поступлении любого сообщения?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Существуют ли основания/гарантии того, что следующие предположения верны:
Существует эксперт, который содержит обработчик OnChartEvent. Из другого скрипта сначала отправляем пользовательское событие через EventChartCustom, а потом удаляем графический объект с графика, что приводит к отправке обработчику CHARTEVENT_OBJECT_DELETE. Обработчик получит события в том порядке, который наблюдает скрипт (сначала пользовательское, а потом CHARTEVENT_OBJECT_DELETE).