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; }
Versuchen Sie
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ötigWarum 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);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);
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
- www.mql5.com
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?
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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);