分配 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使用Write
和Writeln
。您是否正在使用这些程序?它们只能在控制台应用程序中使用(或者当您使用旧版 Pascal I/O 时)。它们不能在 GUI 应用程序中使用(除非您使用传统的 Pascal I/O)。我怀疑这是你的问题。但是你当然不需要它们;它们仅用于快速和肮脏的输出/测试。您可以改用ShowMessage
。
@Rati2019:太好了! :)以上是关于分配 hdc 值以调用 GetGlyphIndices(hdc,lpstr,c,pgi,l) 函数 n Delphi的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2248:“CObject::CObject”:当我在 MFC 中调用 hDC.SelectObject 函数时,无法访问在“CObject”类中声明的私有成员