Domande da un "manichino" - pagina 32

 
tol64:
Passo queste proprietà dell'oggetto esplicitamente (ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER):

Credo di aver capito. Hai mostrato una funzione di esempio, non un pezzo di codice funzionante?

Questo è tutto, mi prendo il fine settimana libero. Scusa per l'interruzione :)

 

Una versione migliore di questa funzione, ma qualcosa può essere modificato (in generale, implementerei tutto questo come un oggetto, o più oggetti).

Anche se potete mettere la funzione in una libreria e usarla come volete.

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:

Una versione migliore di questa funzione, ma qualcosa può essere modificato (in generale, implementerei tutto questo come un oggetto, o più oggetti).

Anche se potete mettere la funzione in una libreria e usarla come volete.



È bello)) E sotto forma di oggetto, qual è il vantaggio, se prendete questa funzione come esempio? Finora, ho implementato tutto sotto forma di funzioni. Forse sto sbagliando strada e dovrò rifare tutto più tardi?
 
tol64:
(Che bello.)). Qual è il vantaggio di usare questa funzione come oggetto? Per ora ho implementato tutto sotto forma di funzioni. Forse ho seguito la strada sbagliata e dovrò rifare tutto più tardi?

Beh, perché tutti. Una funzione potrebbe essere resa più universale e impacchettata, per esempio, in una biblioteca.

Anche le classi hanno dei vantaggi, ma questo è un trucco legato all'OOP (il compito principale sarà quello di utilizzare il codice in vari progetti senza pensare all'implementazione).

Esempio

Come vedo dallo screenshot, hai qualcosa come un pannello informativo (forse qualche altra funzionalità), quindi puoi considerare questo pannello come una serie di oggetti non correlati (grafica, testo, ecc.), o puoi vederli come oggetti collegati da una classe. Così, se cambiate un parametro "input" "Corner", questo cambiamento avrà effetto su tutto ciò che riguarda il pannello.

È lo stesso con il legame al grafico: specificando un grafico alla classe, indichiamo questo grafico anche a tutti gli oggetti controllati dalla classe.

 
Interesting:

Beh, perché tutti. Una funzione potrebbe essere resa più universale e impacchettata, per esempio, in una biblioteca.

Anche le classi hanno dei vantaggi, ma questi sono trucchi di OOP (il compito principale sarà quello di utilizzare il codice in vari progetti senza pensare all'implementazione).

Esempio

Come vedo dallo screenshot, hai qualcosa come un pannello informativo (forse qualche altra funzionalità), quindi puoi considerare questo pannello come una serie di oggetti non correlati (grafica, testo, ecc.), o puoi vederli come oggetti collegati da una classe. Così, se cambiate un parametro "input" "Corner", questo cambiamento influenzerà tutto ciò che si riferisce al pannello.

Ho lo stesso problema con il binding al grafico: una volta che indichiamo un grafico alla classe, indichiamo questo grafico e tutti gli oggetti che questa classe controlla.

Lei ha un'abilità davvero notevole. Spiega tutto molto chiaramente in un paio di righe. Grazie. ))

Dopo aver preso confidenza con tutte le funzioni di cui ho bisogno e aver fatto pratica nell'usarle, inizierò a studiare le strutture, le classi e l'OOP. È un peccato che la natura mi costringa a volte ad andare a letto. Devo strisciare lontano dal computer. ))

 

Ho scritto questa sceneggiatura:

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();
      }
  }

Compito: rimuovere tutti gli oggetti di tipo OBJ_LABEL dal grafico. Ma alcuni sono saltati e rimangono. Un errore viene scritto nel diario di bordo:

Per favore, ditemi come farlo correttamente.

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

Ho scritto una tale sceneggiatura:

Il compito: cancellare tutti gli oggetti di tipo OBJ_LABEL da un grafico. Ma alcuni sono saltati e rimangono. Un errore viene scritto nel log:

Per favore, consigliatemi come farlo correttamente.

Mi sembra che il ciclo dovrebbe essere discendente piuttosto che ascendente, anche se non sono entrato nei dettagli (ma da MQL4 la cancellazione degli ordini è stata fatta in un ciclo discendente).

Il trucco è che se iniziate a cancellare da grandi indici, allora la lista originale non cambierà, tranne che per la cancellazione dell'elemento selezionato (dalla coda della lista)...

 
Interesting:

Mi sembra che il ciclo dovrebbe essere discendente piuttosto che ascendente, anche se non sono entrato nei dettagli (da MQL4, gli ordini vengono cancellati in un ciclo discendente).

Il trucco è che se iniziamo a cancellare da un indice grande, allora la lista originale non cambierà, tranne che per cancellare un elemento selezionato (dalla coda della lista)...

Ho cercato di iniziare il ciclo dalla fine:

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

Ora non ci sono errori nel log, ma non un singolo oggetto viene cancellato).

 
tol64:

Ho provato a iniziare il ciclo dalla fine:

Ora non ci sono errori nel registro, ma nemmeno oggetti cancellati).

i>=0
 
tol64:

In quadrupletta, uso questo approccio: tutti gli oggetti sono gruppi, la parte del nome è comune al gruppo.

Cancellazione di

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

per diversi gruppi

// удаление по маске всех объектов индюка
   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);
      }
   }

e qui la funzione IgorM

***

(per sicurezza) Ordinamento per ObjectName(non sono sicuro che sia rilevante per 5)

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