OBJ_LABEL

Objekt "Text-Label."

ObjTextLabel

Hinweis

Die Position des Bezugspunktes relativ zum Zeichen kann aus der Enumeration ENUM_ANCHOR_POINT gewählt werden. Koordinaten des Bezugspunktes werden in Pixel angegeben.

Sie können den Winkel des Anbindepunktes des Labels durch Enumeration ENUM_BASE_CORNER wählen.

Beispiel

Das folgende Skript erstellt und bewegt auf dem Chart Objekt "Text-Label". Um die Eigenschaften eines grafischen Objekts zu erstellen und ändern, gibt es speziale Funktionen, die Sie "wie es ist" für Ihre eigenen Programme verwenden können.

 

//--- Beschreibung
#property description "Das Skript erstellt ein graphisches Objekt \"Text-Label\"."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string            InpName="Label";         // Name des Labels
input int               InpX=150;                // X Abstand
input int               InpY=150;                // Y Abstand
input string            InpFont="Arial";         // Schrift
input int               InpFontSize=14;          // Schriftgröße
input color             InpColor=clrRed;         // Farbe
input double            InpAngle=0.0;            // Der Winkel in Grad
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER// Bindungsmethode
input bool              InpBack=false;           // Objekt im Hintergrund
input bool              InpSelection=true;    // Wählen zu bewegen
input bool              InpHidden=true;       // Ausblenden in der Liste der Objekten
input long              InpZOrder=0;          // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt ein Text-Label                                          |
//+------------------------------------------------------------------+
bool LabelCreate(const long              chart_ID=0,               // ID des Charts
                 const string            name="Label",             // Name des Labels
                 const int               sub_window=0,             // Nummer des Unterfensters
                 const int               x=0,                      // X-Koordinate
                 const int               y=0,                      // Y-Koordinate
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER// Winkel des Charts zu Binden
                 const string            text="Label",             // Text
                 const string            font="Arial",             // Schrift
                 const int               font_size=10,             // Schriftgröße
                 const color             clr=clrRed,               // Farbe
                 const double            angle=0.0,                // Text Winkel
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER// Bindungsmethode
                 const bool              back=false,               // Im Hintergrund
                 const bool              selection=false,          // Wählen um zu bewegen
                 const bool              hidden=true,              // Ausgeblendet in der Objektliste
                 const long              z_order=0)                // Priorität auf Mausklick
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- ein Text-Label erstellen
   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": Text-Label konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- Die Koordinaten des Schilds setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- wählen die Ecke des Charts, relativ zu der die Punktkoordinaten eingegeben werden
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- den Text setzen
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- Textschrift setzen
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- Schriftgröße setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- Text-Winkel angeben
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- die Bindungsmethode setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- Farbe setzen
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Bewegt ein Text-Label                                            |
//+------------------------------------------------------------------+
bool LabelMove(const long   chart_ID=0,   // ID des Charts
               const string name="Label"// Name des Labels
               const int    x=0,          // X-Koordinate
               const int    y=0)          // Y-Koordinate
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- ein Text-Label bewegen
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
     {
      Print(__FUNCTION__,
            ": Kann nicht X-Koordinate des Labels bewegen! Fehlercode = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
     {
      Print(__FUNCTION__,
            ": Kann nicht Y-Koordinate des Labels bewegen! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Ändert Winkel des Charts das Label zu binden                     |
//+------------------------------------------------------------------+
bool LabelChangeCorner(const long             chart_ID=0,               // ID des Charts
                       const string           name="Label",             // Name des Labels
                       const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER// Winkel des Charts zu binden
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- Winkel der Bindung ändern
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
     {
      Print(__FUNCTION__,
            ": Kann den Winkel der Bindung nicht ändern! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
 ;}
//+------------------------------------------------------------------+
//| Ändert den Text des Objektes                                     |
//+------------------------------------------------------------------+
bool LabelTextChange(const long   chart_ID=0,   // ID des Charts
                     const string name="Label"// Objektname
                     const string text="Text")  // Text
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- ändern wir den Text des Objektes
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            ": Konnte nicht den Text ändern! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Löscht ein Text-Label                                            |
//+------------------------------------------------------------------+
bool LabelDelete(const long   chart_ID=0,   // ID des Charts
                 const string name="Label"// Name des Labels
  {
//--- Setzen den Wert des Fehlers zurück
   ResetLastError();
//--- das Schild löschen
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": Text-Label konnte nicht gelöscht werden! Fehlercode = ",GetLastError());
      return(false);
     }
//--- die erfolgreiche Umsetzung
   return(true);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- die Koordinaten des Labels in lokalen Variablen speichern
   int x=InpX;
   int y=InpY;
//--- Größe des Chartfensters
   long x_distance;
   long y_distance;
//--- Größe des Chartfensters definieren
   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
     {
      Print("Konnte nicht Breite des Charts bekommen! Fehlercode = ",GetLastError());
      return;
     }
   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
     {
      Print("Konnte nicht Höhe des Charts bekommen! Fehlercode = ",GetLastError());
      return;
     }
//--- Überprüfen die Richtigkeit der Eingabeparameter
   if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
     {
      Print("Fehler! Ungültige Eingabeparameter! ");
      return;
     }
//--- den ersten Text für das Label vorbereiten
   string text;
   StringConcatenate(text,"Linke obere Ecke: ",x,",",y);
//--- ein Text-Label auf dem Chart erstellen
   if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
      InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- Den Chart neu zeichnen und halbe Sekunden warten
   ChartRedraw();
   Sleep(500);
//--- bewegen das Label und ändern seinen Text
//--- Anzahl der Iterationen für Achsen
   int h_steps=(int)(x_distance/2-InpX);
   int v_steps=(int)(y_distance/2-InpY);
//--- Text-Label nach unten bewegen
   for(int i=0;i<v_steps;i++)
     {
      //--- Koordinate ändern
      y+=2;
      //--- bewegen das Label und ändern seinen Text
      MoveAndTextChange(x,y,"Linke obere Ecke: ");
     }
//--- Halb-Sekunden-Verzögerung
   Sleep(500);
//--- Text-Label nach rechts bewegen
   for(int i=0;i<h_steps;i++)
     {
      //--- Koordinate ändern
      x+=2;
      //--- bewegen das Label und ändern seinen Text
      MoveAndTextChange(x,y,"Linke obere Ecke: ");
     }
//--- Halb-Sekunden-Verzögerung
   Sleep(500);
//--- Text-Label nach oben bewegen
   for(int i=0;i<v_steps;i++)
     {
      //--- Koordinate ändern
      y-=2;
      //--- bewegen das Label und ändern seinen Text
      MoveAndTextChange(x,y,"Linke obere Ecke: ");
     }
//--- Halb-Sekunden-Verzögerung
   Sleep(500);
//--- Text-Label nach links bewegen
   for(int i=0;i<h_steps;i++)
     {
      //--- Koordinate ändern
      x-=2;
      //--- bewegen das Label und ändern seinen Text
      MoveAndTextChange(x,y,"Linke obere Ecke: ");
     }
//--- Halb-Sekunden-Verzögerung
   Sleep(500);
//--- nun bewegen wir den Punkt (Winkel der Bindung ändern)
//--- in den unteren linken Winkel bewegen
   if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
      return;
//--- ändern wir den Text des Labels
   StringConcatenate(text,"Linke untere Ecke: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- Den Chart neu zeichnen und zwei Sekunden warten
   ChartRedraw();
   Sleep(2000);
//--- in den unteren rechten Winkel bewegen
   if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
      return;
//--- ändern wir den Text des Labels
   StringConcatenate(text,"Rechte untere Ecke: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- Den Chart neu zeichnen und zwei Sekunden warten
   ChartRedraw();
   Sleep(2000);
//--- in den oberen rechten Winkel bewegen
   if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
      return;
//--- ändern wir den Text des Labels
   StringConcatenate(text,"Rechte obere Ecke: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- Den Chart neu zeichnen und zwei Sekunden warten
   ChartRedraw();
   Sleep(2000);
//--- in den oberen linken Winkel bewegen
   if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
      return;
//--- ändern wir den Text des Labels
   StringConcatenate(text,"Linke obere Ecke: ",x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return;
//--- Den Chart neu zeichnen und zwei Sekunden warten
   ChartRedraw();
   Sleep(2000);
//--- das Schild löschen
   LabelDelete(0,InpName);
//--- Den Chart neu zeichnen und halbe Sekunden warten
   ChartRedraw();
   Sleep(500);
//---
  }
//+------------------------------------------------------------------+
//| Die Funktion bewegt das Objekt und ändert seinen Text            |
//+------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
  {
//--- Label bewegen
   if(!LabelMove(0,InpName,x,y))
      return(false);
//--- ändern wir den Text des Labels
   StringConcatenate(text,text,x,",",y);
   if(!LabelTextChange(0,InpName,text))
      return(false);
//--- Überprüfen die Fakten der Zwangsabschaltung von Skript
   if(IsStopped())
      return(false);
//--- den Chart neu zeichnen
   ChartRedraw();
//--- Verzögerung von 0.01 Sekunden
   Sleep(10);
//--- Funktion beendet
   return(true);
  }