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