Ajustes de fuente

Todos los tipos de objetos permiten establecer determinados textos para ellos (OBJPROP_TEXT). Muchos de ellos muestran el texto especificado directamente en el gráfico, para el resto se convierte en una parte informativa de la información sobre herramientas.

Cuando se muestra texto dentro de un objeto (para los tipos OBJ_TEXT, OBJ_LABEL, OBJ_BUTTON y OBJ_EDIT), puede elegir un nombre y tamaño de fuente. Para los objetos de otros tipos no se aplican los ajustes de fuente: sus descripciones se muestran siempre en la fuente estándar del gráfico.

Identificador

Descripción

Tipo

OBJPROP_FONTSIZE

Tamaño de fuente en píxeles

int

OBJPROP_FONT

Fuente

string

No se puede ajustar el tamaño de la fuente en puntos de impresión aquí.

El script de prueba ObjectFont.mq5 crea objetos con texto y cambia el nombre y el tamaño de la fuente. Utilicemos la clase ObjectBuilder del script anterior.

Al principio de OnStart, el script calcula el centro de la ventana tanto en coordenadas de pantalla como en los ejes tiempo/precio. Esto es necesario porque los objetos de distintos tipos que participan en la prueba utilizan sistemas de coordenadas diferentes.

void OnStart()
{
   const string name = "ObjFont-";
   
   const int bars = (int)ChartGetInteger(0CHART_WIDTH_IN_BARS);
   const int first = (int)ChartGetInteger(0CHART_FIRST_VISIBLE_BAR);
   
   const datetime centerTime = iTime(NULL0first - bars / 2);
   const double centerPrice =
      (ChartGetDouble(0CHART_PRICE_MIN)
      + ChartGetDouble(0CHART_PRICE_MAX)) / 2;
   
   const int centerX = (int)ChartGetInteger(0CHART_WIDTH_IN_PIXELS) / 2;
   const int centerY = (int)ChartGetInteger(0CHART_HEIGHT_IN_PIXELS) / 2;
   ...

La lista de tipos de objetos comprobados se especifica en el array types. Para algunos de ellos, en particular OBJ_HLINE y OBJ_VLINE, la configuración de la fuente no tendrá ningún efecto, aunque el texto de las descripciones aparecerá en la pantalla (para asegurarnos de ello, activamos el modo CHART_SHOW_OBJECT_DESCR).

   ChartSetInteger(0CHART_SHOW_OBJECT_DESCRtrue);
   
   ENUM_OBJECT types[] =
   {
      OBJ_HLINE,
      OBJ_VLINE,
      OBJ_TEXT,
      OBJ_LABEL,
      OBJ_BUTTON,
      OBJ_EDIT,
   };
   int t = 0// cursor
   ...

La variable t se utilizará para cambiar secuencialmente de un tipo a otro.

El array fonts contiene las fuentes estándar más populares de Windows.

   string fonts[] =
   {
      "Comic Sans MS",
      "Consolas",
      "Courier New",
      "Lucida Console",
      "Microsoft Sans Serif",
      "Segoe UI",
      "Tahoma",
      "Times New Roman",
      "Trebuchet MS",
      "Verdana"
   };
   
   int f = 0// cursor
   ...

Iteraremos en ellas utilizando la variable f.

Dentro del bucle de demostración, ordenamos a ObjectBuilder que cree un objeto del tipo actual types[t] en el centro de la ventana (por unificación, las coordenadas se especifican en ambos sistemas de coordenadas, a fin de no hacer diferencias en el código dependiendo del tipo: las coordenadas no admitidas por el objeto simplemente no tendrán efecto).

   while(!IsStopped())
   {
      
      const string str = EnumToString(types[t]);
      ObjectBuilder *object = new ObjectBuilder(name + strtypes[t]);
      object.set(OBJPROP_TIMEcenterTime);
      object.set(OBJPROP_PRICEcenterPrice);
      object.set(OBJPROP_XDISTANCEcenterX);
      object.set(OBJPROP_YDISTANCEcenterY);
      object.set(OBJPROP_XSIZEcenterX / 3 * 2);
      object.set(OBJPROP_YSIZEcenterY / 3 * 2);
      ...

A continuación, configuramos el texto y la fuente (el tamaño se elige al azar).

      const int size = rand() * 15 / 32767 + 8;
      Comment(str + " " + fonts[f] + " " + (string)size);
      object.set(OBJPROP_TEXTfonts[f] + " " + (string)size);
      object.set(OBJPROP_FONTfonts[f]);
      object.set(OBJPROP_FONTSIZEsize);
      ...

Para la siguiente pasada, movemos los cursores en los arrays de tipos de objeto y nombres de fuente.

      t = ++t % ArraySize(types);
      f = ++f % ArraySize(fonts);
      ...

Por último, actualizamos el gráfico, esperamos 1 segundo y borramos el objeto para crear otro.

      ChartRedraw();
      Sleep(1000);
      delete object;
   }
}

En la siguiente imagen se muestra el momento en que se ejecuta el script.

Botón con configuración de fuente personalizada

Botón con configuración de fuente personalizada