в чем подвох, подскажите...
for(int b = ObjectsTotal()-1; b >= 0; b--)
в чем подвох, подскажите...
for(int b = ObjectsTotal()-1; b >= 0; b--)
Да, и если бы вместо
ObjectDelete(ObjectName(b));
использовалось
if (!ObjectDelete(ObjectName(b))) Print("Не удалось удалить объект "+ ObjectName(b)+". Код ошибки = "+GetLastError());то ошибку удалось бы найти быстрее.
в чем подвох, подскажите...
for(int b = ObjectsTotal()-1; b >= 0; b--)
Да, и если бы вместо
ObjectDelete(ObjectName(b));
использовалось
if (!ObjectDelete(ObjectName(b))) Print("Не удалось удалить объект "+ ObjectName(b)+". Код ошибки = "+GetLastError());то ошибку удалось бы найти быстрее.
Глюк с удалением объектов действительно есть. И проблема в том, что отловить его не получается - ошибки никакой не выдается.
Скорее всего, это получается при достаточно большом первоначальном количестве объектов (порядка 100 и более).
Пока борюсь с этим тупо прогоняя процедуру удаления 10 раз подряд (причем цифра не с потолка взята - при меньшем количестве прогонов удаления - объекты остаются).
lotos4u писал (а):
Пока борюсь с этим тупо прогоняя процедуру удаления 10 раз подряд (причем цифра не с потолка взята - при меньшем количестве прогонов удаления - объекты остаются).
А может все-таки перевернуть цикл?
Некий скрипт рисует на графике кучу прямоугольников
в какой то момент, когда их нужно удалить выполняется следующий кусок
for(int b = 0; b < ObjectsTotal(); b++) { if(ObjectType(ObjectName(b)) == OBJ_RECTANGLE) { ObjectDelete(ObjectName(b)); } } WindowRedraw();
Вроде по логике должно удалиться все за раз, но вопреки ожиданиям удаляется лишь часть объектов, причем если запустить еще раз, удаляется еще часть. В итоге для того чтобы очистить график полностью, надо прогнать раз 10.
в чем подвох, подскажите...
Тут явная ошибка в коде:
Вы запускаете цикл от 0 до ObjectsTotal(), но в самом цикле этот ObjectsTotal() меняется, потому как за каждый проход цикла удаляется один объект. Поэтому следует написать так:
int objects_amount = ObjectsTotal(); for(int b = 0; b < objects_amount; b++) { if(ObjectType(ObjectName(b)) == OBJ_RECTANGLE) { ObjectDelete(ObjectName(b)); } } WindowRedraw();
угу и тогда не надо переворачивать цикл...
- но по мне проще перевернуть - код короче и компактней
Greeen - переверните цикл и все!
lotos4u - не выдается ошибка ? а приведите кусочек кода в котором вы не видите ошибку - хотя полагаете что явно ее обрабатываете
возможно у вас там не совсем корректно что то
угу и тогда не надо переворачивать цикл...
Нужно. Либо тогда совсем так:
int objects_amount = ObjectsTotal(); for ( int b = 0; b < objects_amount; b ++ ) { if(ObjectType(ObjectName(b)) == OBJ_RECTANGLE) { ObjectDelete(ObjectName(b)); b --; } } WindowRedraw();
Greeen - переверните цикл и все!
lotos4u - не выдается ошибка ? а приведите кусочек кода в котором вы не видите ошибку - хотя полагаете что явно ее обрабатываете
возможно у вас там не совсем корректно что то
Больше спасибо все уже заработало. Я тоже проглядел, что в условии стояло ObjectsTotal() и цикл был прямой.
Нужно. Либо тогда совсем так:
int objects_amount = ObjectsTotal(); for ( int b = 0; b < objects_amount; b ++ ) { if(ObjectType(ObjectName(b)) == OBJ_RECTANGLE) { ObjectDelete(ObjectName(b)); b --; } } WindowRedraw();
А вот это замечательно.
Я никогда так не делал. Поставить b-- в цикле по b, где условием b++ и количество объектов уменьшается на каждой итерации - это красиво.
Я бы сказал, тонко.
Люблю всё красивое:)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Некий скрипт рисует на графике кучу прямоугольников
в какой то момент, когда их нужно удалить выполняется следующий кусок
Вроде по логике должно удалиться все за раз, но вопреки ожиданиям удаляется лишь часть объектов, причем если запустить еще раз, удаляется еще часть. В итоге для того чтобы очистить график полностью, надо прогнать раз 10.
в чем подвох, подскажите...