Подскажите как будет правильно сделать?

 
Добрый день, буду краток,в ИНДИКАТОРе не знаю как будет правильно сделать:

void infу(string name)
  { 
   if(ObjectFind(Chart_ID,"kolonka1")!=0)
RectLabelCreate(0,"zo",false,poix+334,poiy+29,283,248,White,false,false,1,false);  // вывод RectLabel(прямоугольник)
LabelCreate(0,"text10",0,poix+320,poiy+142,CORNER_RIGHT_UPPER,"Текст пример","Arial",8,Black,0.0,ANCHOR_LEFT_UPPER,false,false,true,1); // вывод Label(текст)
  } 
далее хочу чтобы это выводилось при нажатии на кнопку, поэтому запихал это в:  OnChartEvent
таким образом:
      if(ObjectFind(Chart_ID,"Menu")==0)
         if(GetState("Menu"))
           {
            infу(""); 
           }
         else
           {
            ObjectsDeleteAll(0,"infу");
           }
     

НО ТУТ ПРОБЛЕМА:

в колонке ЭКСПЕРТЫ пишется ошибка 4200, она означает что уже создана текстовая метка

Иными словами, как мне запихать создание в OnInit, чтобы не было ошибки 4200, при условии что вызов будет работать правильно

 
ares96:
Добрый день, буду краток,в ИНДИКАТОРе не знаю как будет правильно сделать:

далее хочу чтобы это выводилось при нажатии на кнопку, поэтому запихал это в:  OnChartEvent
таким образом:

НО ТУТ ПРОБЛЕМА:

в колонке ЭКСПЕРТЫ пишется ошибка 4200, она означает что уже создана текстовая метка

Иными словами, как мне запихать создание в OnInit, чтобы не было ошибки 4200, при условии что вызов будет работать правильно

А вас не смущает, что имена объектов в каждой строке кода разные?

 
Alexey Viktorov:

А вас не смущает, что имена объектов в каждой строке кода разные?

так и должно быть, могли бы вы объяснить как перенести:

void infу(string name)
  {
..... 
  }

в OnInit при условии чтобы был вызов в OnChartEvent

Пожалуйста помогите

 
ares96:

так и должно быть, могли бы вы объяснить как перенести:

в OnInit при условии чтобы был вызов в OnChartEvent

Пожалуйста помогите

Я думаю вам сначала не мешало-бы разобраться в теории.

Ошибки 4200 что-то я не нахожу. Видимо номер ошибки 4202. Так вот чтобы обойти эту ошибку надо произвести поиск объекта с таким именем который надо создать. И в случае если такового не будет найдено можно его создать.

Функция ObjectFind() возвращает номер окна в котором найден объект или -1 если не найден. То-есть, если найден в первом окне, то ваше условие

if(ObjectFind(Chart_ID,"kolonka1")!=0)
будет выполнено.

В общем по теории последовательность и логика такая.

  1. Пытаемся найти объект с определённым именем.
  2. Если не найден
  3. Создаём нужный объект.
  4. Если найден, пропускаем пункт 3
  5. Назначаем ему определённые свойства.

То что вы подготовили не укладывается в голове и советовать что-либо невозможно. Во всём этом коде нет никакой логики.

Такое впечатление, вы написали что попало в надежде, что исправляя вам напишут готовый вариант. Но это не ко мне.

Документация по MQL5: Графические объекты / ObjectFind
Документация по MQL5: Графические объекты / ObjectFind
  • www.mql5.com
В случае удачи функция возвращает номер подокна (0 означает главное окно графика), в котором находится найденный объект. Если объект не найден, то функция возвращает отрицательное число. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция использует синхронный вызов – это означает, что функция...
 
Alexey Viktorov:

Я думаю вам сначала не мешало-бы разобраться в теории.

Ошибки 4200 что-то я не нахожу. Видимо номер ошибки 4202. Так вот чтобы обойти эту ошибку надо произвести поиск объекта с таким именем который надо создать. И в случае если такового не будет найдено можно его создать.

Функция ObjectFind() возвращает номер окна в котором найден объект или -1 если не найден. То-есть, если найден в первом окне, то ваше условие

будет выполнено.

В общем по теории последовательность и логика такая.

  1. Пытаемся найти объект с определённым именем.
  2. Если не найден
  3. Создаём нужный объект.
  4. Если найден, пропускаем пункт 3
  5. Назначаем ему определённые свойства.

То что вы подготовили не укладывается в голове и советовать что-либо невозможно. Во всём этом коде нет никакой логики.

Такое впечатление, вы написали что попало в надежде, что исправляя вам напишут готовый вариант. Но это не ко мне.

Спасибо что расписали мне всё, вопрос такой можно ли чтобы алгоритм был такой как у меня, или же создание объектов нужно чтобы строго было в OnInit ???

 
ares96:

Спасибо что расписали мне всё, вопрос такой можно ли чтобы алгоритм был такой как у меня, или же создание объектов нужно чтобы строго было в OnInit ???

Создавать можно что угодно когда угодно. Но перед созданием ВСЕГДА желательно проверять наличие имени в существующих объектах. Даже если вам надо создать текстовую метку с именем "АВС" но на графике уже есть вертикальная линия с именем "АВС" то это будет уже ошибка. MQL не делит имена по типам объектов.
 
Alexey Viktorov:
Создавать можно что угодно когда угодно. Но перед созданием ВСЕГДА желательно проверять наличие имени в существующих объектах. Даже если вам надо создать текстовую метку с именем "АВС" но на графике уже есть вертикальная линия с именем "АВС" то это будет уже ошибка. MQL не делит имена по типам объектов.

Спасибо большое что помогаете, но видели те в чем дело, у меня она метка только тут создаётся с таким имнем, а вылазит ошибка потому что при нажатии на какую либо кнопку на графике(кнопку всмысле button) у меня как бы заного пытается создать её)

 
ares96:

Спасибо большое что помогаете, но видели те в чем дело, у меня она метка только тут создаётся с таким имнем, а вылазит ошибка потому что при нажатии на какую либо кнопку на графике(кнопку всмысле button) у меня как бы заного пытается создать её)

Пока нет кода обращаться можно только к экстрасенсам. К счастью я только учусь и могу предположить, что в обработке нажатия кнопки есть создание какого-то объекта с таким именем. Но по неопытности в экстрасенсе могу и ошибиться.

 
ares96:

Спасибо большое что помогаете, но видели те в чем дело, у меня она метка только тут создаётся с таким имнем, а вылазит ошибка потому что при нажатии на какую либо кнопку на графике(кнопку всмысле button) у меня как бы заного пытается создать её)

Везде перед созданием делайте проверку: if(ObjectFind(0,name...)==-1)ObjectCreate(0,name...);

 
понял, спасибо большое вам всем)
Причина обращения: