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:

//--- anchura y altura del lienzo (lienzo en el que se realiza el dibujado)
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- antes de ejecutar el script, mostraremos la ventana con los parámetros
#property script_show_inputs
//--- permite definir el formato de color
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- array (búfer) para el dibujado
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- creamos el objeto OBJ_BITMAP_LABEL para el dibujado    
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- especifamos el nombre del recurso gráfico para el dibujado 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 el tamaño de las cadenas de texto 
   int    x,y;          // variables para calcular las coordenadas actuales del punto de anclaje de las cadenas de texto
 
//--- giramos las manecillas del reloj en un ciclo infinito hasta que el script se detenga
   while(!IsStopped())
     {
      //--- limpiamos el array del búfer de dibujado del reloj
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
      //--- establecemos la fuente para el dibujado de las cifras en el dial
      TextSetFont("Arial",-200,FW_EXTRABOLD,0);
      //--- dibujando el dial
      for(int i=1;i<=12;i++)
        {
         //--- obtenemos las dimensiones de la hora actual en el dial
         TextGetSize(string(i),w,h);
         //--- calculamos las coordenadas de la hora actual en el dial
         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);
         //--- mostramos esta hora en el dial en el búfer ExtImg[]
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
        }
      //--- ahora estableceremos la fuente para la representación de la manecilla de minutos      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
      //--- obtenemos el tamaño de la manecilla de minutos
      TextGetSize("----->",w,h);
      //--- calculamos las coordenadas de la manecilla de minutos en el dial
      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);
      //--- mostramos la manecilla de minutos en el dial en el búfer ExtImg[]
      TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- ahora estableceremos la fuente para el dibujado de la manecilla de horas      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
      TextGetSize("==>",w,h);
      //--- calculamos las coordenadas de la manecilla de horas en el dial
      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);
      //--- mostramos la manecilla de horas en el dial en el búfer ExtImg[]
      TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- actualizamos el recurso gráfico
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
      //--- actualización forzosa del gráfico
      ChartRedraw();
 
      //--- incrementamos el contador de horas y minutos
      nm+=60;
      nh+=60;
      //--- mantenemos una breve pausa entre cuadros
      Sleep(10);
     }
//--- eliminamos el objeto CLOCK al finalizar el script
   ObjectDelete(0,"CLOCK");
//---
  }

Véase también

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