gpt4 book ai didi

delphi - 重新绘制油漆盒不起作用

转载 作者:行者123 更新时间:2023-12-02 15:23:59 25 4
gpt4 key购买 nike

我的将图像绘制到油漆盒中的函数是从两个位置调用的,如果从 TPagecontrol pagechange 调用,它工作正常,但如果从 form.formresize(….) 调用,图像将被绘制,但随后立即绘制被重新粉刷成完全白色。不知道这个恶行是从什么顺序来的 ---

procedure TForm.FormResize(Sender: TObject);
begin
// frist image shown and then re painted white ???
PaintImage2PaintBox(……….);
end;


procedure TForm.pgc_mainmenuChange(Sender: TObject);
begin
// works fine as expected after pagecontrol tab change

PaintImage2PaintBox(……….);
end;;

procedure PaintImage2PaintBox(……….);
begin
/// draw into a PaintBox
end;

最佳答案

您无法自己调用绘画框 OnPaint 事件处理程序。当您这样做时,油漆盒 Canvas 未正确准备。为了强制绘画框重新绘画,您需要调用 InvalidateRepaint 方法。像这样:

PaintBox1.Invalidate;

PaintBox1.Repaint;

调用Invalidate 会导致异步重画。该控件被标记为,当消息队列接下来为空时,将合成一个WM_PAINT消息,并且该控件将被重新绘制。

调用Repaint强制同步绘制周期。也就是说,将执行绘制,然后Repaint函数将返回。

除非您有特殊原因强制同步重绘,否则我建议您调用Invalidate

@Sertac 在评论中建议您的绘画代码不在 OnPaint 处理程序中。如果真是这样的话,那就是一个更大的问题了。您必须将所有绘画代码放入附加到绘画框 OnPaint 事件的事件处理程序中。

关于delphi - 重新绘制油漆盒不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com