Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 412

/ вопрос решён /

Здравствуйте, эксперты!
На форме есть компонент TPageControl на котором достаточно много TTabSheet на которых ещё больше различных компонентов, так проблема в торм что пока работа идёт на одной странице на других страницах компоненты ничего не делают только оперативку жрут, так как сделать чтобы они её не жрали) уверен для этого есть очень много способов но ни одного я не знаю так что прошу помощи)

ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 15 июня 2011, 11:21
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Gooddy

Здравствуйте, ierihon1!
Проблема очень востребованная. Не каждому нравится писать программы жрущие 14 мегабайт. Даже если это большая программа, нужно стараться сокращать расходы памяти к минимуму.
Выход из данной проблемы есть. И даже не один.
1. Можно создавать компоненты для каждой вкладки в RunTime. Для этого нужно заменить PageControl на TabControl и отклавливать изменение вкладки. Далее для каждой вкладки написать процедуры добавления, установки параметров и удаления компонентов.
Для начала делаем такое:
Создаём обработчик для OnChange
там пишем
DeleteNowComponents(); //создаём процедуру для удаления компонентов сейчас находящихся на вкладке.
case TabControl1.TabIndex of
0: Create0Components();
1: Create1Components();
...
end;

Далее в DeleteNowComponents перебираем все компоненты TabControl1 и удаляем с помощью метода Free.
В CreateNComponents пишем много кода, например:
var
CloseButton: TButton;
begin
CloseButton := TButton.Create(TabControl1);
CloseButton.Left := ...;
CloseButton.Caption := ...;

И так - для всех закладок, для всех компонентов!

2. Второе решение очень простое, но в два этапа:
Во-первых, произвести рефакторинг интерфейса - удалить ненужные элементы, заменить некоторые группы элементов на общий менее ресурсоёмкий.
Во-вторых, разделить элементы интерфейса на формы и удалять\создавать нужные когда необходимо.

Вывод:
Второй метод быстро и почти без затрат позволит снизить расходы памяти.
Первый хорош, но придётся писать очень много кода для создания\удаления компонентов run-time.

Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 15 июня 2011, 15:27
Оценка за ответ: 5

Комментарий к оценке: Почему то мне больше понравился первый метод)

Мини-форум вопроса

Всего сообщений: 25; последнее сообщение — 15 июня 2011, 15:45; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2]

min@y™

min@y™ (статус: Доктор наук), 15 июня 2011, 15:22 [#21]:

Цитата (ierihon1):

не смог разобраться с фреймами как их использовать так и не понял

В любой книжке для чайников, кофейников и кастрюль есть работа с фреймами. Качай и читай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
ierihon1

ierihon1 (статус: 1-ый класс), 15 июня 2011, 15:24 [#22]:

хм нет это не рекусия это ошибка)) спасибо)
ierihon1

ierihon1 (статус: 1-ый класс), 15 июня 2011, 15:25 [#23]:

почему то книга которую читал я фреймам отведено пол страницы и ничего токового.. ну я поищу)
Gooddy

Gooddy (статус: 3-ий класс), 15 июня 2011, 15:35 [#24]:

Лучше попробуй реализовать такое для 2-3 вкладок по 5-6 компонент.
В реальной программе лучшим решением будет ничего не делать. Т.е. оставить её жрать оперативку.
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 15 июня 2011, 15:45 [#25]:

Ну я попытаюсь попробовать все предлженные варинты) и выберю для себя лучший) всем спасибо)

15 июня 2011, 15:45: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1)

15 июня 2011, 16:21: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:26
Выполнено за 0.03 сек.