我已经离开 Delphi 几年了,从事 Web 应用程序。
我已经习惯了,在 HTML 中只是声明连续的<div> ... </div>并将它们放在彼此下方,间距由 CSS 提供。
我想做一个 Delphi 应用程序,在其中收集数据,假设它是关于电影的数据。最初,我会为每个 设置一个面板,只显示标题。如果单击一个,它将展开以显示演员、导演、情节摘要等。单击另一个,第一个将缩小,新的将展开(最大一个展开;再次单击该以缩小它)。
所以,我有两个布局问题:1)计算.top每个面板的初始值和 2)在点击不同的面板时重新计算。
当然,我非常有能力手动编码所有这些,但这似乎很乏味且容易出错。
有没有可接受的方法来做到这一点?Delphi 自带的 VCL 组件?我应该在https://softwarerecs.stackexchange.com/上询问3rd 方 VCL 组件吗?
最接近的 VCL 控件可能是TCategoryPanelGroup,它由垂直对齐的可扩展面板 ( TCategoryPanel) 组成。
该控件没有“autocollapsepanels”或“maxexpandedpanelcount”属性,但您可以使用一些简单的代码来实现所需的行为。例如,下面的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;
Run Code Online (Sandbox Code Playgroud)
您可以将AlignWithMargins面板的属性设置为 true,然后使用Margins面板的属性调整间距。