在Wingdings字体中访问符号

时间:2016-12-28 09:38:29

标签: delphi unicode fonts

我正在尝试将符号对话框中Microsoft Word所示的Wingdings字体中的符号打印为字符代码129到138的符号(' 1'到' 10'圆圈')和140到149(白色' 1'到' 10'在黑色圆圈')但只有那些' 1',白色' 2',white' 4' &安培;白色' 5'如果显示正确,出现在打印列表中的其他符号(包括位置1到20)将显示为矩形。

以下代码使用Delphi 5和Rave Reports 4.0(pre-Unicode)按预期工作,但是使用Delphi 10.1和Rave 11.0.12描述失败;

 with Sender as TBaseReport do
 begin
      PushFont;
      SetFont('Wingdings', 10);
      FontCharSet := SYMBOL_CHARSET;
      if NoteNo < 11 then
         {0 - 10 = white (0) - (10).}
         PrintTab(char(128 + NoteNo))
      else
          if NoteNo < 21 then
             {11 - 20 = black (1) - (10).}
             PrintTab(char(128 + 1 + NoteNo))
          else

我假设现在处于Unicode时代,我没有正确地逐步完成字符集,但由于我的无知,我不确定如何更改此代码以便访问正确的符号。

1 个答案:

答案 0 :(得分:1)

不了解报告的特性,但这个示例在现代Delphi版本中有效(如果使用Char而不是AnsiChar则显示空矩形)

var
  i: integer;
begin
  Canvas.Font.Name := 'Wingdings';
  Canvas.Font.Charset := SYMBOL_CHARSET;
  for i := 128 to 128 + 21 do
    Canvas.TextOut(0, 20 * (i - 128), AnsiChar(i));