【问题标题】:Accessing Symbols In Wingdings Font访问 Wingdings 字体中的符号
【发布时间】:2016-12-28 09:38:28
【问题描述】:

我正在尝试将 Microsoft Word 在“符号”对话框中显示的 Wingdings 字体中的符号打印为字符代码为 129 到 138(圆圈中的“1”到“10”)和 140 到 149(白色“黑色圆圈中的 1' 到 '10')但只有 '1'、白色 '2'、白色'4' 和白色 '5' 的符号正确显示,打印列表中出现的其他符号覆盖位置 1 到 20显示为一个矩形。

以下代码使用 Delphi 5 和 Rave Reports 4.0(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 时代,我没有正确地遍历字符集,但是由于我的无知,我不确定应该如何更改此代码以便访问正确的符号。

【问题讨论】:

标签: delphi unicode fonts


【解决方案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));

【讨论】:

  • 看准了!感谢您为我的问题提供如此快速而准确的解决方案。工作一种享受。 8^) 一直在学习...
  • 我假设上面的代码也应该有一个隐式的字符串转换警告,所以它应该在西方 (CP-1252) 代码页上正常工作,但可能不适用于其他代码页。我强烈建议对其进行测试
  • 我在 1251 签到。我不知道 PrintTab 是如何工作的。
猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2015-03-26
  • 1970-01-01
  • 2014-02-22
  • 2013-11-21
相关资源
最近更新 更多