指定hdc值以调用getGlyphIndex(hdc、lpstr、c、pgi、l)函数n Delphi

指定hdc值以调用getGlyphIndex(hdc、lpstr、c、pgi、l)函数n Delphi,delphi,fonts,gdi,Delphi,Fonts,Gdi,关于使用GetGlyphIndexs函数获取字符集,有一个示例代码,但它没有说明如何调用它,特别是如何将字体分配给dc。有人能帮忙吗?在VCL中,TCanvas.Handle是画布的HDC 例如,TBitmap具有Canvas.Handle。主窗体还有一个Canvas.Handle 或 谢谢在第一个示例中,我在bm.Font.Name:=“Segoe UI”处得到一个错误,表示字体是一个未清除的标识符,在第二个示例中调用GetGlyphIndicesWCanvas.Handle。。。。出现错误E

关于使用GetGlyphIndexs函数获取字符集,有一个示例代码,但它没有说明如何调用它,特别是如何将字体分配给dc。有人能帮忙吗?

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

例如,TBitmap具有Canvas.Handle。主窗体还有一个Canvas.Handle


谢谢在第一个示例中,我在bm.Font.Name:=“Segoe UI”处得到一个错误,表示字体是一个未清除的标识符,在第二个示例中调用GetGlyphIndicesWCanvas.Handle。。。。出现错误EINOURROR并显示消息“I/O错误105”。你能帮我解决这些问题吗?@Rati2019:对不起,我弄错了。我忘了画布没有测试代码。当然,它应该是bm.Canvas.Font.Name。另一个问题我无法帮助您,除非我有权访问您正在使用的完整代码。在这种情况下,您引用的错误消息是非常意外的。我看到链接的A使用Write和Writeln。您是否正在使用这些程序?它们只能在控制台应用程序中使用,或者在您使用传统Pascal I/O时使用。除非您使用传统Pascal I/O,否则它们不能在GUI应用程序中使用。我怀疑这是您的问题。但你当然不需要它们;它们仅用于快速且不干净的输出/测试。您可以改用ShowMessage。@Rati2019:太好了!:
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;