//--- Beschreibung
#property description "Das Skript erstellt eine Schaltfläche auf dem Chart."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string InpName="Button"; // Schaltflächenname
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Winkel des Charts zu binden
input string InpFont="Arial"; // Schrift
input int InpFontSize=14; // Schriftgröße
input color InpColor=clrBlack; // Textfarbe
input color InpBackColor=C'236,233,216'; // Hintergrundfarbe
input color InpBorderColor=clrNONE; // Rahmenfarbe
input bool InpState=false; // Gedrückt/Ungedrückt
input bool InpBack=false; // Objekt im Hintergrund
input bool InpSelection=false; // Wählen zu bewegen
input bool InpHidden=true; // Ausgeblendet in der Liste der Objekte
input long InpZOrder=0; // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt eine Taste |
//+------------------------------------------------------------------+
bool ButtonCreate(const long chart_ID=0, // ID des Charts
const string name="Button", // Schaltflächenname
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 der Schaltfläche
const int height=18, // Höhe der Schaltfläche
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // Winkel des Charts zu binden
const string text="Button", // Text
const string font="Arial", // Schrift
const int font_size=10, // Schriftgröße
const color clr=clrBlack, // Textfarbe
const color back_clr=C'236,233,216', // Hintergrundfarbe
const color border_clr=clrNONE, // Rahmenfarbe
const bool state=false, // Gedrückt/Ungedrückt
const bool back=false, // Im Hintergrund
const bool selection=false, // Auswä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();
//--- eine Schaltfläche erstellen
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": Konnte nicht Schaltfläche erstellen! Fehlercode = ",GetLastError());
return(false);
}
//--- Schaltflächenkoordinaten setzen
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- Schaltflächengröße setzen
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- 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);
//--- Textfarbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Hintergrundfarbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- Rahmenfarbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- set button state
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- aktivieren (true) oder deaktivieren (false) Bewegung der Schaltfläche mit dem Maus
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 die Schaltfläche |
//+------------------------------------------------------------------+
bool ButtonMove(const long chart_ID=0, // ID des Charts
const string name="Button", // Name der Schaltfläche
const int x=0, // X Koordinate
const int y=0) // Y Koordinate
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Schaltfläche bewegen
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": Kann nicht X-Koordinate der Schaltfläche bewegen! Fehlercode = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": Kann nicht Y-Koordinate der Schaltfläche bewegen! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Ändert die Größe einer Schaltfläche |
//+------------------------------------------------------------------+
bool ButtonChangeSize(const long chart_ID=0, // ID des Charts
const string name="Button", // Name der Schaltfläche
const int width=50, // Breite der Schaltfläche
const int height=18) // Höhe der Schaltfläche
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Größe der Schaltfläche ändern
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": Konnte nicht die Breite der Schaltfläche ändern! Fehlercode = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": Konnte nicht die Höhe der Schaltfläche ändern! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Ändert Winkel des Charts die Taste zu binden |
//+------------------------------------------------------------------+
bool ButtonChangeCorner(const long chart_ID=0, // ID des Charts
const string name="Button", // Name der Schaltfläche
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 Text der Schaltfläche |
//+------------------------------------------------------------------+
bool ButtonTextChange(const long chart_ID=0, // ID des Chart
const string name="Button", // Name der Schaltfläche
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 die Schaltfläche |
//+------------------------------------------------------------------+
bool ButtonDelete(const long chart_ID=0, // ID des Charts
const string name="Button") // Name der Schaltfläche
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- die Schaltfläche löschen
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": Könnte nicht die Schaltfläche löschen! 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;
}
//--- Schritt für Änderung der Schaltflächengröße definieren
int x_step=(int)x_distance/32;
int y_step=(int)y_distance/32;
//--- Schaltflächenkoordinaten und ihre Größe setzen
int x=(int)x_distance/32;
int y=(int)y_distance/32;
int x_size=(int)x_distance*15/16;
int y_size=(int)y_distance*15/16;
//--- eine Schaltfläche erstellen
if(!ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner,"Press",InpFont,InpFontSize,
InpColor,InpBackColor,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
;}
//--- den Chart neu zeichnen
ChartRedraw();
//--- Verkleinern die Schaltfläche im Zyklus
int i=0;
while(i<13)
{
//--- Halb-Sekunden-Verzögerung
Sleep(500);
//--- Die Schaltfläche gedrückt setzen
ObjectSetInteger(0,InpName,OBJPROP_STATE,true);
//--- Die Grafik neu zeichnen und 0,2 Sekunden warten
ChartRedraw();
Sleep(200);
//--- die Position und Größe der Schaltfläche neu definieren
x+=x_step;
y+=y_step;
x_size-=x_step*2;
y_size-=y_step*2;
//--- Schaltfläche verkleinern
ButtonMove(0,InpName,x,y);
ButtonChangeSize(0,InpName,x_size,y_size);
//--- Schaltfläche im ungedrückt Zustand setzen
ObjectSetInteger(0,InpName,OBJPROP_STATE,false);
//--- den Chart neu zeichnen
ChartRedraw();
//--- Überprüfen die Fakten von Zwangsabschaltung der Skript
if(IsStopped())
return;
//--- Zykluszähler erhöhen
i++;
}
//--- Halb-Sekunden-Verzögerung
Sleep(500);
//--- die Schaltfläche löschen
ButtonDelete(0,InpName);
ChartRedraw();
//--- 1 Sekunde warten
Sleep(1000);
//---
}
|