来自一个 "傻瓜 "的问题 - 页 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:
(这很好。))。把这个函数作为一个对象的好处是什么?目前,我已经以函数的形式实现了所有的功能。也许我走错了路,以后还得重做一切?

嗯,为什么是所有的人。一个功能可以变得更加普遍,并打包到,比如说,一个库中。

类也有优势,但这是与OOP有关的技巧(主要任务是在各种项目中使用代码而不考虑实现)。

例子

正如我从截图中看到的,你有一个类似信息面板 的东西(也许还有其他功能),所以你可以把这个面板看作是一些不相关的对象(图形、文本等),或者你可以把它们看作是由一个类连接的对象。因此,如果你改变一个 "输入 "参数 "角落",这个改变将影响所有与面板有关的内容。

通过为类指定一个图表,我们也为该类控制的所有对象指明了这个图表,这与与图表的绑定是一样的。

 
Interesting:

嗯,为什么是所有的人。一个功能可以变得更加普遍,并打包到,比如说,一个库中。

类也有优点,但这些都是OOP的技巧(主要任务是在各种项目中使用代码而不考虑实现)。

例子

正如我从截图中看到的,你有一个类似信息面板的东西(也许还有其他功能),所以你可以把这个面板看作是一些不相关的对象(图形、文本等),或者你可以把它们看作是由一个类连接的对象。因此,如果你改变一个 "输入 "参数 "角落",这个改变将影响所有与面板有关的内容。

我在与图表的绑定方面也有同样的问题。 一旦我们向类表明了一个图表,我们就表明了这个图表和这个类所控制的所有对象。

你有一种非常了不起的能力。用几句话就能很清楚地解释一切。谢谢你。))

在我熟悉了所有我需要的函数并练习使用它们之后,我将开始研究结构、类和OOP。遗憾的是,大自然有时迫使我去睡觉。我必须从电脑前爬走。))

 

我已经写了这个剧本。

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

***

( 以防万一 )按对象名称排序(不确定是否与5有关)

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