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();
 
      //--- 增加小时和分钟计数器
      nm+=60;
      nh+=60;
      //--- 框架之间保持短暂停顿
      Sleep(10);
     }
//--- 完成脚本操作时删除 CLOCK 物件
   ObjectDelete(0,"CLOCK");
//---
  }

另见

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