Windows APIメモ TextOutW ExtTextOutW DrawTextW
Windows APIのメモ。
TextOutW ExtTextOutW DrawTextW。
procedure TForm1.Button1Click(Sender: TObject);
var
lrc_Rect: TRect;
ls_Text: WideString;
begin
ls_Text := '';
ls_Text := ls_Text + WideChar($BBF8) + WideChar($C548); //미안
Image1.Canvas.Font.Assign(Edit1.Font);
Image2.Canvas.Font.Assign(Edit1.Font);
Image3.Canvas.Font.Assign(Edit1.Font);
Image1.Canvas.FillRect(Image1.ClientRect);
TextOutW(Image1.Canvas.Handle, 0, 0, PWideChar(ls_Text), Length(ls_Text));
Image2.Canvas.FillRect(Image2.ClientRect);
lrc_Rect := Image2.ClientRect;
DrawTextW(Image2.Canvas.Handle, PWideChar(ls_Text), -1, lrc_Rect,
DT_NOPREFIX);
Image3.Canvas.FillRect(Image3.ClientRect);
ExtTextOutW(Image3.Canvas.Handle, 0, 0, 0, @lrc_Rect, PWideChar(ls_Text),
Length(ls_Text), nil);
end;
ハングルだけの文字列を出力した場合TextOutWとExtTextOutWは文字化けします。
DrawTextWはちゃんと表示します。
ただしFontのNameが'MS UI Gothic'の場合はどれもちゃんと表示されます。
反対に'MS Pゴシック'の場合はどれも文字化けします。
さらにフォントのCharsetプロパティに以下の四つを指定するとどれもちゃんと表示されます。
CHINESEBIG5_CHARSET
GB2312_CHARSET
HANGEUL_CHARSET
THAI_CHARSET
またハングルにひらがなや漢字などが混じるとどれもちゃんと表示されます。
半角アルファベットや半角数字・記号などが混じっただけでは文字化けは直りません。
#13などの制御文字が混じるとちゃんと表示されます。
ややこしいです。
なので文字列の出力にはDrawTextW推奨。