Do you have the unit "Windows" in the uses clause? In this case, the ANSI version of the DrawText function in the "Windows" unit is used which expects your string to consist of ANSI characters of your system code page --> the output is wrong. On the other hand, if you have the units "LCLIntf" and "LCLType" in the uses clause (with "Windows" removed, or after "Windows"), the call leads into the win32 widgetset routine which converts the original UTF8 string to a widestring and calls the widestring version of DrawText (DrawTextW) --> the output is correct.
uses
LCLIntf, LCLType
, Windows // Comment out Windows, or move it before LCLIntf, and the output will be correct
;
procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
s: string;
begin
R := ClientRect;
s := '間行連知公教物最掲逮山訪襲駆 Λορεμ ιπσθμ δολορ σιτ αμετ';
DrawText(Canvas.Handle, PChar(s), Length(s), R, DT_LEFT);
end;