我需要将一些文本写入油漆盒,并在 OnPaint 事件中执行此操作。当我在方法中设置字体大小两次时,会重复调用 OnPaint 事件。
要亲自查看,请尝试以下操作:
过程 TForm1.PaintBox1Paint(Sender: 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;
结尾;
当您运行该应用程序时,您会在油漆盒上看到一条“跳跃”的线。但是,如果您删除设置字体大小的一行或两行,您将看到一条固定的行。
为什么会发生这种情况,我可以做些什么来解决它?
最佳答案
设置 PaintBox1.Canvas.Font.Size
而不是 PaintBox1.Font.Size
,您的问题将得到解决。
至于它为什么会发生:改变一个控件的字体属性会导致它失效并重绘,并且在重绘的情况下这样做会导致无限循环。幸运的是,绘制事件是合成的,并且优先级低于其他消息,否则您的程序将挂起。
关于delphi - 设置 Paintbox 的字体大小会导致调用 Paint,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3180096/