Errores, fallos, preguntas - página 2701

 
Slava:
¿Cuáles son las coordenadas aproximadas del primer rectángulo y del segundo? ¿Son iguales?
El primer rectángulo es el sustrato. Es sólo el fondo. Está en toda la pantalla.
El segundo rectángulo es la columna. Está en el primer rectángulo.
Trataré de mostrarte todo mañana.
 
Slava:

No está jugando.

No has dado ningún paso para reproducir

¿Qué has hecho?

DE ACUERDO. Una vez más.

1. Crear un objeto gráfico, por ejemplo, un rectángulo. Créalo a mano;

2. cambiar mediante programación su propiedad OBJPROP_ZORDER a 1;

3. Consigue las tonterías que he descrito.

El código para cambiar la propiedad pulsando una tecla tiene el siguiente aspecto.

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
El nombre del objeto _nombre se conserva al seleccionar (hacer clic) el objeto en el gráfico.
 
Alexey Kozitsyn:

¿Qué has hecho?

DE ACUERDO. Una vez más.

1. Crear un objeto gráfico, por ejemplo, un rectángulo. Créalo a mano;

2. cambiar mediante programación su propiedad OBJPROP_ZORDER a 1;

3. Consigue las tonterías que he descrito.

El código de cambio de la propiedad pulsando la tecla tiene el siguiente aspecto.

El nombre del objeto _nombre se conserva al seleccionar (hacer clic) el objeto en el gráfico.

He creado un objeto gráfico de línea horizontal a mano.

Cambio de orden z mediante programación desde el script

Veo que aparece el tooltip.


He creado manualmente un rectángulo (un rectángulo vinculado a los precios y no OBJ_RECTANGLE_LABEL)

He cambiado el orden z de un script similar.

Veo que aparece el tooltip


Así que hay algo que no has dicho

 
Slava:

Crear un objeto gráfico de línea horizontal a mano.

Cambiado el orden z del script

Veo que aparece el tooltip.


He creado manualmente un objeto gráfico rectángulo (un rectángulo vinculado a los precios - tiempos, no OBJ_RECTANGLE_LABEL)

He cambiado el orden z de un script similar.

Veo que aparece el tooltip.


Así que hay algo que no has dicho.

Vale, vuelve a comprobarlo.

En la compilación 2361, ¿lo has comprobado?

Se ha actualizado.

Comprobado de nuevo. Todavía hay un problema.

Inténtelo así: tome mi indicador, cree un rectángulo (que es OBJ_RECTANGLE) en TF M1. Haz clic en él con el ratón y luego pulsa z varias veces. Verás en el registro que el zorder se ha convertido en -1, 0, 1. A continuación, haga clic en el gráfico más allá de este rectángulo. A continuación, intente ver su información sobre la herramienta, resáltela.

Probablemente sea cuestión de configurar el objeto zorder = -1. Antes pensaba que el problema era el valor de 1. Disculpas.

Archivos adjuntos:
 
Alexey Kozitsyn:

Revisado. El problema sigue siendo.

Inténtalo de esta manera:

Ahora las líneas de montaña se crean resaltadas por defecto (no hay opción de anular la selección con un clic del ratón) + no hay resaltados en ningún gráfico... Algo está roto. Ya no hay ningún indicador en el gráfico.

 
Alexey Kozitsyn:

Bien, volveré a comprobarlo.

¿Has comprobado la compilación 2361?

Actualizado.

Lo he comprobado dos veces. El problema sigue siendo.

Inténtelo de esta manera: tome mi indicador, cree un rectángulo (que es OBJ_RECTANGLE) en TF M1. Haz clic en él con el ratón y luego pulsa z varias veces. Verás en el registro que el zorder se ha convertido en -1, 0, 1. A continuación, haga clic en el gráfico más allá de este rectángulo. A continuación, intente ver su información sobre la herramienta, resáltela.

Probablemente sea cuestión de poner el objeto zorder = -1. Antes pensaba que el problema estaba en el valor de 1.

Parece ser el problema con ChartRedraw(). Mejor aún reproducirlo cuando se engancha el rectángulo a trabajar y se pulsa alternativamente el botón izquierdo y la tecla z sobre él. De este modo, este objeto se convierte en "muerto". Si luego creas otro rectángulo, no pasa nada.

 
Slava:

¿Qué hago cuando no puedo deseleccionar las líneas del gráfico con el LKM? Se interpone en el camino...

 
Alexey Kozitsyn:

Parece que se trata de ChartRedraw(). Funciona aún mejor cuando enganchas un rectángulo para trabajar y pulsas alternativamente el botón izquierdo y la tecla z sobre él. De este modo, este objeto se convierte en "muerto". Si luego creas otro rectángulo, no pasa nada.

Aquí está mi experto, en el que he comprobado de nuevo

//+------------------------------------------------------------------+
//|                                                   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);
     }
  }
//+------------------------------------------------------------------+

Todo es normal, los tooltips se muestran de acuerdo con el zorder

 
Alexey Kozitsyn:

¿Qué hago cuando no puedo deseleccionar las líneas del gráfico con el LKM? Interfiere con...

¿Qué quieres decir con que no puedes?

¡Dame los detalles!

 
Slava:

¿Cómo que no puedes?

¡Dame los detalles!

Pato... aquí... experimentando con el indicador del post anterior. Y... algo se rompió. Es así que ahora cuando se crea una línea de montaña, ésta queda seleccionada, y esta selección no se puede eliminar haciendo doble clic con el ratón sobre la línea. No me puedo callar: la selección no se puede eliminar. En cualquier gráfico, incluso en uno vacío.