Delphi中的流体表格布局

时间:2009-11-23 05:30:15

标签: delphi layout fluid

我们开发了一款软件。在这个软件中,我们根据不同的情况在各种输入屏幕上显示和隐藏一些控件。

当我们隐藏控件时会发生的事情是该控件占用的空间保持不变,布局看起来非常糟糕。在具有更多控件的屏幕中。我们的客户不喜欢这样,并要求我们对此做些什么。

我的问题: 我们可以通过某种方式创建流体布局,以便在控件被隐藏时,其余控件会自动调整自身以填充隐藏控件所留下的空白区域,当控件显示时,它们应自动为控件让路并相应调整自己。

我知道我们可以通过编码实现这一目标,但是每个屏幕需要大量代码来调整布局。我正在寻找能够减少每个屏幕编码的东西,因为有80多个屏幕。

请建议一些方法,它可以减少错误,并且可以在每个输入屏幕中摆脱不必要的编码。

5 个答案:

答案 0 :(得分:9)

我认为您最好的选择是在运行时使用一个处理表单上vcl控件布局的组件(取决于您定义的条件)。我建议你试试Devexpress ExpressLayout Control

你可以在这里找到两个很棒的演示视频

alt text
(来源:devexpress.com

您可以查看这些features

自动管理 - 布局控件自动管理控制组和各个控件元素。你永远不会担心像素逐位定位。

表单自动调整大小 - 表单可以自动调整大小以适应其内容。

再见。

答案 1 :(得分:4)

现在,我不确定你有多复杂的布局,但我猜你可以使用TFlowPanel和/或TGridPanel。 Flowpanel可以很好地处理改变可见度的组件。我不确定gridpanel处理相同的程度......

答案 2 :(得分:1)

你动态隐藏什么样的控件,你对自动填充空间有什么意义?

我不知道它是否如此简单:在面板上放置控件,并使用align alTop / alClient / alBottom。隐藏面板时,所有其他面板将自动向上移动。 但有一个问题:如果你想再次显示一个面板,面板的顺序有时会被搞砸......可以通过手动设置.Top属性来修复,或者通过设置来固定.Height:= 1;

答案 3 :(得分:0)

我对复杂布局的处理实际上是将它分成几个标签。这有两个好处。它简化了表单布局,并允许您根据其他选项卡中的选项显示和隐藏整个选项卡。

答案 4 :(得分:0)

Raize Components有一个TRzFlowPanel UI组件。完全是你想要的。

  

使用TRzFlowPanel在表单上放置一个空的流程图。传统面板和流程面板之间的主要区别在于控件的放置方式。使用传统面板,可以将控件(如按钮)放在特定位置。您可以使用鼠标将该控件自由移动到面板内的任何位置。在流程面板中,无论您将鼠标放在何处,每个控件都放置在特定位置。自动位置由FlowStyle属性控制。例如,使用LeftRightTopBottom的默认FlowStyle属性,您添加到流面板的第一个控件将捕捉到左上角。您添加的第二个控件将捕捉第一个控件旁边的按钮,依此类推。