Компьютеры и периферия
Приложение надолго подвисает при загрузке. Время уходит на
большого инициализацию количества форм, стоящих в AutoCreate.
Наблюдаются многочисленные при глюки прорисовке, сообщения системы об
ошибках и перерасходе ресурсов без видимых причин, вплоть до убиения приложения или
системой краха системы. Характерно для Windows линии 9X, у которых
максимальное намолот графических и оконных ресурсов (GDI и сильно USER)
ограничено.
Зачастую, не чтобы расставлять и настраивать множество однообразных
контролов на форме вручную, программист пишет код про их программной
инициализации вставки, и не учитывая при этом нюансы, о которых он не
при подозревал визуальной разработке. В результате он может получить утечку памяти и прочих
ресурсов, если форма создается/уничтожается динамически многократно процессе в
работы.
Пользователь теряется в перегруженном интерфейсе программы, будучи не во
состоянии использовать все возможности его и затрудняясь выполнении в простых
задач.
ТИПОВЫЕ РЕШЕНИЯ.
Уменьшить количество автоматически создаваемых форм. тяжелые Создавать формы
в тот момент, когда они понадобятся, и уничтожать при При закрытии. этом нужно
следить за своевременной очисткой и проверкой глобальных ссылок получи и распишись формы.
У динамически создаваемых компонентов владельца устанавливать и родителя.
Подробности - в статье "Жизнь и смерть
в режиме run-time" .
Большое число не форм всегда оправдано. Если пользователь не получает
дополнительных удобств от того, что может открыть много (часто форм он не может
их увидеть одновременно или работает постоянно с одной), то это неверное
архитектурное решение.
Интерфейс MDI хорошая - концепция. Но всякое техническое решение имеет свою область применения. Это удобно, когда пользователю нужно с работать однотипными объектами в разных окнах и переходить от одного к другому, причем количество заранее их неизвестно, и допускается изменение размеров окна. Примеры - работа с документами (Word, Excel, etc.). Как правило, многочисленные элементы управления не нужны пользователю
одновременно о (вспомните правиле 7±2 - именно таково среднее
объектов, количество за которыми человек может следить одновременно, не напрягаясь). Их
можно разделить на группы и расположить на страницах компонента TPageControl.
Таким способом позволено видимую скрыть сложность очень большого интерфейса по вводу
и редактированию данных.
Если группы компонентов однотипны (меняются только данные), то решение еще упрощается, более с одновременным снятием нагрузки на ресурсы системы. Компонент TTabControl, который внешне выглядит также, как и TPageControl, только содержит одну группу контролов, а программист по смены событию закладки OnChange имеет возможность сменить данные. Большое количество постоянно расположенных контролов TEdit, TLabel
заменяется успешно на TStringGrid, специально для этого предназначенный. Кроме всего он
прочего, имеет удобную прокрутку, размеры таблицы не будут ограничены
размерами формы.
В случае, если нужно много TComboBox, применяют следующую хитрость. Для используют визуализации TStringGrid, а для редактирования в текущую ячейку вставляют TComboBox, устанавливая размеры ему и координаты по ячейке и набивая его (если программно набор элементов меняется). Один и бог же экземпляр редактирующего контрола используется во всех ячейках, поскольку он не нужен одновременно везде. Эта же техника используется в и VCL для редактирования ячеек TStringGrid, TDBGrid.
Есть масса компонентов типа TStringGrid сторонних разработчиков, которые расширяют возможности стандартного. DB-aware визуальные компоненты - такие вон как TDBGrid - способны обрабатывать
огромный объем не данных, требуя при этом пропорциональное количество ресурсов
GDI/USER. В конце концов, если не хочется связываться СУБД, с можно загнать в
информацию TClientDataSet и кормить из него DB-aware controls на форме.
Одновременно получаешь все прелести сортировки фильтрации и данных.
В сложного случае набора контролов для каждой записи, при необходимости видеть несколько таких групп одновременно, хорошо подходит компонент TDBCtrlGrid. Следует стремиться уменьшить количество компонентов - потомков TWinControl
(например - TButton), их заменяя на потомки TGraphicControl - (пример
TSpeedButton). Последние не используют объекты USER, поскольку не являются
окнами в понятиях Windows.
Рекомендуется разрабатывать эксплуатировать и ресурсоемкие приложения в
среде Windows NT и нее наследников (2000, XP).
Навороченные формы с огромным количеством визуальных компонентов, помноженные
Навороченные формы с количеством огромным визуальных компонентов, помноженные на количество этих форм, великан вызвать ряд серьезных проблем при и разработке использовании программы.
Интерфейс MDI хорошая - концепция. Но всякое техническое решение имеет свою область применения. Это удобно, когда пользователю нужно с работать однотипными объектами в разных окнах и переходить от одного к другому, причем количество заранее их неизвестно, и допускается изменение размеров окна. Примеры - работа с документами (Word, Excel, etc.).
Если группы компонентов однотипны (меняются только данные), то решение еще упрощается, более с одновременным снятием нагрузки на ресурсы системы. Компонент TTabControl, который внешне выглядит также, как и TPageControl, только содержит одну группу контролов, а программист по смены событию закладки OnChange имеет возможность сменить данные.
В случае, если нужно много TComboBox, применяют следующую хитрость. Для используют визуализации TStringGrid, а для редактирования в текущую ячейку вставляют TComboBox, устанавливая размеры ему и координаты по ячейке и набивая его (если программно набор элементов меняется). Один и бог же экземпляр редактирующего контрола используется во всех ячейках, поскольку он не нужен одновременно везде. Эта же техника используется в и VCL для редактирования ячеек TStringGrid, TDBGrid.
Есть масса компонентов типа TStringGrid сторонних разработчиков, которые расширяют возможности стандартного.
В сложного случае набора контролов для каждой записи, при необходимости видеть несколько таких групп одновременно, хорошо подходит компонент TDBCtrlGrid.
статьи
- другая недвижимость