Delphi 当用户调整窗体大小时,如何使组件在运行时调整大小?
我正在使用delphi开发一个新的应用程序。我有一张叫做MainForm的表格。主窗体有3个面板:面板1、面板2和面板3。面板按从窗体顶部到窗体底部的顺序插入。Panel1 Align属性设置为alTop,Panel3 Align属性设置为alBottom。面板2“对齐”属性设置为alClient。面板2上有一个DBGrid 问题是,当用户在运行时调整表单大小时,DBGrid大小不受影响。当我更改面板2和面板3的顺序时,DBGrid的大小会随着用户更改表单的大小而改变Delphi 当用户调整窗体大小时,如何使组件在运行时调整大小?,delphi,delphi-7,Delphi,Delphi 7,我正在使用delphi开发一个新的应用程序。我有一张叫做MainForm的表格。主窗体有3个面板:面板1、面板2和面板3。面板按从窗体顶部到窗体底部的顺序插入。Panel1 Align属性设置为alTop,Panel3 Align属性设置为alBottom。面板2“对齐”属性设置为alClient。面板2上有一个DBGrid 问题是,当用户在运行时调整表单大小时,DBGrid大小不受影响。当我更改面板2和面板3的顺序时,DBGrid的大小会随着用户更改表单的大小而改变 我想知道是否有可能将面板2
我想知道是否有可能将面板2放在表单的中间,并使DBGrid随着用户改变表单的大小而改变 在Delphi 7中对我很好。您没有这样说,但我假设您已将
DBGrid.Align
属性设置为alClient
,对吗?除了设置
DBGrid.Align
属性外,您还可以将DBGrid.archors
设置为[akLeft、akTop、akRight、akBottom]
(即所有四个都是true
)
关于两个DBGrid的注释后编辑 如果希望两个DBGrids都随表单调整大小,那么我建议您跳过
Panel3
,将两个DBGrids都放在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;
使用上述方法,网格的高度在调整窗体大小时垂直调整为相同大小。如果无法使用align道具,请处理面板容器的OnResize事件。@Tom这是唯一合理的解释,答案也应该是肯定的。是的,我对alClient执行了dbgrid.align属性。但当表单上有1个DBGrid组件时,它就可以正常工作。如果panel2上有一个dbgrid,panel3上有一个dbgrid,它将不起作用!尽管每个面板上的所有dbgrids align属性都设置为alClient,但您在问题中只提到了一个DBGrid。但是,当
DBGrid.Align
设置为alClient
时,Panel2
上的网格会根据表单大小的变化而变化,而与Panel3
上的组件无关。当然,Panel3
在调整表单大小时不会改变,因为它的Align
属性是alBottom
。你需要更具体地说明什么“不起作用”。@PNS:像这样的细节对于这类问题很重要,你可以随时回答你的原始问题…@PNS这就是你必须陈述实际问题的原因。一个简单的MCVE,比如说A。dfm文件就足够了。等到你的问题得到回答,再解释你的问题是什么,这对我们来说是非常适得其反和令人沮丧的。请从中学习。DavidHeffernan@Tom感谢您的帮助,也很抱歉以不好的方式提出问题。你的解决方案奏效了。