我在 Form OnResize 事件上放置了一些代码。但它似乎只在调整大小较大时才调用事件。有什么办法可以改变这个吗?
说我有
procedure TForm1.Resize(Sender: TObject);
begin
RePaint();
end
每次重新调整表单大小(大或小)时,我都想运行重绘。我想您可以添加一个检查宽度/高度的检查,但如果您要这样做,为什么还要使用事件调整大小?除了调整大小之外,也许还有另一个事件可以同时进行?谢谢格伦
我在 Form OnResize 事件上放置了一些代码。但它似乎只在调整大小较大时才调用事件。有什么办法可以改变这个吗?
说我有
procedure TForm1.Resize(Sender: TObject);
begin
RePaint();
end
每次重新调整表单大小(大或小)时,我都想运行重绘。我想您可以添加一个检查宽度/高度的检查,但如果您要这样做,为什么还要使用事件调整大小?除了调整大小之外,也许还有另一个事件可以同时进行?谢谢格伦
这里有两个问题。
首先,OnResize
当窗体在任一方向调整大小时触发。时期。
其次,为什么当表格变小时Repaint
不起作用,可能是因为你自己画的。正常情况下,只Canvas.Cliprect
需要重新粉刷即可。当表格变小时,显示区域不变,剪切区域为空。毕竟,没有比以前更多的东西来画了。当表单在一个方向变大时,会发生类似的事情:剪切区域仅包含添加到表单表面的部分。同样,之前显示的区域保持不变并且没有更新。只有当表格向两个方向扩展时,剪裁区域就不能再由一个矩形组成,所以它才成为完整的曲面。
您的解决方案是通过调用Invalidate
(或Update
在必须立即重新绘制时)通知 Windows 在任何调整大小时重新绘制表单的全部内容,并在OnPaint
事件中执行您的自定义绘制。
OnResize 事件在以任何方式调整窗体大小时触发,尽管它比以前更大或更小。
为了证明这一点,创建一个新项目,将备忘录放在一个干净的表单上,并将此代码添加到 OnResize 事件:
procedure TForm1.FormResize(Sender: TObject);
begin
Memo1.Lines.Add(Format('%d,%d', [Width, Height]));
end;
执行您的项目,并拖动表单的边缘以使其变大和变小,您会注意到它总是被触发,以及事件被触发的次数。
另请注意,表单有一个 OnPaint 事件,这可能就是您所追求的。