3

我需要将一些文本写入画框,并在 OnPaint 事件中完成。当我在方法中设置两次字体大小时,会重复调用 OnPaint 事件。

要亲自查看,请尝试以下操作:

  1. 创建一个新的 VCL Forms 应用程序
  2. 在表单上放置一个颜料盒
  3. 将以下代码放入 OnPaint 事件中:
过程 TForm1.PaintBox1Paint(发送者:TObject);
开始
  PaintBox1.Canvas.MoveTo(random(PaintBox1.Width),random(PaintBox1.Height));
  PaintBox1.Canvas.LineTo(random(PaintBox1.Width),random(PaintBox1.Height));

  PaintBox1.Font.Size := 10;
  PaintBox1.Font.Size := 12;
结尾;

当您运行该应用程序时,您会看到画框上“跳跃”了一条线。但是,如果您删除设置字体大小的一条或两条线,您将看到一条固定的线。

为什么会发生这种情况,我能做些什么来解决它?

4

1 回答 1

7

设置PaintBox1.Canvas.Font.Size而不是,PaintBox1.Font.Size您的问题将得到解决。

至于为什么会发生:更改控件的字体属性将导致它无效并重绘,并且在重绘的情况下这样做会导致无限循环。幸运的是,绘制事件是合成的,并且优先级低于其他消息,否则您的程序会挂起。

于 2010-07-05T14:11:19.453 回答