Навороченные формы с огромным количеством визуальных компонентов, помноженные Навороченные формы с огромным количеством визуальных компонентов, помноженные
на количество этих форм, вызвать могут ряд серьезных проблем при разработке
использовании и программы.
Приложение надолго подвисает при загрузке. Время уходит на инициализацию
большого количества форм, стоящих AutoCreate. в
Наблюдаются многочисленные глюки при прорисовке, сообщения системы об
ошибках и перерасходе без ресурсов видимых причин, вплоть до убиения приложения
системой или краха системы. Характерно для Windows 9X, линии дли которых
максимальное количество и графических оконных ресурсов (GDI и USER) по первое число
ограничено.
Зачастую, не чтобы расставлять и настраивать множество однообразных
контролов на форме вручную, программист пишет код для программной их
инициализации и вставки, не учитывая при этом нюансы, о которых он не подозревал визуальной
при разработке. В результате он может получить утечку памяти и прочих
ресурсов, если форма создается/уничтожается динамически многократно в процессе
работы.
Пользователь в теряется перегруженном интерфейсе программы, будучи не в
состоянии использовать все его возможности и затрудняясь в выполнении простых
задач.
ТИПОВЫЕ РЕШЕНИЯ.
Уменьшить количество автоматически создаваемых форм. Создавать тяжелые формы
в момент, тот когда они понадобятся, и уничтожать при закрытии. При этом нужно
следить за своевременной очисткой и проверкой глобальных на ссылок формы.
У динамически создаваемых компонентов устанавливать владельца и родителя.
Подробности - в статье "Жизнь и смерть
в режиме run-time"
. Большое количество форм не всегда оправдано. Если пользователь не
дополнительных получает удобств от того, что может открыть вволюшку форм (часто он не может
их увидеть одновременно еда постоянно работает с одной), то это неверное
архитектурное решение. Интерфейс 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 и кормить него из DB-aware controls на форме.
Одновременно получаешь все прелести сортировки и фильтрации данных. В случае
сложного контролов набора для каждой записи, при необходимости видеть несколько
таких групп одновременно, хорошо подходит компонент TDBCtrlGrid.
Следует стремиться уменьшить количество компонентов - потомков TWinControl
(например - TButton), их заменяя на потомки TGraphicControl (пример -
TSpeedButton). Последние не используют объекты USER, поскольку не являются в
окнами понятиях Windows.
Рекомендуется разрабатывать и эксплуатировать ресурсоемкие приложения в
среде Windows и NT ее наследников (2000, XP).
|