设置Paintbox的字体大小会导致调用OnPaint
我需要写一些文本到一个paintbox,然后在OnPaint事件中执行它。 当我在方法中设置两次字体大小时,会重复调用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