Delphi 5.Учебник


         

Повторное использование форм



К этому моменту вы уже должны быть хорошо знакомы с объектно-ориентированной природой Delphi. Поскольку TForm представляет собой класс, он может повторно использоваться, расширяться и изменяться. Повторное применение форм поддерживается через шаблоны форм и наследование. Оба эти метода используют Object Repository

Шаблоны форм
Шаблоны форм (Form Templates) предоставляют основу для новой формы. По одной заготовке можно создать несколько форм. В Delphi есть хранилище объектов (Object Repository), в котором содержится множество различных шаблонов форм, диалогов и проектов.

Использование шаблонов форм
Приведенные ниже опции позволяют использовать шаблоны форм.

  • Copy. Эта опция добавляет копию шаблона формы в ваш проект. Изменения объекта в проекте не влияют на другие объекты.
  • Use. Эта опция связывает шаблон непосредственно с вашим проектом. Изменения в проекте воздействуют на объект, находящийся в хранилище, и наоборот.
  • Для иллюстрации сказанного добавим в проект новую форму, основанную на шаблоне About box, следующим образом.
  • Выберите команду File/New Application. Появится пустое приложение.
  • Выберите команду File/New. Появится диалоговое окно New Items.
  • Щелкните на вкладке Forms вверху диалогового окна. Delphi выведет доступные шаблоны форм, как показано на Рисунок 1.6.
  • Убедитесь, что выбран метод Copy или Use.
  • Щелкните на кнопке ОК. Новая форма About box будет добавлена в ваш проект.
  • Если вы выбрали опцию Copy, новая форма будет дубликатом шаблона и дальнейшая работа с ней не отразится на шаблоне-оригинале. При использовании Use все изменения в одном проекте через хранилище форм будут переданы во все проекты, применяющие эту форму с опцией Use.

    Добавление собственного шаблона
    Хотя имеющиеся шаблоны весьма полезны и хорошо сделаны, для продолжительной профессиональной работы их будет недостаточно. Наверняка нужно будет что-либо доработать или создать новую форму, которую можно было бы использовать в других приложениях. Чтобы не делать одну и ту же работу дважды (трижды, восемьюжды...), создайте шаблон формы и поместите его в хранилище объектов.

  • Создайте форму, добавьте в нее компоненты и приправьте все это кодом по вашему вкусу. Конечно, вы вполне можете использовать в качестве заготовки имеющийся шаблон.
  • Сохраните форму в папке OBJREPOS Delphi.
  • Совет: Object Repository не хранит копий всех шаблонов, а устанавливает связи с их DFM- и PAS-файлами. Если вы удалите такой файл, шаблон станет недееспособным.

  • Щелкните правой кнопкой мыши на форме и затем выберите команду Add to Repository. При этом Delphi выведет диалоговое окно Add To Repository, показанное на Рисунок 1.7.
  • Рисунок 1.6. Шаблоны форм позволяют использовать заготовленные общие формы
    Рисунок 1.7. Используйте диалоговое окно Add To Repository для добавления ваших собственных шаблонов в хранилище объектов
    1. Из списка Forms выберите форму, которую нужно добавить в хранилище.
    2. Введите заголовок формы в поле Title (он будет использоваться в качестве подписи под пиктограммой в диалоговом окне New Items).
    3. Из раскрывающегося списка Page выберите страницу, на которой будет размещен шаблон.
    4. Щелкните на кнопке ОК, и форма будет добавлена в Object Repository.


    Совет: Delphi автоматически включает вновь созданные формы в текущий проект. Они связаны с проектом, как
    будто вы воспользовались опцией Use.

    Разделяемое хранилище
    Вам может не понравиться то, что ваши шаблоны содержатся в хранилище Delphi. Предположим, что вы де инсталлируете Delphi (при этом, чтобы сохранить свои шаблоны, вы будете вынуждены вручную сохранять их в другом месте, а потом вновь добавлять их в очередное хранилище). Или, например, вы работаете в сетевом окружении и хотите поделиться своими формами с другими программистами. Обе эти проблемы позволяет решить концепция разделяемого хранилища.
    Разделяемое хранилище (shared repository) представляет собой папку с двумя файлами, используемыми для хранения информации о расположении шаблонов. Вы можете определить расположение разделяемого хранилища, выполнив следующие действия.

  • Выберите команду Tools/Options, и на экран будет выведено диалоговое окно Environment Options, показанное на Рисунок 1.8.
  • Щелкните на вкладке Preferences вверху диалогового окна.
  • В поле ввода Directory введите путь к папке, которую вы хотите использовать в качестве разделяемого хранилища.
  • Щелкните на ОК. Теперь при выводе диалогового окна New Items Delphi будет просматривать эту папку в поисках шаблонов.
  • После того как разделяемое хранилище определено, вы вольны в выборе места хранения своих шаблонов.

    Управление хранилищем объектов
    После добавления шаблона в хранилище вы вдруг обнаруживаете, что совсем забыли внести в него последние исправления. Вы можете сделать это, используя диалоговое окно Object Repository, показанное на Рисунок 1.9. Для его вызова воспользуйтесь командой Tools/Repository.
    В списке Pages, расположенном слева в диалоговом окне, перечислены страницы, выводимые в диалоговом окне New Items. Управлять этим набором можно с помощью кнопок Add Page, Delete Page и Rename Page.

    Рисунок 1.8. Опция Shared Repository позволяет определить разделяемое хранилище шаблонов
      Рисунок 1.9. Использование диалогового окна Object Repository для работы с шаблонами

    Выбор страницы из списка приводит к заполнению списка Objects объектами, содержащимися на этой странице. Если вы выберете элемент [Object Repository], будут показаны все объекты в хранилище. Вы можете перемещать объекты путем их перетаскивания из списка Objects на нужную страницу в списке Pages.
    Кнопка Edit Object позволяет вывести диалоговое окно Edit Object Info, показанное на Рисунок 1.10. С его помощью можно редактировать свойства объекта в любой момент.
    Кнопка Delete Object удаляет объект из хранилища, но не удаляет его файлы с диска.
    Переключатели, расположенные внизу диалогового окна, выполняют две задачи. Первый переключатель. New Form, позволяет определить шаблон, используемый при создании новой формы. Второй, Main Form, определяет шаблон, используемый для построения главной формы при создании нового приложения. Для назначения соответствующих шаблонов просто выберите объект из списка Objects и отметьте нужную опцию.

      Рисунок 1.10. Редактировать свойства объекта можно в хранилище с помощью диалогового окна Edit Object Info


    Если вы выбираете проект, а не форму, диалоговое окно заменит переключатели новыми переключателями New Project. Он позволяет определить шаблон проекта, используемый при создании нового приложения.

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

    Использование наследования форм
    В хранилище объектов содержится несколько примеров наследования форм. Для того чтобы наследовать одну форму из другой, выполните следующие действия.
    Выберите команду File/New Application. При этом появится пустое приложение.

  • Выберите команду File/New, и будет выведено диалоговое окно New Items.
  • Щелкните на вкладке Dialogs, и будет выведена страница диалогов.
  • Выберите диалог с пиктограммой Help, кнопки которого выровнены вертикально по правой стороне формы.
  • Выберите опцию Inherit.
  • Щелкните на кнопке ОК, и Delphi выведет новую диалоговую форму.
  • Заголовок нового диалогового окна— OKHelpRightDlg2. Почему Delphi создает это диалоговое окно как OKHelpRightDIg? Ответ заключается в наследовании форм. В списке форм вашего проекта содержится четыре объекта— Form1, OKHelpRightDIg, OKHelpRightDlg2 и OKRightDlg. Поскольку вы наследуете новую форму из OKHelpRightDIg, Delphi включает его в ваш проект для компиляции вашей программы. Это и приводит к наименованию новой формы как OKHelpRightDlg2. К тому же это позволяет избежать конфликта имен. В свою очередь, OKHelpRightDIg — наследник OKRightDlg, а потому последний также включен в проект.


    ПРЕДОСТЕРЕЖЕНИЕ: Две родительские формы, OKHelpRightDIg и OKRightDlg, связываются с проектом так же, как и опция Use, поэтому, решив их изменить, вы измените объекты, хранящиеся в Object Repository.

    Цепочка наследования отражена в автоматически генерируемом коде. Описание класса OKHelpRightDlg2 выглядит так.

    TOKHelpRightDlg2 = class (TOKHelpRightDIg) private
    {Закрытые объявления.}
    public
    {Открытые объявления.}
    end;


    Совет: Описание класса или типа начинается с буквы Т.

    Это объявление не назовешь чересчур информативным. Поскольку вы не добавляли ни новых компонентов, ни кода, OKHelpRightDlg2 не определяет ни новых свойств, ни методов или событий. Определение класса TOKHelpRightDIg несколько интереснее.

    TOKHelpRightDIg = class (TOKRightDIg)
    HelpBtn: TButton;
    procedure HelpBtnClick(Sender: TObject);
    private
    {Закрытые объявления.}
    public
    {Открытые объявления.}
    end;

    Как вы можете видеть, OKHelpRightDIg получает компоненты и код от OKRightDIg и добавляет объект HelpBtn типа TButton, а также обработчик события HelpBtnClick.

    Преимущества наследования форм
    Как уже упоминалось ранее, преимущества наследования форм заключаются в возможности добавления новых компонентов и кода в объект и наличии связи с оригиналом шаблона в хранилище. Если вы изменяете шаблон, наследуемый объект будет автоматически обновлен. Выполните следующие действия.
    Выберите команду File/New Application, и появится пустое приложение.

  • Закройте главную форму, окно которой озаглавлено Forml.
  • Выберите команду File/New, и будет выведено диалоговое окно New Items.
  • Щелкните на вкладке Dialogs, и будет выведена страница диалогов.
  • Выберите стандартный (Standard) диалог с кнопками, выровненными вертикально по правой стороне.
  • Выберите опцию Inherit.
  • Щелкните на кнопке ОК, и Delphi выведет новую диалоговую форму OKRightDlg2.
  • Выберите из меню View/Forms, и будет выведено диалоговое окно View Form.
  • Выберите шаблонную форму OKRightDIg, щелкните на кнопке ОК, и Delphi выведет новую шаблонную форму, озаглавленную Dialog и расположенную точно поверх новой формы.
  • Теперь приступим к демонстрации. Переместите шаблонную форму в нижнюю часть главного окна Delphi. Вы обратили внимание, что новая форма OKRightDlg2 не открылась? Это связано с тем, что Delphi обновляет свойства Left и Тор одновременно с изменением соответствующих родительских свойств.
    Однако в обратном направлении изменения не передаются. Чтобы убедиться в этом, выполните следующие действия.

  • Выберите команду View/Forms, и появится диалоговое окно View Form.
  • Выберите OKRightDlg2 и щелкните на ОК.
  • Переместите OKRightDlg2 в нижнюю часть экрана.
  • Ваш экран должен выглядеть примерно так, как на Рисунок 1.11.
    Рисунок 1.11 Изменение распространяются только в одном направлении - от родителей к потомкам

    При перемещении диалога-наследника на экране диалогородитель будет оставаться на месте, что иллюстрирует передачу свойств только в одном направлении.



    Содержание раздела