Moved Permanently
Навороченные формы с огромным визуальных количеством компонентов, помноженные
на количество этих форм, могут вызвать ряд серьезных проблем при разработке и
использовании программы.
Приложение надолго подвисает при загрузке. Время уходит на инициализацию
большого форм, количества стоящих в 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).
The document has moved here.
Сайт управляется системой
uCoz