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