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