设置Paintbox的字体大小会导致调用Paint

时间:2010-07-05 14:05:00

标签: delphi graphics onpaint

我需要将一些文本写入paintbox,我在OnPaint事件中执行此操作。当我在方法中设置fontsize 两次时,会重复调用OnPaint事件。

要亲眼看看,请尝试以下方法:

  1. 创建新的VCL表单应用程序
  2. 在表单上放置一个颜料盒
  3. 将以下代码放在OnPaint事件中:
  4. procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      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; 
    end;
    

    当你运行应用程序时,你会在paintbox上看到一条“跳”的线。但是,如果删除设置fontsize的一行或两行,您将看到一条固定的行。

    为什么会发生这种情况,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:7)

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

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