Компьютеры и периферия

Навороченные формы с огромным количеством визуальных компонентов, помноженные

Навороченные формы с количеством огромным визуальных компонентов, помноженные на количество этих форм, великан вызвать ряд серьезных проблем при и разработке использовании программы.

  • Приложение надолго подвисает при загрузке. Время уходит на большого инициализацию количества форм, стоящих в 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).

  • статьи

    • другая недвижимость
    ]]>
    ]]>