如何在TCustomControl上绘制Unicode文本?没有画布还有其他选择吗?
解决方法
是的,你是对的.不过,我建议你升级到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,length(S)); end;