Поиск сообщества
Показаны результаты для тегов 'меню'.
Найдено: 1 результат
-
Друзья, подскажите пожалуйста, каким образом можно реализовать меню в стиле аккордеон как тут https://jqueryui.com/accordion/. Требования к компоненту: 1) На форму бросается этот компонент, у него есть ширина и высота. 2) В этом компоненте должны добавляться итемы, хоть в дизайнтайме, хоть в рантайме, высота которых так же задается в свойствах компонента, которая будет для всех одна 3) Должна быть свойство у компонента, которое имеет значение истина или ложь, которое означает развернуть первый элемент при запуске, или все элементы свернуты 4) Развернутым должен быть только один элемент, если кликаем (тапаем) на свернутый и при этом есть развернутый элемент, то развернутый должен свернуться, а выбранный - развернуться 5) У каждого элемента есть заголовок и изображение в виде треугольника, означающее развернут элемент или нет.\ 6) Элементы разворачиваются на всю свободную область сдвигая свернутые ниже вниз, за пределы видимой области. 7) Если элементы находятся за пределами видимой области - появляется скролл. У меня есть уже наброски, но я уверен, что я все делаю не так. Может уже кто-то задавался этим вопросом и есть уже готовое решение, хотя бы частично? При необходимости предоставлю свой г...код, но лучше не стоит)) За основу я взял TVertScrollBox, в рамках которого все и происходит. В него я пока программно создаю столько TExpander'ов, сколько мне нужно - это итемы. Вот г...код: procedure TMainForm.AccordionAddItem(IdItem, CountItems: integer; IdRubricGood, CaptionText: string); var AccordionNewItem : TExpander; begin if AccordionItems[IdItem] <> nil then AccordionItems[IdItem].Destroy; AccordionNewItem := TExpander.Create(VertScrollBox_RubricsGood); With AccordionNewItem do begin Parent := VertScrollBox_RubricsGood; Align := TAlignLayout.Top; Text := CaptionText; StyleLookup := 'Expanderstyle'; Name := 'AccordionItem'+IntToStr(IdItem); Height := MainForm.Height-170; //(CountItems * 150)+29; IsExpanded := False; TagString := IdRubricGood; StylesData['text.OnClick'] := TValue.From<TNotifyEvent>(OnMaxMinPanelItems); end; AccordionItems[IdItem] := AccordionNewItem;end; Потом еще куча кода на отловить развернутые и свернутые итемы и вставку ListBox'внутрь открытого с нужным мне контеном: procedure TMainForm.OnMaxMinPanelItems(Sender: TObject); var AccordeonSelectedItem: TExpander; I:integer; begin AccordeonSelectedItem := TExpander(FindItemParent(Sender as TFmxObject,TExpander)); ListBoxGoods.Items.Clear; for I := 1 to RubricGoodsSize do begin if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = False) then begin AccordionItems[I].BeginUpdate; RectangleRestourantHeader.Visible := False; AnimationAniIndicator(True); AccordionItems[I].IsExpanded := True; GoodList(AccordeonSelectedItem.TagString, Sender); AccordionItems[I].EndUpdate; AnimationAniIndicator(False); end else if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = True) then begin AccordionItems[I].IsExpanded := False; RectangleRestourantHeader.Visible := True; end else begin AccordionItems[I].IsExpanded := False; end; end; end; Я в отчаянии, помогите чем можете, очень нужно. Спасибо!