TextOut

Esta función visualiza el texto en un array personalizado (búfer) y devuelve el resultado de esta operación. Este array está destinado para la generación de un recurso gráfico.

bool  TextOut(
   const string       text,          // texto mostrado
   int                x,             // coordenada X 
   int                y,             // coordenada Y 
   uint               anchor,        // modo de anclaje
   uint               &data[],       // búfer de salida
   uint               width,         // ancho del búfer en píxeles
   uint               height,        // alto del búfer en píxeles
   uint               color,         // color del texto
   ENUM_COLOR_FORMAT  color_format   // formato del texto a visualizar
   );

Parámetros

text

[in]  Texto visualizado que va a ser escrito en el búfer. Se visualiza sólo el texto de una solo línea.

x

[in]  Coordenada X del punto de anclaje para el texto visualizado.

y

[in]  Coordenada Y del punto de anclaje para el texto visualizado.

anchor

[in]  Valor del conjunto de 9 modos predeterminados de la posición del punto de anclaje del texto visualizado. La posición se establece con la combinación de dos banderas: la bandera de alineación del texto por la horizontal y la bandera de alineación del texto por la vertical. Los nombres de las banderas se listan en la Nota de abajo.

data[]

[in]  Búfer que recibe el texto. Este búfer se utiliza para crear un recurso gráfico.

width

[in]  Ancho del búfer en puntos (píxeles).

height

[in]  Alto del búfer en puntos (píxeles).

color

[in]  Color del texto.

color_format

[in]  Formato del color se establece con un valor desde la enumeración ENUM_COLOR_FORMAT.

Valor devuelto

Devuelve true en caso de la ejecución exitosa, de lo contrario devuelve false.

Nota

El modo de anclaje que se establece con el parámetro anchor es una combinación de dos banderas de alineación de texto por la vertical y por la horizontal. Banderas de alineación de texto por la horizontal:

  • TA_LEFT — punto de anclaje situado en la parte izquierda del rectángulo limitador
  • TA_CENTER — punto de anclaje por la horizontal se sitúa en el centro del rectángulo limitador
  • TA_RIGHT — punto de anclaje situado en la parte derecha del rectángulo limitador

Banderas de alineación de texto por la vertical

  • TA_TOP — punto de anclaje situado en la parte superior del rectángulo limitador
  • TA_VCENTER — punto de anclaje por la vertical se sitúa en el centro del rectángulo limitador
  • TA_BOTTOM — punto de anclaje situado en la parte inferior del rectángulo limitador

 

Las posibles combinaciones de banderas y los modos de anclaje que éstas establecen se muestran en la figura de abajo.
 

9 posibles modos de anclaje de la línea de texto

Ejemplo:

//--- ancho y alto del canvas (lienzo en el que se hace el dibujo)
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- antes de iniciar el script mostramos la ventana con los parámetros
#property script_show_inputs
//--- damos la posibilidad de establecer el formato del color
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- array (búfer) de dibujar 
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- creamos el objeto OBJ_BITMAP_LABEL para dibujar    
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- especificamos el nombre del recurso gráfico para escribir en el objeto CLOCK
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- variables auxiliares
   double a;            // ángulo de la flecha
   uint   nm=2700;      // contador de minutos
   uint   nh=2700*12;   // contador de horas
   uint   w,h;          // variables para obtener los tamaños de las cadenas de texto 
   int    x,y;          // variables para calcular las coordenadas actuales del punto de anclaje de las cadenas de texto
 
//--- rotamos las agujas del reloj en un ciclo infinito hasta la detención del script
   while(!IsStopped())
     {
      //--- limpiamos el array del búfer para el dibujo del reloj
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
      //--- establecer la fuente para dibujar las cifras sobre la carátula del reloj
      TextSetFont("Courier",30,FW_EXTRABOLD,0);
      //--- dibujamos la carátula del reloj
      for(int i=1;i<=12;i++)
        {
         //--- obtenemos el tamaño de la hora actual sobre la carátula
         TextGetSize(string(i),w,h);
         //--- calculamos coordenadas de la hora actual sobre la carátula
         a=-((i*300)%3600*M_PI)/1800.0;
         x=IMG_WIDTH/2-int(sin(a)*80+0.5+w/2);
         y=IMG_HEIGHT/2-int(cos(a)*80+0.5+h/2);
         //--- visualización de esta hora sobre la carátula en el búfer ExtImg[]
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
        }
      //--- ahora establecemos la fuente para dibujar el minutero      
      TextSetFont("Courier",20,FW_EXTRABOLD,(uint)-(nm%3600));
      //--- obtenemos el tamaño del minutero
      TextGetSize("---->",w,h);
      //--- calculamos las coordenadas del minutero sobre la carátula del reloj
      a=-(nm%3600*M_PI)/1800.0;
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
      //--- visualización del minutero sobre la carátula en el búfer ExtImg[]
      TextOut("---->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- ahora establecemos la fuente para dibujar el horario      
      TextSetFont("Courier",20,FW_EXTRABOLD,(uint)-(nh/12%3600));
      TextGetSize("===>",w,h);
      //--- calculamos las coordenadas del horario sobre la carátula del reloj
      a=-(nh/12%3600*M_PI)/1800.0;
      x=IMG_WIDTH/2-int(sin(a)*h/2+0.5);
      y=IMG_HEIGHT/2-int(cos(a)*h/2+0.5);
      //--- visualización del horario sobre la carátula en el búfer ExtImg[]
      TextOut("===>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- actualización del recurso gráfico
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
      //--- actualización forzada del gráfico
      ChartRedraw();
 
      //--- aumentamos los contadores de hora y minutos
      nm+=60;
      nh+=60;
      //--- mantenemos una pausa entre los cuadros
      Sleep(100);
     }
//--- eliminamos el objeto CLOCK al terminarse el trabajo del script
   ObjectDelete(0,"CLOCK");
//---
  }

Véase también

Recursos, ResourceCreate(), ResourceSave(), TextGetSize(), TextSetFont()