В общем случае располагаете три контейнера (тип - на ваше усмотрение, что больше нравится, например ListView или ScrollBox с вложенными кнопками) с Align := TAlignLayout.Left
- самый левый это зона с флагами
- средний элементы супы/напитки/т.д., устанавливаете начальную ширину 0 и добавляете анимацию для ширины
- правый это элементы рассольник/еще суп/т.д., устанавливаете начальную ширину 0 и добавляете анимацию для ширины
Далее, при нажатии на флаг в левом контейнере запускаете анимацию увеличения ширины среднего контейнера (перед этим заполняете средний контейнер нужными элементами меню). Получаете эффект раскрытия. При повторном нажатии на флаг инвертируете анимацию и запускаете, получаете эффект скрытия
Аналогично для правого контейнера.
Понятно, что нужно будет реализовать аналогичную логику динамического формирования элементов, а также скрытия правого контейнера при скрытии среднего, но думаю, что общая идея реализации вашей задачи понятна.