我已经离开Delphi几年了,做了网络应用程序。
我已经习惯使用HTML,只是声明连续的<div> ... </div>
并将它们放在彼此之下,并由CSS提供间距。
我想做一个Delphi应用程序,我有一组数据,让我们说出有关电影的数据。最初,我会为每个人设一个小组,只显示标题。如果你单击一个,它将展开以显示演员,导演,情节摘要等。点击另一个,第一个将收缩&amp;新的扩展(扩展最多一个;再次单击那个以缩小它)。
所以,我有两个布局问题:1)计算每个面板的初始.top
和2)在点击不同的面板时重新计算。
当然,我非常有能力手动编写所有这些内容,但它看起来很乏味且容易出错。
有可接受的方法吗? Delphi附带的VCL组件?我应该在https://softwarerecs.stackexchange.com/询问第三方VCL组件吗?
答案 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
属性调整间距。