Как пользоваться TFrame

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как пользоваться TFrame

Сообщение qivi » 22.12.2009 17:16:59

Как я понимаю при помощи компонента TFrame можно реализовать следующий принцип компоновки окна:
Справа формы узкая полоса с кнопками, при нажатии на любую из кнопок левая часть формы целиком заменяется (такое часто встречается в различных программах, очень удобно, логично, понятно).

Создал новый проект, создал для эксперимента 2 фрейма... что с этим делать дальше немогу понять. Помогите пожалуйста разобраться.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 22.12.2009 17:40:44

Для подобных вещей иногда проще пользоваться чем-то вроде TNotebook или TTabSheet при ShowTabs:=False; - можно ложит компоненты на разные вкладки и программно их переключать..
TFrame тоже можно использовать для этого, особенно если хочеться разделить по разным модулям функционал разных интерфейсов, или эти интерфейсы используються где-то ещё.

Создал новый проект, создал для эксперимента 2 фрейма... что с этим делать дальше немогу понять. Помогите пожалуйста разобраться.

Дальше надо либо создавать эти фреймы программно при щелчках по кнопкам той главной формы, либо набросать их на форму заранее (на странице Standart выбрать компонент TFrame) и только менять им в зависимости от ситуации свойство Visible. Кстати этот метод ещё иногда глюкавит в Лазарусе (например после правки оригинального фрейма изменения не отображаються в том что лежит на форме, надо или пересоздавать или я не понял чего-то)...
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 22.12.2009 18:10:46

Я создал два фрейма через "Файл=>Создать=>Фрейм", таким образом у меня в проекте одна форма и 2 фрейма... можно поподробнее как выводить фреймы на форму и как вообще ими управлять, я с этим вообще не знаком.

Для подобных вещей иногда проще пользоваться чем-то вроде TNotebook или TTabSheet при ShowTabs:=False; - можно ложит компоненты на разные вкладки и программно их переключать..


Да, но мне не нравится то что по крайней мере в виндовс невозможно полностью ликвидировать бордер компонентов TNotebook и TTabSheet.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение WAYFARER » 22.12.2009 19:14:05

qivi писал(а):Я создал два фрейма через "Файл=>Создать=>Фрейм", таким образом у меня в проекте одна форма и 2 фрейма... можно поподробнее как выводить фреймы на форму и как вообще ими управлять, я с этим вообще не знаком.
Как только вы создали фрейм, кидайте компанент на форму с палитры. Появится список доступных фреймов.
Погуглите использование фреймов в Delphi.
Вот например http://www.beluch.ru/progr/100comp/7_7.htm

Добавлено спустя 10 минут 7 секунд:
FedeX писал(а): и только менять им в зависимости от ситуации свойство Visible.

Так не хорошо получится. А если у меня их несколько десятков? Не создавать же мне их при запуске и не держать в памяти? Именно нужно программно создавать и выгружать.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Как пользоваться TFrame

Сообщение FedeX » 22.12.2009 20:13:22

Так не хорошо получится. А если у меня их несколько десятков? Не создавать же мне их при запуске и не держать в памяти? Именно нужно программно создавать и выгружать.

Я же и говорю - тут в зависимости от ситуации, мне, например, в текущем проекте важно быстро переключаться между фреймами, а на скорость загрузки содержащей их формы можно не обращать внимания, так что ваш вариант не подходит.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 20.01.2010 18:11:33

Вот ведь бывает так... откладываеш, откладываеш какой то интересующий тебя вопрос, ну вроде сложный, ну вроде надо на свежую голову, время подходящее, момент удачный... а как доходит до сути 15 минут и вопрос яйца выеденного не стоит...

Так не хорошо получится. А если у меня их несколько десятков? Не создавать же мне их при запуске и не держать в памяти? Именно нужно программно создавать и выгружать.


А как создавать и управлять ими программно?

Добавлено спустя 23 часа 53 минуты 26 секунд:
qivi писал(а):
Так не хорошо получится. А если у меня их несколько десятков? Не создавать же мне их при запуске и не держать в памяти? Именно нужно программно создавать и выгружать.


А как создавать и управлять ими программно?


Ну поделитесь пожалуйста страшной тайной! :D
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 21.01.2010 18:11:18

Код: Выделить всё
sf:=TSomeFrame.Create(MyForm);
sf.parent:=MyForm;

не?
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 21.01.2010 18:13:08

FedeX писал(а):
Код: Выделить всё
sf:=TSomeFrame.Create(MyForm);
sf.parent:=MyForm;

не?


А можно поподробнее... так сказать для чайника :oops:

То есть создаю я их по прежнему в редакторе форм, а вызываю в коде... или нет? Как определяется её расположение на форме? Как её убить (что б памянь не занимала) после использования?
Последний раз редактировалось qivi 21.01.2010 18:19:00, всего редактировалось 1 раз.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 21.01.2010 18:16:42

а что именно не понятно/не получаеться?
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 21.01.2010 18:20:03

Блин... я о том же подумал и тот пост подредактировал...

То есть создаю я их по прежнему в редакторе форм, а вызываю в коде... или нет? Как определяется её расположение на форме? Как её убить (что б память не занимала) после использования?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 21.01.2010 18:28:42

>То есть создаю я их по прежнему в редакторе форм, а вызываю в коде
да
>Как определяется её расположение на форме?
свойства Top, Left (как любой другой компонент)
>Как её убить (что б память не занимала) после использования?
тоже как любой другой компонент: методом Free
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 21.01.2010 18:31:47

Код: Выделить всё
sf:=TSomeFrame.Create(MyForm);
sf.parent:=MyForm;


А это её вызов? (У меня просто на работе нет лазаруса, ща до дому дойду буду эксперементировать)


>Как её убить (что б память не занимала) после использования?
тоже как любой другой компонент: методом Free


Уже неудобно спрашивать... но всё же... а как это выглядит? (не разу не пользовался)
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 21.01.2010 18:43:27

Вот, скорее сделать чем что-то рассказывать...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Как пользоваться TFrame

Сообщение qivi » 22.01.2010 15:27:32

FedeX. огромное тебе спасибо за помощь, а главное наверно за терпение.

Назрел ещё один вопрос, правдо не по использованию фреймов а по принципам их работы, возможно даже по принципам работы методов языка.

После компиляции и запуска твоего примера, я отследил его процес в системном мониторе, понаблюдал за работой с памятью... получается не совсем то что я ожидал. Программа запустивщись заняла (под рукой нет реальных цифр, возьму условно) 4500 Кб, после того как я нажал кнопку "вывыести/скрыть" фрейм, следовательно отработал код:
Код: Выделить всё
fr:=TFrame1.Create(self);
    fr.Parent:=self;

Занятая память увеличилась до 5200 Кб, ну всё понятно фрейм загружен в память...
Повторное нажатие кнопки, отробатывает код:
Код: Выделить всё
FreeAndNil(fr);

Фрейм исчезает, но память по прежнему остаётся на отметки 5200!!! По существу вопроса между методом свалки на форму всех фреймов и регулирование их свойством визибле и методом програмного управления, вобщемто нет значительной разницы... уже давно заметил что точно так же происходит работа с памятью в многооконных приложениях на лазарусе...

Существует ли какой то стандартный метод, который будет убивать в памяти отроботавший модуль (окно, фрейм)? Если нет, то нет ли его в планах развития Лазарус/ФПЦ?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Как пользоваться TFrame

Сообщение FedeX » 22.01.2010 15:39:15

qivi
Это не проблемы Лазаруса, это система так кеширует память. В системе есть что-то вроде определителя пиков памяти для каждого приложения, это нужно видимо для кеширования памяти для каждого приложения и следовательно ускорения его работы. В Вин7 уже не наблюдаю, но в ВинХР вроде-бы этот кеш очищался при сворачивании приложения...
Разница между способами есть и она в том, что если ты сразу создаш 100 одинаковых фреймов то у тебя памяти уйдёт на 100 одинаковых фреймов, а если ты создаш один фрейм, потом его уничтожиш и создаш второй, то он займёт память первого. В итоге твоё приложение (условно) будет требовать в сто раз меньше памяти. Другое дело если бы при кликаньи на кнопку в моей демке память всё увеличивалась и увеличивалась - это уже явная утечка памяти и о таких вещах надо сообщать в багтрекер.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

Рейтинг@Mail.ru