Вопросы от "чайника" - страница 32

 
tol64:
Передаю эти свойства объектов явно ( ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER ):

Кажется, дошло. Вы образец функции показали, а не рабочий кусок кода?

Все, беру выходные. Извините, что отвлек :) 

 

Более совершенный вариант этой функции, но можно кое что подправить (а в общем я бы в виде объекта все это реализовал, или нескольких объектов).

Хотя, функцию можно в библиотеку поместить и юзать как угодно.

bool Create_BMP_Label(long   chart_id,  // id графика
                      string bmp_nm,    // имя объекта
                      string bmp_path,  // путь к обекту
                      long   anchor,    // точка привязки
                      long   corner,    // угол привязки
                      int    x_dist,    // координата по шкале X
                      int    y_dist)    // координата по шкале Y
{
//----------------------------------------------------------------------------//
//Work variables
bool Result = true; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError();

Result =  ObjectCreate(chart_id,bmp_nm,OBJ_BITMAP_LABEL,0,0,0); // создание объекта

  if(Result)
  {
  ObjectSetString(chart_id,bmp_nm,OBJPROP_BMPFILE,0,bmp_path);   // BMP файл
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_ANCHOR,anchor);       // установка точки привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_CORNER,corner);       // установка угола привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_XDISTANCE,x_dist);    // установка координаты X
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_YDISTANCE,y_dist);    // установка координаты Y
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_SELECTABLE,false);    // нельзя выделить объект, если FALSE
  ObjectSetString(chart_id,bmp_nm,OBJPROP_TOOLTIP,"\n");         // нет всплывающей подсказки, если "\n"
  }
//The execution errors checking
  if(GetLastError()!=0)
  {
  Result = false;
  }  
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 
Interesting:

Более совершенный вариант этой функции, но можно кое что подправить (а в общем я бы в виде объекта все это реализовал, или нескольких объектов).

Хотя, функцию можно в библиотеку поместить и юзать как угодно.



Красиво.)) А в виде объекта в чём преимущество, если на примере этой функции? Я пока что всё в виде функций реализовываю. Может по ошибочному пути иду и потом придётся всё переделывать?
 
tol64:
Красиво.)) А в виде объекта в чём преимущество, если на примере этой функции? Я пока что всё в виде функций реализовываю. Может по ошибочному пути иду и потом придётся всё переделывать?

Ну зачем же все. Функцию можно будет сделать более универсальной и упаковать скажем в библиотеку.

У классов тоже свои преимущества, но это уже хитрости относящиеся к ООП (основной задачей будет при этом использовать код в различных проектах не задумываясь об реализации).

Пример

Как я вижу по скрину у Вас нечто вроде информационной панели (может еще какой функционал), так вот можно рассматривать эту панель как ряд несвязанных объектов (графических,текстовых и прочих), а можно в виде объектов связанных одним классом. Таким образом если поменяется один "входной" параметр "Сorner" то такое изменение коснется всего того что относится к панели.

Тоже само с привязкой к графику, один раз указав классу график мы указываем этот график и всем объектам которыми этот класс управляет.

 
Interesting:

Ну зачем же все. Функцию можно будет сделать более универсальной и упаковать скажем в библиотеку.

У классов тоже свои преимущества, но это уже хитрости относящиеся к ООП (основной задачей будет при этом использовать код в различных проектах не задумываясь об реализации).

Пример

Как я вижу по скрину у Вас нечто вроде информационной панели (может еще какой функционал), так вот можно рассматривать эту панель как ряд несвязанных объектов (графических,текстовых и прочих), а можно в виде объектов связанных одним классом. Таким образом если поменяется один "входной" параметр "Сorner" то такое изменение коснется всего того что относится к панели.

Тоже само с привязкой к графику, один раз указав классу график мы указываем этот график и всем объектам которыми этот класс управляет.

У Вас есть очень замечательная способность. Объяснять всё предельно понятно уложившись при этом в пару строк. Спасибо. ))

После того, как ознакомлюсь со всеми нужными мне функциями и попрактикуюсь с ними, начну изучать структуры, классы и ООП. Жаль, что природа заставляет иногда ложиться спать. Приходится отползать от компьютера. ))

 

Написал такой скрипт:

bool del;

void OnStart()
  {
   long chart_id  = ChartID();
   int amount_obj = ObjectsTotal(chart_id,0,OBJ_LABEL);
   int i;
   
   Print("Всего объектов типа OBJ_LABEL: ",amount_obj);
   
   for(i=0; i<amount_obj; i++)
      {
       string name_obj = ObjectName(chart_id,i,0,OBJ_LABEL);
       del = ObjectDelete(chart_id,name_obj);
       
       if(del == false || GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError());
       
       ChartRedraw();
      }
  }

Задача: удалить все объекты типа OBJ_LABEL с графика. Но некоторые пропускаются и остаются. В журнале пишется ошибка:

 

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
tol64:

Написал такой скрипт:

Задача: удалить все объекты типа OBJ_LABEL с графика. Но некоторые пропускаются и остаются. В журнале пишется ошибка:

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

Мне так кажется, что цикл должен быть не нарастающим, а убывающим, хотя в подробности в подробности не вдавался (но еще со времен MQL4 удаление ордеров проводится в убывающем цикле).

Тут фишка в том что если начать удалять с больших индексов то первоначальный список не изменится, за исключением удаления выбранного элемента (с хвоста списка)...

 
Interesting:

Мне так кажется, что цикл должен быть не нарастающим, а убывающим, хотя в подробности в подробности не вдавался (но еще со времен MQL4 удаление ордеров проводится в убывающем цикле).

Тут фишка в том что если начать удалять с больших индексов то первоначальный список не изменится, за исключением удаления выбранного элемента (с хвоста списка)...

Попробовал с конца начинать цикл:

   for(i=amount_obj-1; i>=amount_obj; i--)

Теперь ошибок в журнале нет, но и не удаляется ни одного объекта.))

 
tol64:

Попробовал с конца начинать цикл:

Теперь ошибок в журнале нет, но и не удаляется ни одного объекта.))

i>=0
 
tol64:

В четверке использую такой подход: все объекты - группы, часть имени - общая в группе.

Удаление

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
    {
      string name = ObjectName(i);
      if (StringFind(name, "sig_nal") == 0)
      {
         ObjectDelete(name);
      }
    }

для разных групп

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
   {
      string name = ObjectName(i);
      if (StringFind(name, "signal") == 0)
      {
         ObjectDelete(name);
      }
      else if (StringFind(name, "Asignal") == 0)
      {
         ObjectDelete(name);
      }
   }

и тут функция IgorM

*** 

( на всякий ) Сортировка по ObjectName (не разбирался, актуально ли для 5ки)

[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум
  • www.mql5.com
[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум