如何绘制Unicode文本?

时间:2011-04-30 09:01:11

标签: delphi canvas delphi-7

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

1 个答案:

答案 0 :(得分: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;

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

<强>更新

如果要支持非常旧的操作系统,例如Windows 95和Windows 98,则需要使用TextOutW而不是DrawTextW,因为后者未实现(source)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;