Alexey Lovchikov Опубликовано 4 января, 2015 Поделиться Опубликовано 4 января, 2015 Здравствуйте, Прочитав тему http://fire-monkey.ru/topic/432-sovety-po-sozdaniiu-mobilnogo-prilozheniia-master-detail/?p=1638 решил переделать свое приложение с использованием Frame, подскажите правильно ли я его делаю Primer.zip rareMax 1 Цитата Ссылка на комментарий
Администраторы Brovin Yaroslav Опубликовано 12 января, 2015 Администраторы Поделиться Опубликовано 12 января, 2015 Добрый день, Да, выглядит достойно. Один только момент относительно использования компонента 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 будет всегда расположен поверх. rareMax 1 Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.