Ausgießen des Objekts

 

Grüße, liebe Programmierer!

"Für MT4-Terminal.

Ich würde gerne ein paar Tipps von Ihnen bekommen. Ich bin auf die folgende Nuance gestoßen...

1. ich erstelle ein Rechteckobjekt - es funktioniert:

2. ich stelle die Eigenschaften ein:

- Stil - es hat funktioniert;

- Linienbreite - funktioniert;

- Farbe - funktioniert;

- füllen - will nicht zuhören;

Ich habe herumprobiert und herausgefunden, dass das Rechteckobjekt standardmäßig mit der Option "Objekt als Hintergrund zeichnen" erstellt wird. Solange dieses Kontrollkästchen aktiviert ist, reagiert das Rechteck nicht auf Befehle des Programms. Wenn Sie dieses Kontrollkästchen manuell aus den Eigenschaften des Objekts entfernen, kann das Programm die Füllung steuern.

Die Frage ist, warum das Objekt nicht sofort auf die Eigenschaft "Füllen" gesetzt wird? Was mache ich falsch und was weiß ich nicht?

Bitte helfen Sie, wer kann!

Nachstehend finden Sie den verwendeten Code:

#property indicator_chart_window

int start()
{
long current_chart_id=ChartID();
//
string obj_name1="Rectangle1";
//
double Price_Level_1 = 1296; // Goldpreis
double Preis_Stufe_2 = 1293;
//
datetime Left_Side_1 = Time[9];
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7;
//
const Farbe clr = clrBeige;
const ENUM_LINE_STYLE style = STYLE_DASH;
const int Breite = 1;
const bool fill = false;
//
ObjectCreate (current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_COLOR, clr);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_STYLE, style);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false); // nicht sofort gesetzt

zurück(0);

 

Versuchen Sie

//+------------------------------------------------------------------+
void Prn_Rect_Label(string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
      ObjectDelete(0,Name);
      ObjectCreate(0,Name,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,Name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,Name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,Name,OBJPROP_BGCOLOR,CLR);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetInteger(0,Name,OBJPROP_BACK,back);
      return;
   }
 
Was ist der Trick? Warum reagiert das Objekt nicht auf die Füllung ohne zusätzliche Manipulation?
 
Renat Akhtyamov:

Versuchen Sie

Sie müssen sie nicht löschen, sondern nur prüfen, ob sie noch existiert. Wenn es sie nicht gibt, dann erstellen Sie sie. Und dann legen Sie die Parameter fest.
 
Warum also hört der Füllstoff nicht zu?
 
Artyom Trishkin:
Sie müssen sie nicht löschen, sondern nur überprüfen, ob sie existiert. Wenn es sie nicht gibt, dann erstellen Sie sie. Und dann Parameter einstellen.

Einverstanden

zuerst finden.

Wenn das Objekt jedoch bei jedem Tick gelöscht und mit demselben Namen neu erstellt wird, ist die Suche nach einem bekannten Objekt unnötig
 
5211845:
Warum also hört die Füllung nicht zu?

und wenn ja (falsch --> wahr):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, true); // не задается сразу
 

Es funktioniert nicht. Ich habe bereits die folgende Funktion ausprobiert

ObjectSet (obj_name1, OBJPROP_FILL, true | false);

 
Muss dieser Code überhaupt funktionieren? Vielleicht ist es eine Störung in meinem Terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845:
Im Allgemeinen sollte dieser Code funktionieren? Vielleicht ist es eine Störung in meinem Terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

Ja, natürlich.

Vergleichen Sie diesen Code mit Ihrem eigenen Code im Detail und platzieren Sie ihn in OnTimer(), da es keine Ausgabe-Ticks gibt, oder führen Sie ihn vorübergehend in OnInit() aus:

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

Ich habe mich bei meinem Code an diesem Beispiel orientiert. Ich kann nur nicht herausfinden, was der Unterschied ist. Nur, dass es ein Fenster für Eingabeparameter gibt.

Was ist, wenn ich dieses Fenster nicht benötige, sondern nur ein Objekt mit den gewünschten Parametern erstellen möchte? Ist dies möglich?