Errori, bug, domande - pagina 1063

 
MetaDriver:
Prova ObjSetInteger(id, Name, OBJPROP_BACK, false);
Provato. La forma cade all'indietro, ma lo fa nel modo più brutto possibile, cioè cade addirittura dietro le sbarre. E il compito è un po' diverso, ho solo bisogno che il testo sia visualizzato nel modulo, mentre il modulo stesso era sopra la grafica e altri moduli.
 
C-4:
Provato. La forma cade all'indietro, ma lo fa nel modo più brutto possibile, cioè cade addirittura dietro le sbarre. E il compito è un po' diverso, ho solo bisogno che il testo sia visualizzato nel modulo, con il modulo stesso che si trova sopra la grafica e altri moduli.

Gli oggetti sono visualizzati nell'ordine in cui sono stati creati, se vuoi cambiare l'ordine, devi salvare i dati degli oggetti e ricrearli nell'ordine corretto.

O il bug è anche in questo?

 
C-4:
Provato. La forma cade all'indietro, ma lo fa nel modo più brutto possibile, cioè cade addirittura dietro le sbarre. E il compito è un po' diverso, avete solo bisogno che il testo sia visualizzato nel modulo, con il modulo stesso sopra la grafica e altri moduli.
Dovete solo considerare l 'ordine in cui vengono creati gli oggetti grafici. Quelli che dovrebbero essere sotto dovrebbero essere creati per primi.
 
tol64:
Dovete solo tenere conto dell'ordine in cui vengono creati gli oggetti grafici. Quelli che dovrebbero essere più bassi dovrebbero essere creati per primi.

Sì, è la prima cosa a cui ho pensato. Cambiato l'ordine - stesso risultato. Ma non ci sono miracoli. Ma ora ho preso un progetto funzionante e ho provato a mettere OBJ_EDIT lì e ha funzionato bene, cioè è visibile sopra il modulo. Quindi, tutto sommato, sembra un inferno. Ovviamente ho dimenticato o non ho preso in considerazione qualcosa. Ma volevo comunque risolverlo in modo da non fare lo stesso errore la prossima volta. Ecco il codice di OnInit() per il test:

//+------------------------------------------------------------------+
//| 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:

Sì, è la prima cosa a cui ho pensato. Cambiato l'ordine - stesso risultato. Ma non ci sono miracoli. Ma ora ho preso un progetto funzionante e ho provato a mettere OBJ_EDIT lì e ha funzionato bene, cioè è visibile sopra il modulo. Quindi, tutto sommato, sembra un inferno. Ovviamente ho dimenticato o non ho preso in considerazione qualcosa. Ma vorrei comunque fare in modo di non fare questo errore la prossima volta. Ecco il codice di OnInit() per il test:

In questo caso, abbiamo bisogno di un gestore di oggetti, in modo che il conto di ciò che viene creato e in quale ordine era in un posto, poi non ci sarà sovrapposizione quando una funzione crea questo secondo questo, e il cambiamento di chiamata di funzione cambierà l'ordine.

È difficile prendere questo tipo di bug e anche prevederlo.

 
Informazioni per MQ. Nel manuale per OnTimer c'è "... per ricevere da EventSetTimer()...". Dovresti anche aggiungere "... o EventSetMillisecondTimer()...".
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

Ciao a tutti!

C'è un paragrafo come questo nell'aiuto:

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

Quindi, se c'è un ChartEvent nella coda degli eventi, non dovrebbe essere accodato una seconda volta. Ho avuto un problema con esso :)

Ho disegnato un Expert Advisor per controllarlo. Si è scoperto che non importa se c'è un evento ChartEvent nella coda o meno, il gestore di ChartEvent viene chiamato tante volte quante ne genera.

Questo è fantastico, ma secondo me ho bisogno di correggere l'aiuto... O mi sbaglio?

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:

Ciao a tutti!

C'è un paragrafo come questo nell'aiuto:

Quindi, se c'è un ChartEvent nella coda degli eventi, non dovrebbe essere accodato una seconda volta. Ho avuto un problema con esso :)

Ho disegnato un Expert Advisor per controllarlo. Si è scoperto che non importa se c'è un evento ChartEvent nella coda o meno, il gestore di ChartEvent viene chiamato tante volte quante ne genera.

Questo è fantastico, ma penso che dobbiamo correggere l'aiuto... O mi sbaglio?

Questo si applica solo al caso di overflow della coda, se la coda è piena allora il tipo di evento che è già nella coda non viene messo.

Se la coda non è piena (e la lunghezza della coda è 1024), tutti gli eventi sono gestiti.

 
Urain:

Questo si applica solo se la coda è piena, se la coda è piena il tipo di evento è già nella coda non sarà accodato.

Ma se la coda non trabocca (e la lunghezza della coda credo sia 1024), allora tutti gli eventi sono gestiti.

Capito. Grazie :)

PS: L'Expert Advisor di cui sopra non è riuscito a mettere in coda più di 1000.

 
paladin800:
Informazioni per MQ. Nel manuale per OnTimer c'è "... per ricevere da EventSetTimer()...". Dovresti anche aggiungere "... o EventSetMillisecondTimer()...".
Allora tutti imposteranno il timer al millisecondo anche se non ne hanno bisogno...