//--- descripción
#property description "El script crea el botón en el gráfico."
//--- mostramos la ventana de los parámetros de entrada durante el arranque del script
#property script_show_inputs
//--- los parámetros de entrada del script
input string InpName="Button"; // Nombre del botón
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Esquina del gráfico para el enlace
input string InpFont="Arial"; // Fuente
input int InpFontSize=14; // Tamaño de la fuente
input color InpColor=clrBlack; // Color del texto
input color InpBackColor=C'236,233,216'; // Color del fondo
input color InpBorderColor=clrNONE; // Color del borde
input bool InpState=false; // Pulsado/No pulsado
input bool InpBack=false; // Objeto al fondo
input bool InpSelection=false; // Seleccionar para mover
input bool InpHidden=true; // Ocultar en la lista de objetos
input long InpZOrder=0; // Prioridad para el clic del ratón
//+------------------------------------------------------------------+
//| Crea el botón |
//+------------------------------------------------------------------+
bool ButtonCreate(const long chart_ID=0, // ID del gráfico
const string name="Button", // nombre del botón
const int sub_window=0, // número de subventana
const int x=0, // coordenada por el eje X
const int y=0, // coordenada por el eje Y
const int width=50, // ancho del botón
const int height=18, // alto del botón
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // esquina del gráfico para el enlace
const string text="Button", // texto
const string font="Arial", // fuente
const int font_size=10, // tamaño de la fuente
const color clr=clrBlack, // color del texto
const color back_clr=C'236,233,216', // color del fondo
const color border_clr=clrNONE, // color del borde
const bool state=false, // pulsado/no pulsado
const bool back=false, // al fondo
const bool selection=false, // seleccionar para mover
const bool hidden=true, // ocultar en la lista de objetos
const long z_order=0) //prioridad para el clic del ratón
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos el botón
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": ¡Fallo al crear el botón! Código del error = ",GetLastError());
return(false);
}
//--- establecemos las coordenadas del botón
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- establecemos el tamaño del botón
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- establecemos la esquina del gráfico respecto a la cual van a determinarse las coordenadas del punto
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- ponemos el texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- establecemos la fuente del texto
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- establecemos el tamaño del texto
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- establecemos el color del texto
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- establecemos el color del fondo
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- establecemos el color del borde
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- set button state
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- activar (true) o desactivar (false) el modo de desplazamiento del botón con ratón
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultamos (true) o mostramos (false) el nombre del objeto gráfico en la lista de objetos
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gráfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| Mueve el botón |
//+------------------------------------------------------------------+
bool ButtonMove(const long chart_ID=0, // ID del gráfico
const string name="Button", // nombre del botón
const int x=0, // coordenada por el eje X
const int y=0) // coordenada por el eje Y
{
//--- anulamos el valor del error
ResetLastError();
//--- movemos el botón
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": ¡Fallo al mover la coordenada X del botón! Código del error = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": ¡Fallo al mover la coordenada Y del botón! Código del error = ",GetLastError());
return(false);
}
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| Cambia el tamaño del botón |
//+------------------------------------------------------------------+
bool ButtonChangeSize(const long chart_ID=0, // ID del gráfico
const string name="Button", // nombre del botón
const int width=50, // ancho del botón
const int height=18) // alto del botón
{
//--- anulamos el valor del error
ResetLastError();
//--- cambiamos las dimensiones del botón
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": ¡Fallo al cambiar el ancho del botón! Código del error = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": ¡Fallo al cambiar el alto del botón! Código del error = ",GetLastError());
return(false);
}
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| //| Cambia la esquina del gráfico para el enlace del botón |
//+------------------------------------------------------------------+
bool ButtonChangeCorner(const long chart_ID=0, // ID del gráfico
const string name="Button", // nombre del botón
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // esquina del gráfico para el enlace
{
//--- anulamos el valor del error
ResetLastError();
//--- cambiamos la esquina de anclaje
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": ¡Fallo al cambiar la esquina de anclaje! Código del error = ",GetLastError());
return(false);
}
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| Cambia el texto del botón |
//+------------------------------------------------------------------+
bool ButtonTextChange(const long chart_ID=0, // ID del gráfico
const string name="Button", // nombre del botón
const string text="Text") // texto
{
//--- anulamos el valor del error
ResetLastError();
//--- cambiamos el texto del objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": ¡Fallo al cambiar el texto! Código del error = ",GetLastError());
return(false);
}
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| Elimina el botón |
//+------------------------------------------------------------------+
bool ButtonDelete(const long chart_ID=0, // ID del gráfico
const string name="Button") // nombre del botón
{
//--- anulamos el valor del error
ResetLastError();
//--- eliminamos el botón
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": ¡Fallo al eliminar el botón! Código del error = ",GetLastError());
return(false);
}
//--- ejecución con éxito
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- tamaño de la ventana del gráfico
long x_distance;
long y_distance;
//--- definimos las dimensiones de la ventana
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("¡Fallo al obtener el ancho del gráfico! Código del error = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("¡Fallo al obtener el alto del gráfico! Código del error = ",GetLastError());
return;
}
//--- definimos el paso para el cambio del tamaño del botón
int x_step=(int)x_distance/32;
int y_step=(int)y_distance/32;
//--- establecemos las coordenadas del botón y su tamaño
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;
//--- creamos el botón
if(!ButtonCreate(0,InpName,0,x,y,x_size,y_size,InpCorner,"Press",InpFont,InpFontSize,
InpColor,InpBackColor,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redibujamos el gráfico
ChartRedraw();
//--- en el ciclo reducimos el botón
int i=0;
while(i<13)
{
//--- retardo de medio segundo
Sleep(500);
//--- ponemos el botón en el estado "pulsado"
ObjectSetInteger(0,InpName,OBJPROP_STATE,true);
//--- redibujamos el gráfico y esperamos 0,2 segundo
ChartRedraw();
Sleep(200);
//--- redefinimos las coordenadas y el tamaño del botón
x+=x_step;
y+=y_step;
x_size-=x_step*2;
y_size-=y_step*2;
//--- reducimos el botón
ButtonMove(0,InpName,x,y);
ButtonChangeSize(0,InpName,x_size,y_size);
//--- volveremos el botón en el estado de "no pulsado"
ObjectSetInteger(0,InpName,OBJPROP_STATE,false);
//--- redibujamos el gráfico
ChartRedraw();
//--- comprobamos si el trabajo del script ha sido finalizado forzosamente
if(IsStopped())
return;
//--- aumentamos el contador del ciclo
i++;
}
//--- retardo de medio segundo
Sleep(500);
//--- eliminamos el botón
ButtonDelete(0,InpName);
ChartRedraw();
//--- esperamos 1 segundo
Sleep(1000);
//---
}
|