J
JacksonLiu
Unregistered / Unconfirmed
GUEST, unregistred user!
本人在编制一套软件时,需要根据Windows字体的名称和字号得到对应的以[mm]为单位的
汉字,英文字母高度与宽度,使用[Windows API]函数[GetTextExtentPoint32]可以得到
结果,但是该函数在调用时需要传入一个[Canvas]句柄,我采用如下的方法动态生成
[Canvas],总是在调用[GetTextExtentPoint32]时出现
[Canvas does not allow drawing]错误:
......
try
ACanvas:=TCanvas.Create;
......
GetTextExtentPoint32(ACanvas.Handle,PChar(AText),Length(AText),ASize);
......
finally
ACanvas.Free;
......
但是如果传入的句柄是一个窗体设计时组件的[Canvas]属性,如
PaintBox1: TPaintBox;
GetTextExtentPoint32(PaintBox1.Canvas.Handle,PChar(AText),Length(AText),ASize);
则完全正确,不知是何原因?(PaintBox1: TPaintBox;也应该是动态生成的?) 请大侠明示?
又对上述问题有无更好的方法,也请不吝赐教!
汉字,英文字母高度与宽度,使用[Windows API]函数[GetTextExtentPoint32]可以得到
结果,但是该函数在调用时需要传入一个[Canvas]句柄,我采用如下的方法动态生成
[Canvas],总是在调用[GetTextExtentPoint32]时出现
[Canvas does not allow drawing]错误:
......
try
ACanvas:=TCanvas.Create;
......
GetTextExtentPoint32(ACanvas.Handle,PChar(AText),Length(AText),ASize);
......
finally
ACanvas.Free;
......
但是如果传入的句柄是一个窗体设计时组件的[Canvas]属性,如
PaintBox1: TPaintBox;
GetTextExtentPoint32(PaintBox1.Canvas.Handle,PChar(AText),Length(AText),ASize);
则完全正确,不知是何原因?(PaintBox1: TPaintBox;也应该是动态生成的?) 请大侠明示?
又对上述问题有无更好的方法,也请不吝赐教!