[BUG] MT5 Build 5440 (21 Nov 2025): Critical GUI Rendering Issue in Custom MQL Applications - page 2

 
I would like to add this bug as well, as it is related to font selection:


https://www.mql5.com/en/forum/367839/page12#comment_58116442
MT5/mql5 reported and confirmed bugs.
MT5/mql5 reported and confirmed bugs.
  • 2024.06.24
  • www.mql5.com
I will use this topic to post reported bugs to Metaquotes in a centralized place. Please DON'T POST here without contacting me in private firstly...
 
Vladislav Andruschenko # :

I would also like to report that, starting from build 5445 , the terminal is no longer able to display Chinese, Korean, or Japanese characters inside the same expert panel.

In previous builds (including 5430 ), CJK characters were rendered correctly through the standard Windows fallback fonts.
However, in build 5445 these characters now appear as empty boxes or are not displayed at all.

This affects:

  • Chinese (Simplified / Traditional)

  • Korean Hangul

  • Japanese (Hiragana / Katakana / Kanji)

Again, no changes were made to the script or the font settings — only the terminal build has changed.

It seems that build 5445 introduced a change in the rendering engine that breaks Unicode and fallback fonts, especially for complex and multi-byte languages.



Thank you. This problem is solved!!!

 

Something is still broken in the new builds.

The chart is not showing under 100% transparent canvas.

Here is the pic:


Some artefacts can be seen, but not the chart... 

Also, if the transparency is not 100% (alfa!=0), the chart is visible...

 

Like this

canvas 2


Pseudocode for transparency and canvas colors is as following

//===============
const uchar alfa = (uchar)((100.0-inpDashboardTransparency)*(double)UCHAR_MAX/100.0);
//===============

//===============
const uint clr = ::ColorToARGB(clrWhite,alfa);
//===============

//===============
   cArray::Initialize(this.CanvasData,clr);
//===============

//===============
   ::ResourceCreate(this.ResourceName(),this.CanvasData,(uint)this.Size.Width.Get(),(uint)this.Size.Height.Get(),0,0,this.Size.Width.Get(),COLOR_FORMAT_ARGB_RAW);
//=============== 
 
Andrey Barinov #:

Like this


Pseudocode for transparency and canvas colors is as following

Please post code that compiles to reproduce this issue.

I can't, build 5462.


 
Alain Verleyen #:

Please post code that compiles to reproduce this issue.

I can't, build 5462.


b5463

canvas


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
   {
//===============
   const string canvasname   = "testcanvas";
   const string resoursename = "::"+canvasname+".bmp";
   const uint width          = 500;
   const uint height         = 500;
   const uchar alfa          = 0;
   const uint clr            = ::ColorToARGB(clrWhite,alfa);
//===============

//===============
   uint canvasdata[];
   ::ArrayResize(canvasdata,width*height,0);
   ::ArrayInitialize(canvasdata,clr);
//===============

//===============
   ::ResourceCreate(resoursename,canvasdata,width,height,0,0,width,COLOR_FORMAT_ARGB_RAW);
//===============

//===============
   ::ObjectCreate(0,canvasname,OBJ_BITMAP_LABEL,0,0,0);
//===============

//===============
   ::ObjectSetInteger(0,canvasname,OBJPROP_ZORDER,0);
   ::ObjectSetInteger(0,canvasname,OBJPROP_BACK,false);
   ::ObjectSetInteger(0,canvasname,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ::ObjectSetInteger(0,canvasname,OBJPROP_SELECTABLE,true);
   ::ObjectSetInteger(0,canvasname,OBJPROP_SELECTED,true);
   ::ObjectSetInteger(0,canvasname,OBJPROP_STATE,false);
   ::ObjectSetInteger(0,canvasname,OBJPROP_HIDDEN,true);
   ::ObjectSetString(0,canvasname,OBJPROP_TOOLTIP,NULL);
   ::ObjectSetInteger(0,canvasname,OBJPROP_XDISTANCE,100);
   ::ObjectSetInteger(0,canvasname,OBJPROP_YDISTANCE,100);
   ::ObjectSetInteger(0,canvasname,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ::ObjectSetString(0,canvasname,OBJPROP_BMPFILE,0,resoursename);
   ::ObjectSetString(0,canvasname,OBJPROP_BMPFILE,1,resoursename);
//===============

//===============
   ::ObjectSetInteger(0,canvasname,OBJPROP_XSIZE,width);
   ::ObjectSetInteger(0,canvasname,OBJPROP_YSIZE,height);
//===============

//===============
   ::ChartRedraw(0);
   ::ChartRedraw(0);
//===============

   return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 
Andrey Barinov #:

b5463


What are you chart settings ?

 
Alain Verleyen #:

Strange...

move it. I mean move the canvas
 
Andrey Barinov #:
move it. I mean move the canvas
Same, no problem on my side.
 
Alain Verleyen #:
Same, no problem on my side.

Can you please, try this one

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
   {
   ::EventSetTimer(1);
   
//===============
   const string canvasname   = "testcanvas";
   const string resoursename = "::"+canvasname+".bmp";
   const uint width          = 500;
   const uint height         = 500;
   const uchar alfa          = 0;
   const uint clr            = ::ColorToARGB(clrWhite,alfa);
//===============

//===============
   uint canvasdata[];
   ::ArrayResize(canvasdata,width*height,0);
   ::ArrayInitialize(canvasdata,clr);
//===============

//===============
   ::ResourceCreate(resoursename,canvasdata,width,height,0,0,width,COLOR_FORMAT_ARGB_RAW);
//===============

//===============
   ::ObjectCreate(0,canvasname,OBJ_BITMAP_LABEL,0,0,0);
//===============

//===============
   ::ObjectSetInteger(0,canvasname,OBJPROP_ZORDER,0);
   ::ObjectSetInteger(0,canvasname,OBJPROP_BACK,false);
   ::ObjectSetInteger(0,canvasname,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ::ObjectSetInteger(0,canvasname,OBJPROP_SELECTABLE,true);
   ::ObjectSetInteger(0,canvasname,OBJPROP_SELECTED,true);
   ::ObjectSetInteger(0,canvasname,OBJPROP_STATE,false);
   ::ObjectSetInteger(0,canvasname,OBJPROP_HIDDEN,true);
   ::ObjectSetString(0,canvasname,OBJPROP_TOOLTIP,NULL);
   ::ObjectSetInteger(0,canvasname,OBJPROP_XDISTANCE,100);
   ::ObjectSetInteger(0,canvasname,OBJPROP_YDISTANCE,100);
   ::ObjectSetInteger(0,canvasname,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);
   ::ObjectSetString(0,canvasname,OBJPROP_BMPFILE,0,resoursename);
   ::ObjectSetString(0,canvasname,OBJPROP_BMPFILE,1,resoursename);
//===============

//===============
   ::ObjectSetInteger(0,canvasname,OBJPROP_XSIZE,width);
   ::ObjectSetInteger(0,canvasname,OBJPROP_YSIZE,height);
//===============

//===============
   ::ChartRedraw(0);
//===============

   return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer(void)
   {
   ::ChartRedraw(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+


This is what I have...

bug