0

我在 Form OnResize 事件上放置了一些代码。但它似乎只在调整大小较大时才调用事件。有什么办法可以改变这个吗?

说我有

procedure TForm1.Resize(Sender: TObject);
begin
  RePaint();
end

每次重新调整表单大小(大或小)时,我都想运行重绘。我想您可以添加一个检查宽度/高度的检查,但如果您要这样做,为什么还要使用事件调整大小?除了调整大小之外,也许还有另一个事件可以同时进行?谢谢格伦

4

2 回答 2

3

这里有两个问题。

首先,OnResize当窗体在任一方向调整大小时触发。时期。

其次,为什么当表格变小时Repaint 不起作用,可能是因为你自己画的。正常情况下,只Canvas.Cliprect需要重新粉刷即可。当表格变小时,显示区域不变,剪切区域为空。毕竟,没有比以前更多的东西来画了。当表单在一个方向变大时,会发生类似的事情:剪切区域仅包含添加到表单表面的部分。同样,之前显示的区域保持不变并且没有更新。只有当表格向两个方向扩展时,剪裁区域就不能再由一个矩形组成,所以它才成为完整的曲面。

您的解决方案是通过调用Invalidate(或Update在必须立即重新绘制时)通知 Windows 在任何调整大小时重新绘制表单的全部内容,并在OnPaint事件中执行您的自定义绘制。

于 2012-08-02T10:37:39.443 回答
1

OnResize 事件在以任何方式调整窗体大小时触发,尽管它比以前更大或更小。

为了证明这一点,创建一个新项目,将备忘录放在一个干净的表单上,并将此代码添加到 OnResize 事件:

procedure TForm1.FormResize(Sender: TObject);
begin
  Memo1.Lines.Add(Format('%d,%d', [Width, Height]));
end;

执行您的项目,并拖动表单的边缘以使其变大和变小,您会注意到它总是被触发,以及事件被触发的次数。

另请注意,表单有一个 OnPaint 事件,这可能就是您所追求的。

于 2012-08-02T07:21:03.557 回答