This is because of internal limit: for longer length, program doesn't calculate width of each char in a line, and paints all CJK chars as normal width (100%).
Constant can be changed in the source code.
But.... this const is 1024, not 501.
I checked with CJK text: only after 1024 length (line with CJK and Eng chars), CJK become narrow.
atstringproc.pas
const
//if line is longer - all line chars will be rendered in normal-width (100%) cells
//so all CJK chars (width 190%) will overlap by design
cMaxFixedArray = 1024;