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

我需要写一些文本到一个paintbox,然后在OnPaint事件中执行它。 当我在方法中设置两次字体大小时,会重复调用OnPaint事件。

要亲眼看看,试试这个:

  • 创建一个新的VCL Forms应用程序
  • 在表单上放置一个油漆盒
  • 将下面的代码放在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;
    

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

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


    设置PaintBox1.Canvas.Font.Size而不是PaintBox1.Font.Size ,你的问题就解决了。

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

    链接地址: http://www.djcxy.com/p/60461.html

    上一篇: Setting the fontsize of a Paintbox causes OnPaint to be called

    下一篇: Sort(a,b) doesn not work in Dojo.dnd.source