Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 当用户调整窗体大小时,如何使组件在运行时调整大小?_Delphi_Delphi 7 - Fatal编程技术网

Delphi 当用户调整窗体大小时,如何使组件在运行时调整大小?

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

我正在使用delphi开发一个新的应用程序。我有一张叫做MainForm的表格。主窗体有3个面板:面板1、面板2和面板3。面板按从窗体顶部到窗体底部的顺序插入。Panel1 Align属性设置为alTop,Panel3 Align属性设置为alBottom。面板2“对齐”属性设置为alClient。面板2上有一个DBGrid

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


我想知道是否有可能将面板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感谢您的帮助,也很抱歉以不好的方式提出问题。你的解决方案奏效了。