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 – 边框下方定位点

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

例如:

//--- 画布的宽和高(用于绘制)

#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()