GridPanel在第一次调整大小时不会调整

时间:2009-05-14 08:15:50

标签: delphi resize alignment controls tgridpanel

我遇到了一个问题,即使我花了很长时间试图这样做,我也无法解决。

我通常使用GridPanel来对齐表单上的控件。然而,它有一个恼人的错误。当GridPanel对齐模式是alClient并且我最大化其父窗口时,GridPanel会调整到该窗口的新大小,但是,放置在网格上的控件不会。他们保持与窗口调整大小之前相同的位置。 它仅在第一个窗口的最大化时发生。如果首先手动调整窗口大小,则每次都可以。我认为网格在第二次调整大小事件后调整其子控件(??)。

如果遇到这个错误,GridPanel可以正常工作吗?它可能足以向它发送消息(但是什么消息?),我不知道。我尝试使用Realign,Refresh等,但他们没有帮助。

提前感谢您的帮助,

马里乌什。

5 个答案:

答案 0 :(得分:9)

啊,我也遇到过类似的问题。它可能与VCL中的大小调整问题有关。您可能想尝试the fix by Andreas Hausladen。在大多数情况下,它似乎对我有用。

答案 1 :(得分:3)

我发现了一个技巧。

在gridpanel父级的OnResize事件中,将gridpanel的宽度更改为1像素。

然后gridPanel将注意到大小已更改,然后重新排列gridpanel中的子控件..

样品在下面..

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.Width := GridPanel1.Width - 1;  // subtract 1
  GridPanel1.Width := GridPanel1.Width + 1;  // recover width by adding 1
end; 

答案 2 :(得分:3)

更改宽度/使控件无效对我不起作用(最近版本的RAD Studio更改了哪些内容?)。

无论如何,沿着这条线的类似简单的解决方法是:

procedure TForm1.FormResize(Sender: TObject);
begin
  GridPanel1.ControlCollection.BeginUpdate;
  GridPanel1.ControlCollection.EndUpdate;
end; 

答案 3 :(得分:1)

我在几个项目中也遇到过这个错误。我不确定我是如何解决的(这是我以前的雇主的项目,我再也无法访问此源代码)。我想我已经重绘/刷新了放置GridPanel的父框架或表格。

答案 4 :(得分:0)

在调整大小调整GridPanel.Invalidate的大小。 我没有测试它。我希望它能起作用。