Добрый день!
Думаю что "суть" здесь ни при чем. Я думал, при создании примера, об ошибке, возникшей у Вас, а не о деталях того как "раскрывается"...
Однако, если я правильно Вас понял, то Вам просто нужно заменить код процедуры в примере который я приложил к предыдущему комментарию.
код процедуры
procedure TForm2.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem);
заменить на
procedure TForm2.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem);
var
i, j : Integer;
begin
for i := 0 to TCustomListBox(Sender).Items.Count - 1 do
if TListBoxItem(TCustomListBox(Sender).ListItems[i]) <> Item then
begin
if TListBoxItem(TCustomListBox(Sender).ListItems[i]).Height <> 0 then
TListBoxItem(TCustomListBox(Sender).ListItems[i]).AnimateFloat('Height', 0, 0.3);
end else
if TListBoxItem(Item).Height = 32 then
TListBoxItem(Item).AnimateFloat('Height', TListBoxItem(Item).HelpContext, 0.3)
else
for j := 0 to TCustomListBox(Sender).Items.Count - 1 do
if TListBoxItem(TCustomListBox(Sender).ListItems[j]).Height <> 32 then
TListBoxItem(TCustomListBox(Sender).ListItems[j]).AnimateFloat('Height', 32, 0.3);
end;
И будет Вам счастье...
А уж с "высотами" - играйтесь сами, как Вам требуется.
P.S. И, кстати, поймите правильно - разбираться детально в том, что Вам нужно, Вам придется самому. Я лишь показал пример как это работает (без ошибок вроде) и, практически, так как Вам надо и в двух вариантах. А условия того как что должно "сворачиваться" и "раскрываться" поставьте сами. Мне кажется все достаточно просто и прозрачно.