master webs Опубликовано 13 мая, 2016 Поделиться Опубликовано 13 мая, 2016 Добрый день в приложении использую 5 фреймов суть вопроса мне нужно создавать их всех один раз при повторном обращении менять видимость фрейма все скрываю оставляю один нужный (при переходе по пунктам меню) сейчас использую процедуру взятую с форума procedure TForm1.TabItemNext(ANextFrame: TFrameClass); begin FFrame.DisposeOf; FFrame := nil; FFrame := ANextFrame.Create(Self); FFrame.Parent := Panel1; FFrame.Name:=ANextFrame.UnitName; FFrame.Align := TAlignLayout.Client; MultiView1.HideMaster; end; пробовал вариант создавать каждый фрейм в отдельном контроле и потом просто менять видимость самого контрола а не фрейма но такой вариант не подходит так как мне в нужный момент нужно удалить все фреймы кроме 1 подскажите как можно поступить Цитата Ссылка на комментарий
0 kami Опубликовано 13 мая, 2016 Поделиться Опубликовано 13 мая, 2016 5 минут назад, master webs сказал: мне нужно создавать их всех один раз 5 минут назад, master webs сказал: в нужный момент нужно удалить все фреймы кроме 1 Небольшое противоречие, нет? А так - синглтон вам поможет Цитата Ссылка на комментарий
0 master webs Опубликовано 13 мая, 2016 Автор Поделиться Опубликовано 13 мая, 2016 15 минут назад, kami сказал: Небольшое противоречие, нет? А так - синглтон вам поможет есть момент когда нужно будет удалить все фреймы и потом по запросу создать каждый отдельно Цитата Ссылка на комментарий
0 DirtyBorov Опубликовано 31 июля, 2016 Поделиться Опубликовано 31 июля, 2016 (изменено) Сначала попытался объяснить как я переключаю фреймы, но потом подумал и решил что проще будет сделать пример (см. приложенный архив). Мне не очень нравится идея создавать все фреймы сразу. На мой взгляд ( и не только на мой, существует понятие MVC, MVP, MVVP), фреймы это только отображение данных, а сами данные лучше контролировать в другом месте. По этому в моем примере, есть контроллер данных (TDataModule), в котором (в реальной программе) прописана вся бизнес-логика. Во фреймах же и в формах, только код, который относится непосредственно к этому фрейму (форме). Еще небольшой совет: контроллер совсем не обязательно должен быть TDataModule, это может быть обычный класс - синглтон. Но я традиционно использую его, потому что в реальной программе он может служить контейнером для каких то невизуальных компонентов. Например в него я помещаю компонент TfgApplicationEvents из набора FGX(http://fire-monkey.ru/forum/177-fgx/) от Ярослава Бровина. Если в программе используется база данных, то я не помещаю в контроллер компоненты доступа к данным. Для этого я делаю отдельный модуль. Так же, рекомендую посмотреть в сторону компонента TFrameStand (его можно найти в GetIt). FrameSelector.zip Изменено 31 июля, 2016 пользователем DirtyBorov Цитата Ссылка на комментарий
0 krapotkin Опубликовано 31 июля, 2016 Поделиться Опубликовано 31 июля, 2016 я практически везде использую динамически создаваемые фреймы. вообще никаких проблем не встречал главное - четко помнить, что данные должны храниться в модели данных, а интерфейс - работать с этой моделью при этом некоторые вещи в рамках программы являются глобальными синглтонами, например, объект, содержащий настройки программы и данные текущего залогиненного юзера. ну и часто - главная форма программы. код при создании фреймов не в точности, но похож на приведенный в старте темы kami 1 Цитата Ссылка на комментарий
0 DirtyBorov Опубликовано 1 августа, 2016 Поделиться Опубликовано 1 августа, 2016 11 часов назад, krapotkin сказал: я практически везде использую динамически создаваемые фреймы. вообще никаких проблем не встречал главное - четко помнить, что данные должны храниться в модели данных, а интерфейс - работать с этой моделью при этом некоторые вещи в рамках программы являются глобальными синглтонами, например, объект, содержащий настройки программы и данные текущего залогиненного юзера. ну и часто - главная форма программы. код при создании фреймов не в точности, но похож на приведенный в старте темы Совершенно согласен - динамическое создание фреймов на мой взгляд намного лучше (как и форм). К тому же, если используется модель данных вне формы (фрейма), то тогда вообще нет ни каких проблем. И чаще всего, при использовании моделей типа MVC, MVP и .т.п - код значительно упрощается! Главное становится более надежным, понятным и коротким. Можно легко и не напряженно менять или добавлять формы без вмешательства в логику. Особенно хорошо это проявляется в командной работе, когда не опытный разработчик (или новый человек в команде), может не вдаваясь в код сложной бизнес логики за пару часов прикрутить например отчет или новый view. К тому же, понятие такого подхода абстрагирует разработчика от конкретного языка. В дальнейшем такой подход можно использовать на любом языке. К сожалению архитектура Delphi часто подталкивает к "формошлепству", что в общем то не плохо работает в небольших приложениях. Но когда программа становится несколько сложней чем "Hello world", это становится проблемой. Самое печальное то, что в массе книг по Delphi как раз таки и учат формошлепству. В духе "щелкните два раза по кнопке и получите готовый обработчик события". Я не встречал ни одной книги (кроме нескольких уже довольно устаревших статей), где бы показывалось как использовать MVC или MVP в Delphi. Если не прав - ткните носом. Да, код полностью идентичный приведенный топикастером, за исключением использования дженериков. Но я и не стремился доказать что мой код лучше. Всего лишь показал как делаю я. Этот намеренно простейший шаблон приложения. Не самый лучший. Но на мой взгляд он все таки отделяет "мух от котлет" (данные от форм) и возможно кому то поможет понять что на Delphi тоже можно и нужно использовать MVC. Конечно в реальном приложении обычно все на много сложней. Хотя лично у меня есть парочка довольно мудреных приложений которые используют именно такую архитектуру и прекрасно работают, периодически претерпевая изменения без каких либо серьезных проблем. Часто слышу высказывания в духе "зачем мне усложнять? Я быстро накидаю форму с логикой и получу деньги". По своему опыту скажу - вы ошибаетесь. Да, вы быстро и легко накидаете форму, которая что то будет делать и даже как то работать. Но если вы в дальнейшем будете сопровождать свое творение, то очень скоро убедитесь в том что это полный отстой. Особенно если программа будет продолжать наращивать функционал. Не питайте иллюзий. Пишите сразу правильно - это в дальнейшем сэкономит вам время и нервы. Как говорится в одном знаменитом мульте: "лучше сейчас час потерять, зато потом за пять минут долететь" )) Цитата Ссылка на комментарий
Вопрос
master webs
Добрый день в приложении использую 5 фреймов
суть вопроса
мне нужно создавать их всех один раз при повторном обращении менять видимость фрейма все скрываю оставляю один нужный (при переходе по пунктам меню)
сейчас использую процедуру взятую с форума
procedure TForm1.TabItemNext(ANextFrame: TFrameClass); begin FFrame.DisposeOf; FFrame := nil; FFrame := ANextFrame.Create(Self); FFrame.Parent := Panel1; FFrame.Name:=ANextFrame.UnitName; FFrame.Align := TAlignLayout.Client; MultiView1.HideMaster; end;
пробовал вариант создавать каждый фрейм в отдельном контроле и потом просто менять видимость самого контрола а не фрейма но такой вариант не подходит так как мне в нужный момент нужно удалить все фреймы кроме 1
подскажите как можно поступить
Ссылка на комментарий
5 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.