TextSetFont

该函数使用绘制方法设置展示文本的字体并返回操作结果。默认使用-120 (12 pt)大小的Arial字体。

bool  TextSetFont(
   const string  name,            // 字体名称或磁盘上字体文件的路径
   int           size,            // 字体大小
   uint          flags,           // 混合标识
   int           orientation=0    // 文本方向
   );

参数

name

[in]  系统字体名称或包括字体或磁盘字体文件路径的资源名称。

size

[in]  字体大小。

flags

[in]  描述字体样式的混合标识

orientation

[in]  X轴的文本水平倾斜,测量单位0.1度。它表示方向=450象征倾斜45度。

返回值

如果当前字体成功安装,返回true,否则返回false。可能的错误代码:

  • ERR_INVALID_PARAMETER(4003) - name 显示 NULL 或 "" (空字符串),
  • ERR_INTERNAL_ERROR(4001) - 操作系统错误 (例如,试图创建不存在的字体)。

注意

如果"::" 被用作字体名称,字体从 EX5 资源下载。如果name字体名称扩展指定,字体从文件下载,如果路径从"\"或"/"开始,文件相对MQL5目录搜索。否则,相对调用TextSetFont()函数的EX5文件路径搜索。

字体大小使用正负值进行设置。该事实从操作系统设置定义了文本大小的依赖性(大小比例)。

  • 如果大小指定正数,那么当从逻辑字体变为物理字体时,该大小转变为设备的物理测量单位(像素),并且该大小符合从有效字体挑选的符号图形高度。当在图表上一起使用通过TextOut(函数展示的文本和通过OBJ_LABEL ("标签") 图形物件展示的文本时,这种情况不被推荐。
  • 如果大小指定负数,那么该数字被认为是逻辑点的十分之一(-350等于35逻辑点)并且被10除。获得的值然后转变为设备的物理测量单位(像素),并且符合从有效字体挑选的符号高度的绝对值。物件属性中指定的字体大小乘以-10,使得屏幕上的文本大小类似OBJ_LABEL物件的文本大小。

该标识可以被用作样式标识和指定字体宽度标识的结合体。标识名称显示如下。

指定字体样式的标识

标识

描述

FONT_ITALIC

斜体字

FONT_UNDERLINE

下划线

FONT_STRIKEOUT

加删除线

 

指定字体宽度的标识

标识

FW_DONTCARE

FW_THIN

FW_EXTRALIGHT

FW_ULTRALIGHT

FW_LIGHT

FW_NORMAL

FW_REGULAR

FW_MEDIUM

FW_SEMIBOLD

FW_DEMIBOLD

FW_BOLD

FW_EXTRABOLD

FW_ULTRABOLD

FW_HEAVY

FW_BLACK

 

示例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   COORD_X    200
#define   COORD_Y    100
#define   OBJ_NAME   "TestTextGetSizeBitmapLabel"
#define   RES_NAME   "TestTextGetSizeResource"
#define   COLOR_NULL 0x00FFFFFF
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 当前图表 ID
   long   chart_idChartID();
   
   string font_names[] ={"Arial""Tahoma""Calibri"};
   uint   flags_array[]={0FONT_ITALICFONT_UNDERLINEFONT_STRIKEOUT};
   uint   fw_array[]={FW_DONTCAREFW_THINFW_EXTRALIGHTFW_ULTRALIGHTFW_LIGHT,
                      FW_NORMALFW_REGULARFW_MEDIUMFW_SEMIBOLDFW_DEMIBOLD,
                      FW_BOLDFW_EXTRABOLDFW_ULTRABOLDFW_HEAVYFW_BLACK};
   
//--- 禁止绘制价格图表的任何属性
   ChartSetInteger(chart_idCHART_SHOWfalse);
   
//--- 声明图形资源的参数
   uint rc_width =(int)ChartGetInteger(chart_idCHART_WIDTH_IN_PIXELS); 
   uint rc_height=(int)ChartGetInteger(chart_idCHART_HEIGHT_IN_PIXELS); 
   uint rc_data[]; 
   uint rc_size=rc_width*rc_height;
  
//--- 创建用于文本输出的图形资源
   if(!CreateResource(chart_idrc_datarc_widthrc_height))
      return;
   
//--- 遍历字体名称
   for(int i=0i<(int)font_names.Size(); i++)
     {
      //--- 遍历字体标志
      for(int j=0j<(int)flags_array.Size(); j++)
        {
         //--- 使用从数组中获得的字体和样式标志绘制文本
         DrawText(font_names[i], flags_array[j], rc_datarc_widthrc_height);
         Sleep(800);
         ArrayInitialize(rc_dataCOLOR_NULL);
        }
      Sleep(800);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- 在输出具有不同字体大小和样式的所有文本之后,
//--- 显示具有不同字体宽度标志的文本
   for(int i=0i<(int)fw_array.Size(); i++)
     {
      //--- 设置显示带有宽度标志的文本的字体大小和名称
      string font_name="Tahoma";
      int    size=-140;
      TextSetFont(font_namesizefw_array[i]);
      
      //--- 创建绘制的文本字符串,将其输出到资源像素数组,并更新资源
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagWidthDescription(fw_array[i]), sizesize/-10);
      TextOut(textCOORD_XCOORD_YANCHOR_LEFT_UPPERrc_datarc_widthrc_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMErc_datarc_widthrc_heighttrue);
      //--- 等待一秒
      Sleep(1000);
      ArrayInitialize(rc_dataCOLOR_NULL);
     }
   
//--- 等待五秒钟,然后释放资源并删除图形对象
   Sleep(5000);
   ResourceFree(RES_NAME);
   ObjectDelete(chart_idOBJ_NAME);
   
//--- 允许绘制价格图表的任何属性
   ChartSetInteger(chart_idCHART_SHOWtrue);
   ChartRedraw(chart_id);
   /*
   执行脚本后,图表上会显示文本消息。
   文本有不同的字体,以及样式和宽度标志
   */ 
  }
//+------------------------------------------------------------------+
//| 显示五个文本字符串                                                  |
//| 使用不同的大小,指定的字体和标志                                      |
//+------------------------------------------------------------------+
void DrawText(const string font_nameuint flagsuint &pixels_array[], uint res_widthuint res_height)
  {
//--- 输出五个不同字体大小的文本字符串
   for(int i=0i<5i++)
     {
      //--- 使用绘图方法计算字体大小并设置文本输出的字体
      int size=-140+10*i;
      TextSetFont(font_namesizeflags);
      
      //--- 创建绘制的文本字符串,将其输出到资源像素数组,并更新资源
      string text=StringFormat("Text%d: Font name: \"%s%s\", size: %d (%d)"i+1font_nameFlagDescription(flags), sizesize/-10);
      TextOut(textCOORD_XCOORD_Y+22*iANCHOR_LEFT_UPPERpixels_arrayres_widthres_heightColorToARGB(clrDodgerBlue), COLOR_FORMAT_ARGB_NORMALIZE);
      Update(RES_NAMEpixels_arrayres_widthres_heighttrue);
      //--- 等待一会儿
      Sleep(800);
     }
  }
//+------------------------------------------------------------------+
//| 返回字体样式标志的描述                                              |
//+------------------------------------------------------------------+
string FlagDescription(const uint flag)
  {
   switch(flag)
     {
      case FONT_ITALIC     :  return(" Italic");
      case FONT_UNDERLINE  :  return(" Underline");
      case FONT_STRIKEOUT  :  return(" Strikeout");
     }
   return("");
  }
//+------------------------------------------------------------------+
//| 返回字体宽度标志的描述                                              |
//+------------------------------------------------------------------+
string FlagWidthDescription(const uint flag)
  {
   switch(flag)
     {
      case FW_DONTCARE  :  return(" Dontcare");
      case FW_THIN      :  return(" Thin");
      case FW_EXTRALIGHT:  return(" Extralight");
      case FW_ULTRALIGHT:  return(" Ultralight");
      case FW_LIGHT     :  return(" Light");
      case FW_NORMAL    :  return(" Normal");
      case FW_REGULAR   :  return(" Regular");
      case FW_MEDIUM    :  return(" Medium");
      case FW_SEMIBOLD  :  return(" Semibold");
      case FW_DEMIBOLD  :  return(" Demibold");
      case FW_BOLD      :  return(" Bold");
      case FW_EXTRABOLD :  return(" Extrabold");
      case FW_ULTRABOLD :  return(" Ultrabold");
      case FW_HEAVY     :  return(" Heavy");
      case FW_BLACK     :  return(" Black");
     }
   return("");
  }
//+------------------------------------------------------------------+
//| 为整个图表创建图形资源                                              |
//+------------------------------------------------------------------+
bool CreateResource(const long chart_iduint &pixel_data[], const uint widthconst uint height)
  {
//--- 设置像素数组的大小
   ResetLastError(); 
   uint size=width*height;
   if(ArrayResize(pixel_datasize)!=size
     { 
      PrintFormat("%s: ArrayResize() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- 用透明颜色填充像素数组,并基于它创建图形资源
   ArrayInitialize(pixel_dataCOLOR_NULL); 
   if(!ResourceCreate(RES_NAMEpixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE)) 
     { 
      PrintFormat("%s: ResourceCreate() failed. Error code ",__FUNCTION__GetLastError()); 
      return(false); 
     } 
  
//--- 在图表左上角的坐标处创建图形标签对象
   if(!ObjectCreate(0OBJ_NAMEOBJ_BITMAP_LABEL000)) 
     { 
      PrintFormat("%s: ObjectCreate() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     } 
//--- 将创建的位图对象的宽度和高度设置为等于图形资源的宽度和高。
//--- 将对象锚点设置为其中心。
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_XSIZEwidth))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
   if(!ObjectSetInteger(chart_idOBJ_NAMEOBJPROP_YSIZEheight))
     {
      PrintFormat("%s: ObjectSetInteger() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
//--- 将之前为位图对象创建的图形资源指定为图像文件
//--- 在这种情况下,为了指示所使用的图形资源的名称,我们需要在其名称前添加“::”
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_BMPFILE"::"+RES_NAME))
     {
      PrintFormat("%s: ObjectSetString() failed. Error code %d",__FUNCTION__GetLastError()); 
      return(false); 
     }
    
//--- 一切正常
   return(true);
  }
//+------------------------------------------------------------------+ 
//| 更新图形资源数据                                                   |
//+------------------------------------------------------------------+ 
void Update(const string res_nameconst uint &pixel_data[], const uint widthconst uint heightconst bool redraw
  { 
//--- 如果传递零个维度,则离开
   if(width==0 || height==0
      return
//--- 更新资源数据并重新绘制图表
   if(ResourceCreate(res_namepixel_datawidthheight000COLOR_FORMAT_ARGB_NORMALIZE) && redraw
      ChartRedraw(); 
  } 

另见

资源ResourceCreate()ResourceSave()TextOut()