в случае необходимости ещё раз создать объект, случайно удалённый или изменённый
пользователем. Имена объектов в функции start() (блоки 4-5-6) формируются так же, как и
в других местах программы.
В блоке 6-7 определяется первая координата исследуемого объекта. Если при этом объект
не найден, то он создаётся с помощью Create(). А если объект существует, то
определяются другие его координаты и вычисляется, соответствуют ли его свойства
характеристикам бара (блок 7-8). При обнаружении любого несоответствия объект
удаляется и создаётся вновь (с тем же именем), но уже с правильными свойствами.
При исполнении функции deinit() решается ещё одна задача: из всей совокупности
объектов, имеющихся в окне финансового инструмента, необходимо удалить только те,
которые созданы экспертом. Это делается в два этапа: на первом этапе в массив
Name_Del[] запоминаются имена всех объектов, которые необходимо удалить, а затем, в
отдельном цикле, все эти объекты удаляются. Общее количество всех объектов в окне (в
том числе, созданных программой и установленных пользователем вручную) вычисляется
с помощью функции ObjectsTotal():
int Quant_Objects=ObjectsTotal(); // Cтолько всего ВСЕХ объектов
Количество раскрашиваемых баров устанавливается пользователем во внешней
переменной, т.е. заранее неизвестно, сколько графических объектов придётся удалять.
Поэтому строковый массив, несущий имена удаляемых объектов, объявляется с
количеством элементов равным 1, а затем размер массива программно изменяется -
количество его элементов увеличивается до общего количества объектов.
ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
Для того, чтобы отобрать объекты, созданные экспертом, в функции deinit() имеется цикл
for, в котором производится анализ имени каждого объекта.
string Obj_Name = ObjectName(k); // Запрашиваем имя объекта
Признаком, отличающим "наши" объекты от всех других, является префикс "Paint_", с
которого начинается имя каждого созданного программой объекта. Для анализа названия
объекта необходимо извлечь из строковой переменной, являющейся уникальным именем
объекта, начальную часть (в данном случае 6 символов), а затем сравнить полученное
значение со значением переменной Prefix. Если обнаружится совпадение, то исследуемый
объект подлежит удалению, если же нет, то объект удалять не нужно.
805