TextOut

该函数显示自定义数组中的文本(缓冲区)并返回该操作结果。数组是专为创建图形资源而设计的。

bool  TextOut(
   const string       text,          // 显示的文本
   int                x,             // X 坐标 
   int                y,             // Y 坐标 
   uint               anchor,        // 定位类型
   uint               &data[],       // 输出缓冲区
   uint               width,         // 缓冲区像素宽度
   uint               height,        // 缓冲区像素高度
   uint               color,         // 文本颜色
   ENUM_COLOR_FORMAT  color_format   // 输出的颜色格式
   );

参数

text

[in]  将被写入缓冲区的文本显示。只显示单行文本。

x

[in] 显示文本的定位点的 X 坐标。

y

[in] 显示文本的定位点的 Y 坐标。

anchor

[in]  显示文本定位点位置的9种预定义方法的值。该值通过结合两种标识设置 - 水平和垂直文本对齐标识。标识名称列在附注。

data[]

[in]  缓冲区,文本在这里显示。缓冲区被用于创建图形资源

width

[in]  缓冲区像素宽度。

height

[in]  缓冲区像素高度。.

color

[in]  文本颜色。

color_format

[in]  通过ENUM_COLOR_FORMAT 枚举值设置的颜色格式。

返回值

如果成功,返回 true ,否则 false。

注意

通过anchor指定的定位点是水平文本对齐和垂直文本对齐两个标识的组合。水平文本对齐标识:

  • TA_LEFT – 边框左侧定位点
  • TA_CENTER – 边框中心的水平定位点
  • TA_RIGHT – 边框右侧定位点

垂直文本对齐标识

  • TA_TOP – 边框上方定位点
  • TA_VCENTER – 边框中心的垂直定位点
  • TA_BOTTOM – 边框下方定位点

 

图片中显示了标识和指定定位点可能的组合。
 

9 possible ways to bind a text string

 

示例:

//--- 画布的宽度和高度(绘图发生的画布)
#define IMG_WIDTH  200
#define IMG_HEIGHT 200
//--- 在运行脚本之前,显示一个包含参数的窗口
#property script_show_inputs
//--- 提供设置颜色格式的功能
input ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_XRGB_NOALPHA;
//--- 用于渲染的数组(缓冲区)
uint ExtImg[IMG_WIDTH*IMG_HEIGHT];
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 创建OBJ_BITMAP_LABEL对象以进行绘图    
   ObjectCreate(0,"CLOCK",OBJ_BITMAP_LABEL,0,0,0);
//--- 设置要在CLOCK对象中呈现的图形资源的名称
   ObjectSetString(0,"CLOCK",OBJPROP_BMPFILE,"::IMG");
 
//--- 辅助变量
   double a;            // 箭头角度
   uint   nm=2700;      // 分钟计数器
   uint   nh=2700*12;   // 小时计数器
   uint   w,h;          // 用于获取文本字符串大小的变量 
   int    x,y;          // 用于计算文本字符串锚点当前坐标的变量 
 
//--- 以无限循环的方式旋转时钟指针,直到脚本停止
   while(!IsStopped())
     {
      //--- 清除时钟绘图缓冲区数组
      ArrayFill(ExtImg,0,IMG_WIDTH*IMG_HEIGHT,0);
      //--- 设置在表盘上绘制数字的字体
      TextSetFont("Arial",-200,FW_EXTRABOLD,0);
      //--- 画表盘
      for(int i=1;i<=12;i++)
        {
         //--- 在表盘上获取当前小时的大小
         TextGetSize(string(i),w,h);
         //--- 计算表盘上当前小时的坐标
         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);
         //--- 将此小时输出到ExtImg[]缓冲区中的表盘
         TextOut(string(i),x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
        }
      //--- 设置绘制分针的字体      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nm%3600));
      //--- 获取分针的大小
      TextGetSize("----->",w,h);
      //--- 计算表盘上分针的坐标
      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);
      //--- 将分针输出到ExtImg[]缓冲区中的表盘 
      TextOut("----->",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- 设置绘制时针的字体      
      TextSetFont("Arial",-200,FW_EXTRABOLD,-int(nh/12%3600));
      TextGetSize("==>",w,h);
      //--- 计算表盘上时针的坐标
      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);
      //--- 将时针输出到ExtImg[]缓冲区中的表盘 
      TextOut("==>",x,y,TA_LEFT|TA_TOP,ExtImg,IMG_WIDTH,IMG_HEIGHT,0xFFFFFFFF,clr_format);
 
      //--- 更新图形资源
      ResourceCreate("::IMG",ExtImg,IMG_WIDTH,IMG_HEIGHT,0,0,IMG_WIDTH,clr_format);
      //--- 强制图表更新
      ChartRedraw();
 
      //--- increase the hour and minute counters
      nm+=60;
      nh+=60;
      //--- 在两帧之间稍作停顿
      Sleep(10);
     }
//--- 脚本完成时删除CLOCK对象
   ObjectDelete(0,"CLOCK");
//---
  }

另见

资源ResourceCreate()ResourceSave()TextGetSize()TextSetFont()