Erreurs, bugs, questions - page 2701

 
Slava:

Il ne joue pas.

Vous n'avez pas donné d'étapes à reproduire.

Qu'avez-vous fait ?

OK. Encore une fois.

1. Créez un objet graphique, par exemple un rectangle. Créez-la à la main ;

2. modifiez par programme sa propriété OBJPROP_ZORDER en 1 ;

3. Obtenez le non-sens que j'ai décrit.

Le code pour changer la propriété en appuyant sur une touche ressemble à ceci.

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
Le nom de l'objet _name est conservé en sélectionnant (en cliquant sur) l'objet dans le graphique.
 
Alexey Kozitsyn:

Qu'avez-vous fait ?

OK. Encore une fois.

1. Créez un objet graphique, par exemple un rectangle. Créez-la à la main ;

2. modifiez par programme sa propriété OBJPROP_ZORDER en 1 ;

3. Obtenez le non-sens que j'ai décrit.

Le code permettant de changer la propriété en appuyant sur la touche ressemble à ceci.

Le nom de l'objet _nom est conservé en sélectionnant (en cliquant sur) l'objet dans le graphique.

J'ai créé un objet graphique de type ligne horizontale à la main.

Changement de l'ordre z depuis le script de façon programmatique.

Je constate que l'infobulle apparaît.


J'ai créé manuellement un rectangle (un rectangle lié aux prix et non à OBJ_RECTANGLE_LABEL)

J'ai modifié l'ordre z à partir d'un script similaire.

Je vois que l'infobulle apparaît


Il y a donc quelque chose que vous n'avez pas dit

 
Slava:

Création manuelle d'un objet graphique de type ligne horizontale.

Changement de l'ordre z du script

Je constate que l'infobulle apparaît.


J'ai créé manuellement un objet graphique rectangle (un rectangle lié aux prix - temps, pas OBJ_RECTANGLE_LABEL)

J'ai modifié l'ordre z à partir d'un script similaire.

Je constate que l'infobulle apparaît.


Donc il y a quelque chose que tu n'as pas dit.

Ok, vérifie encore une fois.

Sur le build 2361, l'avez-vous vérifié ?

Il a été mis à jour.

Vérifié à nouveau. Il y a encore un problème.

Essayez comme ceci : prenez mon indicateur, créez un rectangle (qui est OBJ_RECTANGLE) sur TF M1. Cliquez dessus avec votre souris, puis appuyez sur z plusieurs fois. Vous verrez dans le journal que le zorder est devenu -1, 0, 1. Puis cliquez sur le graphique au-delà de ce rectangle. Essayez ensuite de voir son infobulle, mettez-la en surbrillance.

Il s'agit probablement de définir l'objet zorder = -1. Avant cela, je pensais que le problème était la valeur de 1. Excuses.

Dossiers :
 
Alexey Kozitsyn:

Revérifié. Le problème reste entier.

Essayez de cette façon :

Maintenant les lignes de montagne sont créées en surbrillance par défaut (pas d'option de désélection par clic de souris) + pas de surbrillance des infobulles sur aucun graphique... Quelque chose est cassé. Il n'y a plus d'indicateur sur le graphique.

 
Alexey Kozitsyn:

OK, je vais revérifier.

Avez-vous vérifié la version 2361 ?

Mis à jour.

J'ai vérifié deux fois. Le problème reste entier.

Essayez comme ceci : prenez mon indicateur, créez un rectangle (qui est OBJ_RECTANGLE) sur TF M1. Cliquez dessus avec votre souris, puis appuyez sur z plusieurs fois. Vous verrez dans le journal que le zorder est devenu -1, 0, 1. Puis cliquez sur le graphique au-delà de ce rectangle. Essayez ensuite de voir son infobulle, mettez-la en surbrillance.

Il s'agit probablement de définir l'objet zorder = -1. Avant cela, je pensais que le problème venait de la valeur de 1.

Il semble que ce soit le problème avec ChartRedraw(). Encore mieux, reproduisez-le lorsque vous accrochez le rectangle au travail et que vous appuyez alternativement sur le bouton gauche et la touche z sur celui-ci. De cette façon, cet objet devient "mort". Si vous créez un autre rectangle plus tard, c'est parfait.

 
Slava:

Que faire lorsque je ne peux pas désélectionner les lignes du graphique avec le LKM ? Ca se met en travers du chemin...

 
Alexey Kozitsyn:

Il semble qu'il s'agisse de ChartRedraw(). Il est encore meilleur lorsque vous accrochez un rectangle à travailler et que vous appuyez alternativement sur le bouton gauche et la touche z sur celui-ci. De cette façon, cet objet devient "mort". Si vous créez un autre rectangle plus tard, c'est parfait.

Voici mon expert, sur lequel j'ai encore vérifié

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

Tout est normal, les info-bulles s'affichent selon le zorder.

 
Alexey Kozitsyn:

Que faire lorsque je ne peux pas désélectionner les lignes du graphique avec le LKM ? Il interfère avec...

Comment ça, tu ne peux pas ?

Donnez-moi les détails !

 
Slava:

Comment ça, tu ne peux pas ?

Donnez-moi les détails !

Canard... ici... J'expérimente l'indicateur du post précédent. Et... quelque chose s'est cassé. C'est ainsi que maintenant, lorsque vous créez une ligne de montagne, elle est sélectionnée, et cette sélection ne peut pas être supprimée en double-cliquant sur la ligne avec la souris. Je ne peux pas me taire - la sélection ne peut pas être supprimée. Sur n'importe quel graphe, même un graphe vide.

 
Slava:

Voici mon Conseiller Expert, sur lequel j'ai vérifié à nouveau

Tout est normal, les info-bulles s'affichent selon le zorder.

Essayez mon indicateur. Il semble que le but soit de fixer le zorder à -1 + après ChartRedraw(). Et en même temps, changer rapidement de zorder + sélectionner/réinitialiser la visibilité des objets.