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