Errori, bug, domande - pagina 2701

 
Slava:
Quali sono le coordinate approssimative del primo rettangolo e del secondo rettangolo? Sono la stessa cosa?
Il primo rettangolo è il substrato. È solo lo sfondo. È su tutto lo schermo.
Il secondo rettangolo è la colonna. È sul primo rettangolo.
Cercherò di mostrarvi tutto domani.
 
Slava:

Non sta giocando.

Non hai dato nessun passo per riprodurre

Che cosa hai fatto?

OK. Un'altra volta.

1. Creare un oggetto grafico, per esempio un rettangolo. Crearlo a mano;

2. cambiare programmaticamente la sua proprietà OBJPROP_ZORDER in 1;

3. Prendete l'assurdità che ho descritto.

Il codice per cambiare la proprietà premendo un tasto assomiglia a questo.

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
Il nome dell'oggetto _name si conserva selezionando (cliccando) l'oggetto nel grafico.
 
Alexey Kozitsyn:

Che cosa hai fatto?

OK. Un'altra volta.

1. Creare un oggetto grafico, per esempio un rettangolo. Crearlo a mano;

2. cambiare programmaticamente la sua proprietà OBJPROP_ZORDER in 1;

3. Prendete l'assurdità che ho descritto.

Il codice per cambiare la proprietà premendo il tasto appare così.

Il nome dell'oggetto _name si conserva selezionando (cliccando) l'oggetto nel grafico.

Ho creato a mano un oggetto grafico a linea orizzontale.

Cambiato l'ordine z dallo script programmaticamente.

Vedo che il tooltip appare.


Ho creato manualmente un rettangolo (un rettangolo legato ai prezzi e non OBJ_RECTANGLE_LABEL)

Ho cambiato l'ordine z da uno script simile.

Vedo che il tooltip appare


Quindi c'è qualcosa che non hai detto

 
Slava:

Ha creato a mano un oggetto grafico a linee orizzontali.

Cambiato l'ordine z dallo script

Vedo che il tooltip appare.


Ho creato manualmente un oggetto grafico rettangolo (un rettangolo legato ai prezzi - tempi, non OBJ_RECTANGLE_LABEL)

Ho cambiato l'ordine z da uno script simile.

Vedo che il tooltip appare.


Quindi c'è qualcosa che non hai detto.

Ok, ricontrolla di nuovo.

Sulla build 2361 hai controllato?

È stato aggiornato.

Controllato di nuovo. Il problema rimane.

Provate così: prendete il mio indicatore, create un rettangolo (che è OBJ_RECTANGLE) su TF M1. Cliccate su di esso con il vostro mouse, poi premete z più volte. Vedrete nel log che lo zorder è diventato -1, 0, 1. Poi clicca sul grafico oltre questo rettangolo. Poi cerca di vedere il suo tooltip, evidenziandolo.

Probabilmente si tratta di impostare l'oggetto zorder = -1. Prima pensavo che il problema fosse il valore di 1. Scuse.

File:
 
Alexey Kozitsyn:

Ricontrollato. Il problema rimane.

Prova in questo modo:

Ora le linee di montagna sono create evidenziate di default (nessuna opzione per deselezionare con un clic del mouse) + nessuna evidenziazione dei tooltip su nessun grafico... C'è qualcosa di rotto. Non c'è più nessun indicatore sul grafico.

 
Alexey Kozitsyn:

Ok, ricontrollo di nuovo.

Avete controllato la build 2361?

Aggiornato.

Ricontrollato. Il problema rimane.

Provate così: prendete il mio indicatore, create un rettangolo (che è OBJ_RECTANGLE) su TF M1. Cliccate su di esso con il mouse, poi premete z più volte. Vedrete nel log che lo zorder è diventato -1, 0, 1. Poi clicca sul grafico oltre questo rettangolo. Poi cerca di vedere il suo tooltip, evidenziandolo.

Probabilmente si tratta di impostare l'oggetto zorder = -1. Prima pensavo che il problema fosse il valore di 1.

Sembra essere il problema con ChartRedraw(). Ancora meglio riprodurlo quando si aggancia il rettangolo al lavoro e si preme alternativamente il tasto sinistro e il tasto z su di esso. In questo modo, questo oggetto diventa "morto". Se si crea un altro rettangolo in seguito, va bene.

 
Slava:

Cosa faccio quando non posso deselezionare le linee del grafico con la LKM? Si mette in mezzo...

 
Alexey Kozitsyn:

Sembra riguardare ChartRedraw(). Suona ancora meglio quando si aggancia un rettangolo da lavorare e si preme alternativamente il tasto sinistro e il tasto z su di esso. In questo modo, questo oggetto diventa "morto". Se si crea un altro rettangolo in seguito, va bene.

Ecco il mio esperto, sul quale ho controllato di nuovo

//+------------------------------------------------------------------+
//|                                                   TestZOrder.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#define  OBJECT_NAME1 "RectangleLabel1"
#define  OBJECT_NAME2 "RectangleLabel2"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0,OBJECT_NAME1,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XSIZE,300);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YSIZE,200);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME1,OBJPROP_TOOLTIP,OBJECT_NAME1);
//---
   ObjectCreate(0,OBJECT_NAME2,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XDISTANCE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XSIZE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YSIZE,150);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME2,OBJPROP_TOOLTIP,OBJECT_NAME2);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,OBJECT_NAME1);
   ObjectDelete(0,OBJECT_NAME2);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      long zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s object clicked  lparam=%I64d  dparam=%.16g  zorder=%I64d",sparam,lparam,dparam,zorder);
      zorder=1-zorder;
      ObjectSetInteger(0,sparam,OBJPROP_ZORDER,zorder);
      zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s zorder set to %I64d",sparam,zorder);
     }
  }
//+------------------------------------------------------------------+

Tutto è normale, i tooltip sono visualizzati secondo lo zorder

 
Alexey Kozitsyn:

Cosa faccio quando non posso deselezionare le linee del grafico con la LKM? Interferisce con...

Cosa vuol dire che non puoi?

Dammi i dettagli!

 
Slava:

Cosa vuol dire che non puoi?

Dammi i dettagli!

Anatra... qui... sperimentando l'indicatore del post precedente. E... qualcosa si è rotto. È così che ora quando si crea una linea di montagna, questa è selezionata, e questa selezione non può essere rimossa facendo doppio clic sulla linea con il mouse. Non posso tacere - la selezione non può essere rimossa. Su qualsiasi grafico, anche vuoto.