Delphi中垂直面板的自动布局

时间:2016-04-01 20:09:18

标签: delphi layout vcl

我已经离开Delphi几年了,做了网络应用程序。

我已经习惯使用HTML,只是声明连续的<div> ... </div>并将它们放在彼此之下,并由CSS提供间距。

我想做一个Delphi应用程序,我有一组数据,让我们说出有关电影的数据。最初,我会为每个人设一个小组,只显示标题。如果你单击一个,它将展开以显示演员,导演,情节摘要等。点击另一个,第一个将收缩&amp;新的扩展(扩展最多一个;再次单击那个以缩小它)。

所以,我有两个布局问题:1)计算每个面板的初始.top和2)在点击不同的面板时重新计算。

当然,我非常有能力手动编写所有这些内容,但它看起来很乏味且容易出错。

有可接受的方法吗? Delphi附带的VCL组件?我应该在https://softwarerecs.stackexchange.com/询问第三方VCL组件吗?

1 个答案:

答案 0 :(得分:4)

最接近的VCL控制可能是TCategoryPanelGroup,它由垂直对齐的可扩展面板(TCategoryPanel)组成。

该控件没有&#39; autocollapsepanels&#39;或者&#39; maxexpandedpanelcount&#39;属性,但您可以使用一些简单的代码来实现所需的行为。 例如。下面的OnExpand事件处理程序,如果附加到组中的所有类别面板,将导致展开的面板关闭其他面板。

procedure TForm1.CategoryPanelExpand(Sender: TObject);
var
  I: Integer;
begin
  if Sender is TCategoryPanel then
    for I := 0 to CategoryPanelGroup1.Panels.Count - 1 do
      if CategoryPanelGroup1.Panels[i] <> Sender then
        TCategoryPanel(CategoryPanelGroup1.Panels[i]).Collapse;
end;


您可以将面板的AlignWithMargins属性设置为true,然后使用面板的Margins属性调整间距。