加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 设置Paintbox的fontsize会导致调用OnPaint

发布时间:2020-12-15 09:06:30 所属栏目:大数据 来源:网络整理
导读:我需要写一些文本到paintbox,我在OnPaint事件中做.当我在方法中设置两次fontsize时,会重复调用OnPaint事件. 要亲眼看看,试试这个: 创建一个新的VCL Forms应用程序 在表单上放置一个paintbox 将以下代码放在OnPaint事件中: procedure TForm1.PaintBox1Paint
我需要写一些文本到paintbox,我在OnPaint事件中做.当我在方法中设置两次fontsize时,会重复调用OnPaint事件.

要亲眼看看,试试这个:

>创建一个新的VCL Forms应用程序
>在表单上放置一个paintbox
>将以下代码放在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上看到一条“跳”的线.但是,如果删除设置fontsize的一条或两条线,您将看到一条固定线.

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

解决方法

设置PaintBox1.Canvas.Font.Size而不是PaintBox1.Font.Size,你的问题将得到解决.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读