如何在TCustomControl上绘制Unicode文本?没有画布还有其他选择吗?
答案 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;