EA资讯

EA资讯

首页 > 行业资讯 > EA资讯 > MT5更新新版本后EA中文显示乱码的解决方法

MT5更新新版本后EA中文显示乱码的解决方法

2025-12-18 热度:15 ℃

MT5最近更新版本之后,所有的中文都会显示成乱码或方框,或者干脆不显示。

image.png

像上面这个按钮,就不显示,我把代码放在下面,按钮上应该显示出“中文”两个字。

//+------------------------------------------------------------------+
//|                                                       button.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll(0,0,OBJ_BUTTON);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","微软雅黑",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);
  }
//+------------------------------------------------------------------+
bool button(const long              chart_ID=0,// 图表 ID
            const string            name="Button",            // 按钮名称
            const int               sub_window=0,             // 子窗口指数
            const long              x=0,                      // X 坐标
            const long              y=0,                      // Y 坐标
            const int               width=50,                 // 按钮宽度
            const int               height=18,                // 按钮高度
            const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // 图表定位角
            const string            text="Button",            // 文本
            const string            font="Arial",// 字体
            const int               font_size=10,             // 字体大小
            const color             clr=clrBlack,             // 文本颜色
            const color             back_clr=C'236,233,216',  // 背景色
            const color             border_clr=clrNONE,       // 边界颜色
            const bool              state=false,              // 出版/发布
            const bool              back=false,               // 在背景中
            const bool              selection=false,          // 突出移动
            const bool              hidden=true,              // 隐藏在对象列表
            const long              z_order=0)                // 鼠标单击优先
  {
//--- 重置错误的值
   ResetLastError();
//--- 创建按钮
   if(ObjectFind(chart_ID,name)<0)
     {
      if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
        {
         Print(__FUNCTION__,
               ": failed to create the button! Error code = ",GetLastError());
         return(false);
        }

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

上面这一段是最简单的按钮的代码,按钮上没有显示出“中文”两个字。

下面是可以显示出“中文”的代码。

//+------------------------------------------------------------------+
//|                                                       button.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll(0,0,OBJ_BUTTON);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","Microsoft YaHei",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);
  }
//+------------------------------------------------------------------+
bool button(const long              chart_ID=0,// 图表 ID
            const string            name="Button",            // 按钮名称
            const int               sub_window=0,             // 子窗口指数
            const long              x=0,                      // X 坐标
            const long              y=0,                      // Y 坐标
            const int               width=50,                 // 按钮宽度
            const int               height=18,                // 按钮高度
            const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // 图表定位角
            const string            text="Button",            // 文本
            const string            font="Arial",// 字体
            const int               font_size=10,             // 字体大小
            const color             clr=clrBlack,             // 文本颜色
            const color             back_clr=C'236,233,216',  // 背景色
            const color             border_clr=clrNONE,       // 边界颜色
            const bool              state=false,              // 出版/发布
            const bool              back=false,               // 在背景中
            const bool              selection=false,          // 突出移动
            const bool              hidden=true,              // 隐藏在对象列表
            const long              z_order=0)                // 鼠标单击优先
  {
//--- 重置错误的值
   ResetLastError();
//--- 创建按钮
   if(ObjectFind(chart_ID,name)<0)
     {
      if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
        {
         Print(__FUNCTION__,
               ": failed to create the button! Error code = ",GetLastError());
         return(false);
        }

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
     }

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

非常简单,唯一要修改的地方就是字体,字体不要用中文的字体,同样的“微软雅黑”字体,替换成英文字体“Microsoft YaHei”。

也就是下面这行代码:

button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","Microsoft YaHei",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);

同样的,像输入框,lable文本等等有中文的地方,在字体这部分都要改成英文的字体名称。

image.png

这时就能显示出中文了,是不是超简单。

返回列表

上一篇:期货交易中的点数怎么理解?

没有最新的文章了...

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

相关文章

MT5CTP程序化交易开发视频教学

MT5CTP程序化交易开发视频教学

    近期正在录制基于MT5的EA程序化交易开发编程教学,这个教学会持续更新,有任何建议或需要帮助,都可以到论坛的这个版块交流:https://www.eab...