OBJ_EDIT

Objeto "Campo de edición".

ObjEdit

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 campo de edición.

Además, se puede elegir uno de los tipos de alineación del texto dentro del "Campo de edición" usando la enumeración ENUM_ALIGN_MODE.

Ejemplo

El siguiente script crea y desplaza la "Campo de edició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 objeto \"Campo de edición\"."
//--- 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="Edit";              // Nombre del objeto
input string           InpText="Text";              // Texto del objeto
input string           InpFont="Arial";             // Fuente
input int              InpFontSize=14;              // Tamaño de la fuente
input ENUM_ALIGN_MODE  InpAlign=ALIGN_CENTER;       // Modo de alineación del texto
input bool             InpReadOnly=false;           // Posibilidad de edición
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER// Esquina del gráfico para el enlace
input color            InpColor=clrBlack;           // Color del texto
input color            InpBackColor=clrWhite;       // Color del fondo
input color            InpBorderColor=clrBlack;     // Color del borde
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 objeto "Campo de edición"                                      |
//+------------------------------------------------------------------+
bool EditCreate(const long             chart_ID=0,               // ID del gráfico
                const string           name="Edit",              // nombre del objeto
                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
                const int              height=18,                // alto
                const string           text="Text",              // texto
                const string           font="Arial",             // fuente
                const int              font_size=10,             // tamaño de la fuente
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // modo de alineación
                const bool             read_only=false,          // posibilidad de edición
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER// esquina del gráfico para el enlace
                const color            clr=clrBlack,             // color del texto
                const color            back_clr=clrWhite,        // color del fondo
                const color            border_clr=clrNONE,       // color del borde
                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 campo de edición
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al crear el objeto \"Campo de edición\"! Código del error = ",GetLastError());
      return(false);
     }
//--- establecemos las coordenadas del objeto
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- establecemos el tamaño del objeto
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- 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 modo de alineación del texto dentro del objeto
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- ponemos (true) o cancelamos (false) el modo sólo para lectura
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- establecemos la esquina del gráfico respecto a la cual van a determinarse las coordenadas del objeto
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- 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);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la etiqueta 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 objeto "Campo de edición"                                      |
//+------------------------------------------------------------------+
bool EditMove(const long   chart_ID=0,  // ID del gráfico
              const string name="Edit"// nombre del objeto
              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 objeto
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al mover la coordenada X del objeto! Código del error = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al mover la coordenada X del objeto! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Cambia el tamaño del objeto "Campo de edición"                            |
//+------------------------------------------------------------------+
bool EditChangeSize(const long   chart_ID=0,  // ID del gráfico
                    const string name="Edit"// nombre del objeto
                    const int    width=0,     // ancho
                    const int    height=0)    // alto
  {
//--- anulamos el valor del error
   ResetLastError();
//--- cambiamos las dimensiones del objeto
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar el ancho del objeto! Código del error = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al cambiar el alto del objeto! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Cambia el texto del objeto "Campo de edición"                            |
//+------------------------------------------------------------------+
bool EditTextChange(const long   chart_ID=0,  // ID del gráfico
                    const string name="Edit"// nombre del objeto
                    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);
  }
//+------------------------------------------------------------------+
//| Devuelve el texto del objeto "Campo de edición"                            |
//+------------------------------------------------------------------+
bool EditTextGet(string      &text,        // texto
                 const long   chart_ID=0,  // ID del gráfico
                 const string name="Edit"// nombre del objeto
  {
//--- anulamos el valor del error
   ResetLastError();
//--- recibimos el texto del objeto
   if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al recibir el texto! Código del error = ",GetLastError());
      return(false);
     }
//--- ejecución con éxito
   return(true);
  }
//+------------------------------------------------------------------+
//| Elimina el objeto "Campo de edición"                                      |
//+------------------------------------------------------------------+
bool EditDelete(const long   chart_ID=0,  // ID del gráfico
                const string name="Edit"// nombre del objeto
  {
//--- anulamos el valor del error
   ResetLastError();
//--- eliminamos la etiqueta
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            ": ¡Fallo al eliminar el objeto \"Campo de edició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 campo de edición
   int x_step=(int)x_distance/64;
//--- establecemos las coordenadas del campo de edición y su tamaño
   int x=(int)x_distance/8;
   int y=(int)y_distance/2;
   int x_size=(int)x_distance/8;
   int y_size=InpFontSize*2;
//--- recordamos el texto en la variable local
   string text=InpText;
//--- creamos el campo de edición
   if(!EditCreate(0,InpName,0,x,y,x_size,y_size,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
      InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- redibujamos el gráfico y esperamos 1 segundo
   ChartRedraw();
   Sleep(1000);
//--- extendemos el campo de edición
   while(x_size-x<x_distance*5/8)
     {
      //--- aumentamos el ancho del campo de edición
      x_size+=x_step;
      if(!EditChangeSize(0,InpName,x_size,y_size))
         return;
      //--- comprobamos si el trabajo del script ha sido finalizado forzosamente
      if(IsStopped())
         return;
      //--- redibujamos el gráfico y esperamos 0,05 segundo
      ChartRedraw();
      Sleep(50);
     }
//--- retardo de medio segundo
   Sleep(500);
//--- cambiamos el texto
   for(int i=0;i<20;i++)
     {
      //--- añadimos "+" al principio y al final
      text="+"+text+"+";
      if(!EditTextChange(0,InpName,text))
         return;
      //--- comprobamos si el trabajo del script ha sido finalizado forzosamente
      if(IsStopped())
         return;
      //--- redibujamos el gráfico y esperamos 0,1 segundo
      ChartRedraw();
      Sleep(100);
     }
//--- retardo de medio segundo
   Sleep(500);
//--- eliminamos el campo de edición
   EditDelete(0,InpName);
   ChartRedraw();
//--- esperamos 1 segundo
   Sleep(1000);
//---
  }