错误、漏洞、问题 - 页 1063

 
MetaDriver:
尝试ObjSetInteger(id, Name, OBJPROP_BACK, false)。
试过了。形式确实向后倒,但它是以最丑陋的方式倒下的,即它甚至倒在了铁栏杆后面。而且任务有些不同,我只需要在表格中显示文本,而表格本身是在图形和其他表格之上的。
 
C-4:
试过了。形式确实向后倒,但它是以最丑陋的方式倒下的,即它甚至倒在了铁栏杆后面。而任务有些不同,我只需要在表格中显示文本,表格本身在图形和其他表格的上面。

对象是按照创建的顺序显示的,如果你想改变顺序,你应该保存对象的数据,并按照正确的顺序重新创建它们。

或者说,这个错误甚至在这里面吗?

 
C-4:
试过了。形式确实向后倒,但它是以最丑陋的方式倒下的,即它甚至倒在了铁栏杆后面。而任务有些不同,你只需要将文本显示在表格中,表格本身在图形和其他表格之上。
你只需要考虑图形对象的创建顺序。应该在下面的应该先创建。
 
tol64:
你只需要考虑到图形对象的创建顺序。那些应该在下面的,应该先创建。

是的,这是我想到的第一件事。改变了顺序--结果一样。但没有奇迹。但现在我拿了一个正在工作的项目,试着把OBJ_EDIT 放在那里,效果很好,也就是说,它在表单上面是可见的。因此,总的来说,它看起来像地狱。我显然忘记了或没有考虑到一些问题。但我还是想把它整理出来,以便下次不犯同样的错误。 下面是测试的OnInit()的代码。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   ObjectCreate(0, "cell", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSetInteger(0, "cell", OBJPROP_XDISTANCE, 15);
   ObjectSetInteger(0, "cell", OBJPROP_YDISTANCE, 60);
   ObjectSetInteger(0, "cell", OBJPROP_BGCOLOR, clrWhite);
   ObjectSetInteger(0, "cell", OBJPROP_BORDER_TYPE, BORDER_FLAT);
   ObjectSetInteger(0, "cell", OBJPROP_BORDER_COLOR, clrBlack);
   ObjectSetInteger(0, "cell", OBJPROP_BACK, false);
   //ObjectSetInteger(0, "cell", OBJPROP_SELECTED, false);
   
   ObjectCreate(0, "edittext", OBJ_EDIT, 0, 30, 30);
   ObjectSetInteger(0, "edittext", OBJPROP_XDISTANCE, 40);
   ObjectSetInteger(0, "edittext", OBJPROP_YDISTANCE, 50);
   ObjectSetInteger(0, "edittext", OBJPROP_BGCOLOR, clrNONE);
   ObjectSetInteger(0, "edittext", OBJPROP_BORDER_COLOR, clrNONE);
   //ObjectSetInteger(0, "edittext", OBJPROP_WIDTH, 3);
   ObjectSetString(0, "edittext", OBJPROP_TEXT, "edit text");
   ObjectSetInteger(0, "edittext", OBJPROP_BACK, false);
   
   
   EventSetTimer(1);
//---
   return(INIT_SUCCEEDED);
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
C-4:

是的,这是我想到的第一件事。改变了顺序--结果一样。但没有奇迹。但现在我拿了一个正在工作的项目,试着把OBJ_EDIT 放在那里,效果很好,也就是说,它在表格上面是可见的。因此,总的来说,它看起来像地狱。我显然忘记了或没有考虑到一些问题。但我还是想把它做出来,这样我下次就不会犯这个错误了。 下面是测试的OnInit()的代码。

在这种情况下,我们需要一个对象处理程序,这样就可以把创建的内容和顺序记在一个地方,那么,当一个函数创建这个第二个这个时,就不会有重叠,而函数调用的改变会改变顺序。

很难捕捉到这种错误,甚至很难预见到它。

 
MQ的信息。在OnTimer的手册中,有"...通过EventSetTimer() 接收..."。你还应该加上"...或EventSetMillisecondTimer()..."。
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

大家好!

在帮助中,有这样一段话

Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь

所以,如果在事件队列中有一个ChartEvent,它不应该被第二次排队。我有一个问题:)

我画了一个专家顾问来检查它。结果发现,无论队列中是否有ChartEvent事件,ChartEvent 处理程序 ,只要我生成它,就会被调用多少次。

这很好,但在我看来,我需要纠正帮助......或者我错了吗?

input int N= 50; //количество событий в очереди

void OnInit()
  {
   EventSetTimer(5);
  }

void OnDeinit(const int reason)
  {
   EventKillTimer();    
  }

void OnTimer()
  {
  for (ushort i=0; i<N; i++) EventChartCustom(0,1,i,0,(string)0);
  }


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if (id>CHARTEVENT_CUSTOM) Print ("Обработано событие номер: ", lparam);
  }
 
MigVRN:

大家好!

在帮助中,有这样一段话

所以,如果在事件队列中有一个ChartEvent,它不应该被第二次排队。我有一个问题:)

我画了一个专家顾问来检查它。结果发现,无论队列中是否有ChartEvent事件,ChartEvent 处理程序 ,只要我生成它,就会被调用多少次。

这很好,但我认为我们需要纠正帮助......或者我错了吗?

这只适用于队列溢出的情况,如果队列已满,那么已经在队列中的事件类型就不会被放置。

如果队列没有满(队列长度猜测为1024),所有事件都将被处理。

 
Urain:

这只适用于队列已满的情况,如果队列已满,事件类型已在队列中的将不会被排队。

但如果队列没有溢出(而且队列长度我认为是1024),那么所有的事件都会被处理。

明白了。谢谢你 :)

PS:上述专家顾问未能排到1000个以上的队伍。

 
paladin800:
MQ的信息。在OnTimer的手册中,有"...通过EventSetTimer() 接收..."。你还应该加上"...或EventSetMillisecondTimer()..."。
然后每个人都会设置毫秒计时器,即使他们不需要它......