Добрый день,
Да, выглядит достойно. Один только момент относительно использования компонента TMultiView:
Он создает дополнительный контрол (TShadowedOverlayLayout), который перехватывает события касаний для определения момента выдвижения с края формы. Поэтому для этого контрола важно всегда находится поверх всех контролов формы. В тот момент, когда вы подключаете фрейм, фрейм по сути становится BringToFront и перекрывает TShadowedOverlayLayout и блокирует выдвижение TMultiView.
Чтобы этого избежать есть два варианта:
Первый вариант, дополнительно обновить выравнивание TMultiView в момент прикрепления фрейма:
procedure TfmMain.TabItemNext(ANextFrame: TFrameClass);
begin
FFrame.DisposeOf;
FFrame := nil;
FFrame := ANextFrame.Create(Self);
FFrame.Parent := Self;
FFrame.Align := TAlignLayout.Client;
// Если TMultiVIew использует Drawer режим, то перемещает контрол перехвата на верх.
if mvMenu.Presenter is TMultiViewDrawerBasePresentation then
TMultiViewDrawerBasePresentation(mvMenu.Presenter).DetailOverlay.BringToFront;
mvMenu.HideMaster;
end;
Второй вариант, является в более хитрой комбинации TMultiView.TargetControl и фреймов и не требует дополнительно обращаться к drawer представлению TMultiView:
Размещаем в корне формы TPanel или TLayout.
Фрейм размещаем в TPanel или TLayout (см. 1 пункт).
procedure TfmMain.TabItemNext(ANextFrame: TFrameClass);
begin
FFrame.DisposeOf;
FFrame := nil;
FFrame := ANextFrame.Create(Self);
FFrame.Parent := Panel1; // <-- а при втором подходе размещаем фрейм в дополнительном контейнере
FFrame.Align := TAlignLayout.Client;
mvMenu.HideMaster;
end;
TMutliView при загрузке представления (смены режима отображения) размещает TShadowedOverlayLayout в корне формы и отображает его по верх всех контролов формы. При использовании панели или слоя, TShadowedOverlayLayout будет всегда расположен поверх.