Очередной идеодизм, от МТ... Причем не просто, а опять нахрен ни кем не обнаруженный, вернее скажем так я не нашел, вопроса об этом на форуме...
Итак...
Предположим вы хотите перчислисть все обьекты на графике... Ну там линии, прямоугольники... и пр. ОК, это просто
Берем "обьект тотал", и в цикле шуршим от нуля до этого количества... ) Перечесляем и получаем имя обьекта по его индексу... Радости полные штаны, все работает как часы... Но...
НО! ) Допустим вам надо не просто их перечислить и там свойства какие-то посмотреть, ну и скажем еще и потереть некоторые из них... Отлично, скажете вы... - в чем проблема-то, есть же функция "обьект делит" ... Все просто перечесляем, получаем имя по индексы и трем обьект по имени. НО! Опять но... ) При стирании индекс-то уедет... Да, ха-ха проблема... ) Ну какая опять скажете вы нахрен проблема, так просто иди по индексу сзади... Ну типа чтобы после стирания сьезжали индексы только те что мы уже просмотрели... ОТЛИЧНО.... Суперское решение... ) Кретенизм конечно, так НЕ ДЕЛАЕТСЯ в правильных языках... Делается примерно так - Запрашиваем тотал, да и не плохо было бы и еще с вилдкардом, или регекспом, но не суть... Допустим, мы хотим сделать, как положенно! с точки зрения языков программирования, а не удобства... ОК, значит продолжим - итак - запрашиваем тотал, обьявляем начало транзакции, трем обьекты, обьявляем конец транзакции, или отмену... Все... После коммита, все обьекты помеченные для удаления удаляются... Если комита не было, а был дискадр, то просто метки удаляются... Точнее уже не важно, что там делается... А важно, что отмена... означает ничего не делать...
Ну дык, опять я тут мета-квотеров учу... Учитель нашелся... Ага... ) Обьясняю.... !!! Да, вроде, все рабоает с удалением... Бля... А вот с добавление нахрен, вооще... Счас матом ругаться начну... ОКАЗЫВАЕТСЯ что перечесление обьектов по индексу, идет не по их порядку рождения... А по А-Л-Ф-А-В-И-Т-У... То есть, если мы добавляем обьект, начинающийся на букву которая идет раньше чем некоторый обьект который уже есть в этом иннумераторе... Ну в этом списке... То он будет добавлен с этот список раньше чем уже существующий обьект... Ну тоесть вы запросли тотал, стали перчислять обьеты, и добавлять новые по мере надобности... И ваш список весь уехал... Те обьеты которые вы еще не просмотрели могут оказаться в конце, за тем номером который вы прошли...
Нда... То есть даже и не знаю, уверен, что столько народу на этом форуме перебирая обьекты об этой фиче ) мета-терминала и догадывалась... И думала, что это за глюки при работе с обьектами...
//+------------------------------------------------------------------+ //| идеотизм.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { int i; for( i=0;i<10;i++) ObjectCreate("O"+i,OBJ_HLINE,0,0,Ask+i*Point ); Print("===================1===================="); int t=ObjectsTotal(); Print("T:",t); for( i=t-1;i>=0;i--) Print("#",i,"n:",ObjectName(i)); Print("===================2====================="); Print("===================2.0====================="); for( i=0;i<3;i++) ObjectCreate("AO"+i,OBJ_HLINE,0,0,Ask+i*Point ); t=ObjectsTotal(); Print("T:",t); for( i=t-1;i>=0;i--) Print("#",i,"n:",ObjectName(i)); for( i=0;i<3;i++) ObjectCreate("ZO"+i,OBJ_HLINE,0,0,Ask+i*Point ); t=ObjectsTotal(); Print("T:",t); for( i=t-1;i>=0;i--) Print("#",i,"n:",ObjectName(i)); return(0); } //+------------------------------------------------------------------+