Propiedades de los campos de entrada: alineación de texto y sólo lectura

Para los objetos de tipo OBJ_EDIT (campo de entrada), un programa MQL puede establecer dos propiedades específicas definidas mediante las funciones ObjectSetInteger/ObjectGetInteger.

Identificador

Descripción

Tipo de valor

OBJPROP_ALIGN

Alineación horizontal del texto

ENUM_ALIGN_MODE

OBJPROP_READONLY

Posibilidad de editar texto

bool

La enumeración ENUM_ALIGN_MODE contiene los siguientes miembros:

Identificador

Descripción

ALIGN_LEFT

Alineación a la izquierda

ALIGN_CENTER

Alineación central

ALIGN_RIGHT

Alineación a la derecha

Tenga en cuenta que, a diferencia de los objetos OBJ_TEXT y OBJ_LABEL, el campo de entrada no se redimensiona automáticamente para ajustarse al texto introducido, por lo que para cadenas largas, puede que necesite establecer explícitamente la propiedad OBJPROP_XSIZE.

En el modo de edición, el desplazamiento horizontal del texto funciona dentro del campo de entrada.

El script ObjectEdit.mq5 crea cuatro objetos OBJ_EDIT: tres de ellos son editables con diferentes métodos de alineación de texto y el cuarto está en modo de sólo lectura.

#include "ObjectPrefix.mqh"
   
void SetupEdit(const int x, const int y, const int dx, const int dy,
   const ENUM_ALIGN_MODE alignment = ALIGN_LEFT, const bool readonly = false)
{
   // create an object with a description of the properties
   const string props = EnumToString(alignment)
      + (readonly ? " read-only" : " editable");
   const string name = ObjNamePrefix + "Edit" + props;
   ObjectCreate(0, name, OBJ_EDIT, 0, 0, 0);
   // position and size
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, name, OBJPROP_XSIZE, dx);
   ObjectSetInteger(0, name, OBJPROP_YSIZE, dy);
   // specific properties of input fields
   ObjectSetInteger(0, name, OBJPROP_ALIGN, alignment);
   ObjectSetInteger(0, name, OBJPROP_READONLY, readonly);
   // colors (different depending on editability)
   ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrWhite);
   ObjectSetInteger(0, name, OBJPROP_COLOR, readonly ? clrRed : clrBlue);
   // content
   ObjectSetString(0, name, OBJPROP_TEXT, props);
   // tooltip for editable
   ObjectSetString(0, name, OBJPROP_TOOLTIP,
      (readonly ? "\n" : "Click me to edit"));
}
   
void OnStart()
{
   SetupEdit(100, 100, 200, 20);
   SetupEdit(100, 120, 200, 20, ALIGN_RIGHT);
   SetupEdit(100, 140, 200, 20, ALIGN_CENTER);
   SetupEdit(100, 160, 200, 20, ALIGN_CENTER, true);
}

El resultado del script se muestra en la siguiente imagen:

Campos de entrada en diferentes modos

Campos de entrada en diferentes modos

Puede hacer clic en cualquier campo editable y cambiar su contenido.