Descargar MetaTrader 5

OBJ_BUTTON

Objeto "Botón".

ObjButton

Nota

Las coordenadas del punto de anclaje se establecen en píxeles. Desde la enumeración ENUM_BASE_CORNER se puede elegir la esquina de enlace del botón.

Ejemplo

El siguiente script crea y desplaza el objeto "Botón" en el gráfico. Para la creación y modificación de las propiedades del objeto gráfico han sido escritas unas funciones especiales que Usted puede utilizar "como son" en sus propias aplicaciones.

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