如何绘制Unicode文本?

Lit*_*per 7 delphi canvas delphi-7

如何在TCustomControl上绘制Unicode文本?没有画布还有其他选择吗?

And*_*and 11

是的,你是对的.不过,我建议你升级到Delphi 2009或更高版本,其中VCL具有完全的Unicode支持,一切都更容易.

无论如何,你可以做到

procedure TMyControl.Paint;
var
  S: WideString;
  r: TRect;
begin
  inherited;
  r := ClientRect;
  S := 'This is the integral sign: '#$222b;
  DrawTextW(Canvas.Handle, PWideChar(S), length(S), r, DT_SINGLELINE or
    DT_CENTER or DT_VCENTER or DT_END_ELLIPSIS);
end;
Run Code Online (Sandbox Code Playgroud)

在旧版本的Delphi中(我认为.代码在我的虚拟Windows 95机器中编译Delphi 7,但我看不到文本.这是因为我认为Windows 95太旧了.)

更新

如果要支持非常旧的操作系统,如Windows 95和Windows 98,则需要使用TextOutW而不是DrawTextW,因为后者未实现(源).TextOut是那么强大那么DrawText,所以你需要手工计算的位置,如果你想中心矩形中的文本,例如.

procedure TMyControl.Paint;
var
  S: WideString;
begin
  inherited;
  S := 'This is the integral sign: '#$222b;
  TextOutW(Canvas.Handle, 0, 0, PWideChar(S), length(S));
end;
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,最好的字体是Arial Unicode MS.Lucida Sans Unicode也行.但是,当然,您不能依赖这些字体安装在最终用户的计算机上.免费的[DejaVu字体](http://en.wikipedia.org/wiki/DejaVu_fonts)很好,您可以将它们与您的应用程序一起安装. (2认同)