【问题标题】:Assigning hdc value to call GetGlyphIndices(hdc,lpstr,c,pgi,l) function n Delphi分配 hdc 值以调用 GetGlyphIndices(hdc,lpstr,c,pgi,l) 函数 n Delphi
【发布时间】:2020-02-17 10:55:13
【问题描述】:

How to check which character sets (codepages) font supports (has letters for)? 中有一个关于使用 GetGlyphIndices 函数获取字符集的示例代码,但它没有说明如何调用它,特别是如何为 dc 分配字体。有人可以帮忙吗?

【问题讨论】:

    标签: delphi fonts gdi


    【解决方案1】:

    在 VCL 中,TCanvas.Handle 是画布的 HDC。

    例如,TBitmap 具有 Canvas.Handle。您的主表单也有一个Canvas.Handle

    var
      bm: TBitmap;
    begin
      bm := TBitmap.Create;
      try
        bm.Canvas.Font.Name := 'Segoe UI';
        // Now you can use bm.Canvas.Handle as your HDC value
      finally
        bm.Free;
      end;
    

    procedure TForm1.FormPaint(Sender: TObject);
    begin
      Canvas.Font.Name := 'Segoe UI';
      // Canvas.Handle is your HDC
    end;
    

    【讨论】:

    • 谢谢。在第一个示例中,我在“bm.Font.Name := 'Segoe UI'”处收到错误,说字体是未清除的标识符,在第二个示例中调用 GetGlyphIndicesW(Canvas.Handle, ....) 上升错误“带有消息‘I/O 错误 105’的 EInOutError”。你能帮忙解决这些问题吗?
    • @Rati2019:对不起,我的错误。我忘记了Canvas(没有测试代码)。当然应该是bm.Canvas.Font.Name。除非我可以访问您正在使用的完整代码,否则我无法帮助您解决另一个问题。 (在这种情况下,您引用的错误消息非常出乎意料。)
    • 我看到链接的A使用WriteWriteln。您是否正在使用这些程序?它们只能在控制台应用程序中使用(或者当您使用旧版 Pascal I/O 时)。它们不能在 GUI 应用程序中使用(除非您使用传统的 Pascal I/O)。我怀疑这是你的问题。但是你当然不需要它们;它们仅用于快速和肮脏的输出/测试。您可以改用ShowMessage
    • @Rati2019:太好了! :)
    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 2018-07-16
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多