分配 hdc 值以调用 GetGlyphIndices(hdc,lpstr,c,pgi,l) 函数 n Delphi

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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:太好了! :)

以上是关于分配 hdc 值以调用 GetGlyphIndices(hdc,lpstr,c,pgi,l) 函数 n Delphi的主要内容,如果未能解决你的问题,请参考以下文章

Windows Gdi & CDC和HDC的区别与转换

错误 C2248:“CObject::CObject”:当我在 MFC 中调用 hDC.SelectObject 函数时,无法访问在“CObject”类中声明的私有成员

如何在 getStaticProps 中获取 slug 值以调用 api,参数为 slug

我的 hdc/hbitmap 的内存泄漏在哪里?

计算一系列值的 RGB 值以创建热图

HDC2021技术分论坛:HarmonyOS内核技术大揭秘!