//--- Beschreibung
#property description "Das Skript erstellt ein graphisches Objekt \"Rechteckiges Label\"."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string InpName="RectLabel"; // Label Name
input color InpBackColor=clrSkyBlue; // Hintergrundfarbe
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT; // Rahmentyp
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Winkel des Charts zu binden
input color InpColor=clrDarkBlue; // Die Farbe des flachen Randes (Flat)
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Stil des flachen Randes (Flat)
input int InpLineWidth=3; // Dicke des flachen Randes (Flat)
input bool InpBack=false; // Objekt im Hintergrund
input bool InpSelection=true; // Wählen um zu bewegen
input bool InpHidden=true; // Ausgeblendet in der Liste der Objekte
input long InpZOrder=0; // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt ein rechteckiges Label |
//+------------------------------------------------------------------+
bool RectLabelCreate(const long chart_ID=0, // ID des Charts
const string name="RectLabel", // Label Name
const int sub_window=0, // Nummer des Unterfensters
const int x=0, // X-Koordinate
const int y=0, // Y-Koordinate
const int width=50, // Breite
const int height=18, // Höhe
const color back_clr=C'236,233,216', // Hintergrundfarbe
const ENUM_BORDER_TYPE border=BORDER_SUNKEN, // Rahmentyp
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // Winkel des Charts um Objekt zu binden
const color clr=clrRed, // Die Farbe des flachen Randes (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // Stil des flachen Randes (Flat)
const int line_width=1, // Breite des flachen Randes (Flat)
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 rechteckiges Label erstellen
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": rechteckiges 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);
//--- Labelgröße setzen
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- Hintergrundfarbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- Rahmentyp setzen
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- wählen die Ecke des Charts, relativ zu der die Punktkoordinaten eingegeben werden
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- Die Farbe des flachen Randes (in Modus Flat) setzen
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Linienstil des flachen Rahmens setzen
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- Breite des flachen Rahmens setzen
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- 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 rechteckiges Label |
//+------------------------------------------------------------------+
bool RectLabelMove(const long chart_ID=0, // ID des Charts
const string name="RectLabel", // Label Name
const int x=0, // X-Koordinate
const int y=0) // Y-Koordinate
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- ein rechteckiges 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 die Größe eines rechteckigen Labels |
//+------------------------------------------------------------------+
bool RectLabelChangeSize(const long chart_ID=0, // ID des Charts
const string name="RectLabel", // Name des Labels
const int width=50, // Breite des Labels
const int height=18) // Höhe des Labels
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Größe des Labels ändern
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": Konnte nicht die Breite des Labels ändern! Fehlercode = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": Konnte nicht die Höhe des Labels ändern! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Ändert den Rahmentyp des rechteckigen Labels |
//+------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long chart_ID=0, // ID des Charts
const string name="RectLabel", // Name des Labels
const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // Rahmentyp
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Rahmentyp ändern
if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
{
Print(__FUNCTION__,
": Konnte nicht Rahmentyp ändern! Fehlercode = ",GetLastError());
return(false);
;}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Löscht ein rechteckiges Label |
//+------------------------------------------------------------------+
bool RectLabelDelete(const long chart_ID=0, // ID des Charts
const string name="RectLabel") // Name des Labels
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- das Schild löschen
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": rechteckiges Label konnte nicht gelöscht werden! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 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;
}
//--- Koordinaten eines rechteckigen Labels definieren
int x=(int)x_distance/4;
int y=(int)y_distance/4;
//--- Labelgröße setzen
int width=(int)x_distance/4;
int height=(int)y_distance/4;
//--- ein rechteckiges Label erstellen
if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- den Chart neu zeichnen und 1 Sekunde warten
ChartRedraw();
Sleep(1000);
//--- Größe des rechteckigen Labels ändern
int steps=(int)MathMin(x_distance/4,y_distance/4);
for(int i=0;i<steps;i++)
{
//--- Größe ändern
width+=1;
height+=1;
if(!RectLabelChangeSize(0,InpName,width,height))
return;
//--- Überprüfen die Fakten von Zwangsabschaltung der Skript
if(IsStopped())
return;
//--- Die Grafik neu zeichnen und 0,01 Sekunden warten
ChartRedraw();
Sleep(10);
}
//--- 1 Sekunde Verzögerung
Sleep(1000);
//--- Rahmentyp ändern
if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
return;
//--- den Chart neu zeichnen und 1 Sekunde warten
ChartRedraw();
Sleep(1000);
//--- Rahmentyp ändern
if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
return;
//--- den Chart neu zeichnen und 1 Sekunde warten
ChartRedraw();
Sleep(1000);
//--- das Schild löschen
RectLabelDelete(0,InpName);
ChartRedraw();
//--- 1 Sekunde warten
Sleep(1000);
//---
}
|