代码之家  ›  专栏  ›  技术社区  ›  Svein Bringsli

设置paintbox的fontSize会导致调用onpaint

  •  3
  • Svein Bringsli  · 技术社区  · 15 年前

    我需要写一些文本到一个画盒,我在OnPaint事件中这样做。当我设置字体大小时 两次 在方法中,onpaint事件被重复调用。

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

    1. 新建VCL窗体应用程序
    2. 在窗体上放置一个漆盒
    3. 在onpaint事件中输入以下代码:
    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;
    

    当你运行应用程序时,你会看到一行“跳跃”在油漆箱上。但是,如果删除一条或两条设置字体大小的线,则会看到一条固定的线。

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

    1 回复  |  直到 15 年前
        1
  •  7
  •   mghie    15 年前

    集合 PaintBox1.Canvas.Font.Size 而不是 PaintBox1.Font.Size 你的问题会解决的。

    至于发生这种情况的原因:更改控件的字体属性将导致它失效并重新绘制,并且在执行重新绘制的情况下执行此操作将导致无限循环。幸运的是,paint事件是合成的,并且优先级低于其他消息,否则程序将挂起。