当用户调整表单大小时,如何在运行时调整组件大小?

PNS*_*PNS -1 delphi delphi-7

我正在使用delphi开发一个新的应用程序.我有一个名为MainForm的表单.MainForm有3个面板:Panel1,Panel2和Panel 3.面板按照从表格顶部到表格底部的顺序插入.Panel1 Align属性设置为alTop,Panel3 Align属性设置为alBottom.Panel 2 align属性设置为alClient.我在Panel2上有一个DBGrid.

问题是当用户在运行时调整表单大小时,DBGrid大小不受影响.当我更改面板2和面板3的顺序时,DBGrid的大小会随着用户更改表单大小而更改.

我想知道是否可以将面板2放在窗体的中间,并且还可以在用户更改窗体大小时更改DBGrid?

Tom*_*erg 7

在Delphi 7中对我工作正常.你没有这么说,但我假设你设置DBGrid.Align属性alClient,不是吗?
设置DBGrid.Align属性的替代方法,您可以设置DBGrid.Anchors[akLeft,akTop,akRight,akBottom](即所有四个都是true).


关于两个DBGrids的评论后编辑

如果您希望两个DBGrids都使用表单调整大小,那么我建议您跳过Panel3,将两个DBGrid置于Panel2(未对齐)并将以下OnResize事件添加到表单中:

procedure TForm1.FormResize(Sender: TObject);
begin
  DBGrid1.Left := 0;
  DBGrid1.Width := Panel2.Width -1;
  DBGrid1.Top := 0;
  DBGrid1.Height := Panel2.Height div 2-1;
  DBGrid2.Left := 0;
  DBGrid2.Width := Panel2.Width -1;
  DBGrid2.Top    := Panel2.Height div 2;
  DBGrid2.Height := Panel2.Height div 2-1;
end;
Run Code Online (Sandbox Code Playgroud)

通过上述内容,网格的高度在形状调整大小时具有相同的垂直尺寸.