Fehler, Irrtümer, Fragen - Seite 2701

 
Slava:
Wie lauten die ungefähren Koordinaten des ersten und des zweiten Rechtecks? Sind sie identisch?
Das erste Rechteck ist der Untergrund. Das ist nur der Hintergrund. Es ist überall auf dem Bildschirm zu sehen.
Das zweite Rechteck ist die Spalte. Sie befindet sich auf dem ersten Rechteck.
Ich werde versuchen, Ihnen morgen alles zu zeigen.
 
Slava:

Es wird nicht gespielt.

Sie haben keine Schritte zur Reproduktion angegeben

Was haben Sie getan?

GUT. Ein weiteres Mal.

1. Erstellen Sie ein grafisches Objekt, z. B. ein Rechteck. Erstellen Sie es von Hand;

2. programmatisch die Eigenschaft OBJPROP_ZORDER auf 1 ändern;

3. Holen Sie sich den Unsinn, den ich beschrieben habe.

Der Code zum Ändern der Eigenschaft durch Drücken einer Taste sieht wie folgt aus.

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
Der Name des Objekts _name bleibt erhalten, wenn Sie das Objekt im Diagramm auswählen (anklicken).
 
Alexey Kozitsyn:

Was haben Sie getan?

GUT. Ein weiteres Mal.

1. Erstellen Sie ein grafisches Objekt, z. B. ein Rechteck. Erstellen Sie es von Hand;

2. programmatisch die Eigenschaft OBJPROP_ZORDER auf 1 ändern;

3. Holen Sie sich den Unsinn, den ich beschrieben habe.

Der Code zum Ändern der Eigenschaft durch Drücken der Taste sieht wie folgt aus.

Der Objektname _name bleibt erhalten, wenn Sie das Objekt im Diagramm auswählen (anklicken).

Ich habe ein grafisches Objekt mit einer horizontalen Linie von Hand erstellt.

Die z-Reihenfolge wurde vom Skript aus programmatisch geändert.

Ich sehe, dass der Tooltip erscheint.


Ich habe manuell ein Rechteck erstellt (ein mit Preisen verknüpftes Rechteck und nicht OBJ_RECTANGLE_LABEL)

Ich habe z-order aus einem ähnlichen Skript geändert.

Ich sehe, dass der Tooltip erscheint


Es gibt also etwas, das Sie nicht gesagt haben

 
Slava:

Ein grafisches Objekt mit einer horizontalen Linie von Hand erstellt.

Ändern der Z-Reihenfolge aus dem Skript

Ich sehe, dass der Tooltip erscheint.


Ich habe manuell ein grafisches Rechteck-Objekt erstellt (ein Rechteck, das mit Preisen verknüpft ist - mal, nicht OBJ_RECTANGLE_LABEL)

Ich habe z-order aus einem ähnlichen Skript geändert.

Ich sehe, dass der Tooltip erscheint.


Es gibt also etwas, das Sie nicht gesagt haben.

Okay, überprüfen Sie es noch einmal.

Haben Sie dies bei Build 2361 überprüft?

Sie wurde aktualisiert.

Erneut geprüft. Es gibt immer noch ein Problem.

Versuchen Sie es so: Nehmen Sie meinen Indikator, erstellen Sie ein Rechteck (das OBJ_RECTANGLE ist) auf TF M1. Klicken Sie mit der Maus darauf und drücken Sie dann mehrmals die Taste z. Im Protokoll sehen Sie, dass die Z-Reihenfolge -1, 0, 1 geworden ist. Klicken Sie dann auf das Diagramm hinter diesem Rechteck. Versuchen Sie dann, den Tooltip zu sehen, markieren Sie ihn.

Wahrscheinlich muss man das Objekt zorder = -1 setzen. Vorher dachte ich, das Problem sei der Wert von 1. Entschuldigung.

Dateien:
 
Alexey Kozitsyn:

Erneut geprüft. Das Problem bleibt bestehen.

Versuchen Sie es auf diese Weise:

Jetzt werden Gebirgslinien standardmäßig hervorgehoben erstellt (keine Möglichkeit, die Auswahl per Mausklick aufzuheben) + keine Hervorhebung von Tooltips in jedem Diagramm... Etwas ist kaputt. Es gibt keinen Indikator mehr auf dem Chart.

 
Alexey Kozitsyn:

OK, ich überprüfe das noch einmal.

Haben Sie den Build 2361 überprüft?

Aktualisiert.

Doppelt geprüft. Das Problem bleibt bestehen.

Versuchen Sie es so: Nehmen Sie meinen Indikator, erstellen Sie ein Rechteck (das OBJ_RECTANGLE ist) auf TF M1. Klicken Sie mit der Maus darauf und drücken Sie dann mehrmals die Taste z. Im Protokoll sehen Sie, dass die Z-Reihenfolge -1, 0, 1 geworden ist. Klicken Sie dann auf das Diagramm hinter diesem Rechteck. Versuchen Sie dann, den Tooltip zu sehen, markieren Sie ihn.

Wahrscheinlich muss man das Objekt zorder = -1 setzen. Vorher dachte ich, das Problem läge beim Wert 1.

Dies scheint das Problem mit ChartRedraw() zu sein. Noch besser ist es, wenn Sie ein Rechteck mit einem Haken versehen und abwechselnd die linke Taste und die Z-Taste drücken, um es zu bearbeiten. Auf diese Weise wird dieses Objekt "tot". Wenn Sie später ein weiteres Rechteck erstellen, ist das kein Problem.

 
Slava:

Was kann ich tun, wenn ich die Diagrammlinien mit dem LKM nicht abwählen kann? Er ist im Weg...

 
Alexey Kozitsyn:

Es scheint um ChartRedraw() zu gehen. Es spielt sich noch besser, wenn man ein Rechteck einhängt und darauf abwechselnd die linke Taste und die z-Taste drückt. Auf diese Weise wird dieses Objekt "tot". Wenn Sie später ein weiteres Rechteck erstellen, ist das kein Problem.

Hier ist mein Experte, den ich noch einmal überprüft habe

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

Alles ist normal, die Tooltips werden gemäß zorder angezeigt

 
Alexey Kozitsyn:

Was kann ich tun, wenn ich die Diagrammlinien mit dem LKM nicht abwählen kann? Es stört die...

Was soll das heißen, Sie können das nicht?

Geben Sie mir die Details!

 
Slava:

Was soll das heißen, Sie können das nicht?

Geben Sie mir die Details!

Ente... hier... Ich experimentiere mit dem Indikator aus dem vorherigen Beitrag. Und... etwas ging kaputt. Wenn Sie nun eine Gebirgslinie erstellen, wird diese ausgewählt, und diese Auswahl kann nicht durch einen Doppelklick mit der Maus auf die Linie entfernt werden. Ich kann die Klappe nicht halten - die Auswahl kann nicht aufgehoben werden. Auf jedem Diagramm, auch auf einem leeren.