Canvas.TextWidth不返回正确的值

del*_*phi -2 delphi firemonkey

我正在写delphi中的TImage组件的画布.我正在使用Canvas.TextWidth但是当我更改字符串的字体大小时,此函数Canvas.textWidth返回相同的值.

我正在研究Delphi xe6

Del*_*ics 5

我怀疑您在代码中的某个位置使用了错误的Canvas,因为在原始且简单的测试用例中,TImage Canvas似乎没有出现意外行为.例如,在表单上删除TImage并将其添加到表单OnCreate事件:

Image1.Canvas.Font.Size := 10;
Caption := IntToStr(Image1.Canvas.TextWidth('FOO'));

Image1.Canvas.Font.Size := 24;
Caption := Caption + ' should be < ' + IntToStr(Image1.Canvas.TextWidth('FOO'));
Run Code Online (Sandbox Code Playgroud)

对于较小的Font.Size,您将获得较小的初始TextWidth.

您很可能是在另一个Canvas(表单?)上设置Font.Size.与其他一些组件(例如TPanel)不同,TImage不会"继承" 任何父控件或表单的Font.

确保您的代码始终使用正确的Canvas.