Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Delphi - проблемы и решения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi. От новичка до профессионала! 16. Депозитарий
Информационный Канал Subscribe.Ru |
Здравствуйте, уважаемые читатели :-) Сегодня (4 февраля) у меня День рождения. Поздравления принимаю в гостевую книгу на сайте.
16. Депозитарий
В
Депозитарий (хранилище — Repository) вы попадаете, когда выполняете команду File
| New | Other. При этом открывается диалоговое окно New Items, в котором вы
можете выбрать включенные в Delphi готовые формы или воспользоваться
разработанными фирмой Borland мастерами. Но вы можете использовать Депозитарий и
для хранения собственных разработок.
Нередко создание сложной формы с множеством размещенных на ней компонентов
требует немалого времени. Причем однажды разработанная удачная форма можетт
пригодиться вам в последующих приложениях. Конечно, можно сохранить её в
каком-либо каталоге и, когда возникнет необходимость, использовать в очередном
проекте. Но если разработка этого нового проекта будет не скоро, вы, возможно,
потратите много времени на поиск каталога с необходимой вам формой, если вообще
найдете ее. Хотелось бы иметь возможность как-то зарегистрировать свои удачные
разработки в Delphi, чтобы в дальнейшем без труда повторно их использовать.
Такую возможность и предоставляет вам Депозитарий.
Депозитарий позволяет не просто хранить формы, но и наследовать их, т.е.
создавать иерархию форм. Это важно, поскольку в сложном приложении содержащем
много форм, все эти формы должны быть спроектированы в едином стиле, с
единообразным расположением органов управления, ввода и редактирования данных, в
единой цветовой гамме и т.п. Это легко делается созданием иерархии форм.
Сохранение формы в Депозитарии вы можете опробовать на любой созданной вами
ранее форме, например, на форме приложения, созданного в разд. 14.2 («Научим
Дельфи считать»), перемножающего два числа. Перед занесением формы в Депозитарий
ее модуль должен быть обязательно сохранен в файле. Щелкните на вашей форме
правой кнопкой мыши и выберите во всплывшем контекстном меню раздел Add To
Repository. Появится диалоговое окно. В верхнем окне Title должны написать
название вашей формы — подпись под ее пиктограммой при входе в Депозитарий. В
следующем окне — Description можете написать более развёрнутое пояснение. Его
может увидеть пользователь, войдя в Депозитарий, щёлкнув правой кнопкой мыши и
выбрав во всплывшем меню форму отображения View Details. В выпадающем списке
Page вы можете выбрать страницу Депозитария, на которой хотите разместить
пиктограмму своей формы. Впрочем, вы можете указать и новую страницу с новым
заголовком. В результате она появится в Депозитарии.
В окне Author вы можете указать сведения о себе как об авторе. Наконец, если
стандартная пиктограмма вас не устраивает, вы можете выбрать другую, щелкнув на
кнопке Browse. После выполнения всех этих процедур щелкните на кнопке ОК и ваша
форма окажется включенной в Депозитарий.
Теперь вы можете использовать ее в последующих ваших приложениях. Для этого вам
надо будет выполнить команду File | New | Other и в открывшемся диалоговом окне
New Items отыскать вашу форму.
В нижней части окна расположены три радиокнопки, которые определяют, как именно
вы хотите заимствовать форму из Депозитария: Сору — копировать, Inherit —
наследовать, Use — использовать. Если включена кнопка Сору, то файл формы просто
будут скопированы в ваше приложение. При этом никакой дальнейшей связи между
исходной формой и копией не будет. Вы можете спокойно изменять свойства вашей
копии и это никак не отразится на форме, хранящейся в Депозитарии. А если вы в
дальнейшем что-то измените в форме, хранящейся в Депозитарии, то эти изменения
никак не затронут вашего приложения, куда вы до этого скопировали форму.
При включенной кнопке Inherit вы получите в своем проекте форму, наследующую
размещенной в Депозитарии. Это значит, что если вы что-то измените в форме,
хранящейся в Депозитарии, то это отразится при перекомпиляции во всех проектах,
которые наследуют эту форму. Однако изменения в наследуемых формах никак не
скажутся на свойствах формы, хранящейся в Депозитарии.
При включенной кнопке Use вы получите режим использования. В этом случае в ваш
проект включится сама форма, хранящаяся в Депозитарии. Значит любое изменение
свойств формы, сделанное в вашем проекте, отразится и на хранящейся в
Депозитарии форме, и на всех проектах, наследующих или использующих эту форму
(при их перекомпиляции).
Таким образом, режим Inherit целесообразно использовать для всех модулей вашего
проекта, а режим Use — для изменения базовой формы. Тогда усовершенствование
вами базовой формы будет синхронно сказываться на всех модулях проекта при их
перекомпиляции.
Все эти режимы заимствования форм из Депозитария вы можете легко опробовать на
практике. Начните новый проект, удалите из него пустую форму (команда Project |
Remove from Project или соответствующая быстрая кнопка) и введите в него вашу
форму из Депозитария при включенной в окне кнопке Сору. Назовите форму (свойство
Name), например, FCopy и сохраните ее модуль (команда File I Save As) под именем
UFCopy. Сохранять под новым именем необходимо, так как мы хотим ввести в наш
проект несколько экземпляров нашей формы, а модули с одинаковыми именами в
проекте быть не могут. Введите в проект второй экземпляр вашей формы из
Депозитария при включенной кнопке Inherit, назовите ее FInherit и сохраните
модуль этой формы под именем UFInherit. Введите третий экземпляр формы из
Депозитария при включенной кнопке Use. Имя этой формы и имя модуля при
сохранении изменять не надо. Установите во всех формах свойство Visible
(видимость) в true и сохраните проект. Если хотите, выполните его и убедитесь,
что все три формы одинаковы.
Теперь измените какие-то надписи в форме FCopy, сохраните проект и выполните
его. Вы убедитесь, что изменение затронуло только форму FCopy. Так что эта форма
никак не связана с другими формами.
А теперь измените что-то в форме, введенной с помощью кнопки Use. Даже не
выполняя проект, вы увидите, что введенные изменения тут же отражаются не только
в этой форме, но и в форме FInherit. Это происходит потому, что форма,
полученная с помощью кнопки Use — это сама форма, хранящаяся в Депозитарии. А
форма FInherit наследует ей. Поэтому в ней отражаются все изменения, сделанные в
основной форме. Обратной связи от формы FInherit к форме, хранящейся в
Депозитарии, нет. Вы можете в этом убедиться, изменяя что-то в форме FInherit.
Более того, как только вы изменили в ней какое-то свойство, оно перестает
наследоваться. Последующие изменения этого свойства в основной форме никак не
скажется на FInherit.
Таким образом, в наследуемых формах те свойства, которые были изменены в
процессе проектирования, так и остаются неизменными. А остальные наследуются из
базовой формы. В этом и заключаются положительные стороны наследования форм.
Если вы построили различные формы вашего приложения (настоящего, а не этого
тестового) наследованием, то изменив родительскую форму (например, изменив в ней
размеры панелей или добавив какие-нибудь кнопки), вы автоматически внесете эти
изменения и во все производные формы. Правда, эти изменения проявятся только при
перекомпиляции вашего приложения.
Но у наследования есть и отрицательные свойства. Попробуйте в вашем приложении
удалить в форме FInherit какой-то компонент. Сделать это невозможно, так как
Delphi выдаст сообщение об ошибке. Однако этот недостаток можно обойти, в
производной форме можно сделать ненужные компоненты невидимыми (установить
свойство Visible равным false) и недоступными (установить свойство Enabled
равным false). Тогда во время выполнения они как бы исчезнут с формы.
Обратим внимание еще на одну особенность наследования. Посмотрите коды форм
приложения. В модулях базовой формы и в модуле UFCopy вы увидите обычное
объявление класса формы, наследующего классу TForm, и в нем объявления
компонентов, расположенных на форме, и объявление процедуры обработчика щелчка
на кнопке Button1Click. А в модуле UFInherit все объявление класса сводится к
строкам:
TFInherit = class(TForm1)
private
{ Private declarations }
public
{ Public declarations }
end;
Класс формы TFInherit наследует классу базовой формы TForm1, а не классу Delphi
TForm. Наследуются все компоненты класса TForm1 и обработчик событий
Button1Click. Таким образом, в модуле UFInherit ничего дополнительно не
описывается.
А теперь попробуйте в этом модуле ввести обработчик щелчка на кнопке. Вы
увидите, что заготовка обработчика щелчка будет иметь вид:
procedure TFInherit.Button1Click(Sender: TObject);
begin
inherited;
end;
В отличие от обычных пустых заготовок, в данной содержится оператор inherited.
Этот оператор означает вызов соответствующего наследуемого обработчика
родительского класса. Если такой наследуемый обработчик имеется, то вам надо
подумать, помещать ли оператор inherited перед вашим кодом, или после него. Это
зависит от того, какой из обработчиков должен выполняться первым. Так в нашем
примере вы можете перед или после вычислений, предусмотренных в родительской
форме, предусмотреть какое-то сообщение или запрос пользователю. А если вам
вообще не надо вызывать соответствующий обработчик родительской формы, то
оператор inherited надо удалить. Например, это надо сделать, если данную форму
вы решите использовать не для перемножения, а для сложения двух чисел.
Мы рассмотрели включение в Депозитарий форм и их использование. Точно так же,
начиная с Delphi 5, можно включать в Депозитарий и аналогичным образом
использовать фреймы. Это дает дополнительные возможности организовывать иерархию
не только форм, но и типовых фрагментов форм — панелей.
В Депозитарий можно включать не только формы и фреймы, но и целые проекты. Если
вы хотите включить в него ваш проект, откройте его и выполните команду Project |
Add To Repository. Дальнейшие действия аналогичны тем, которые вы выполняли при
включении в Депозитарий формы. Отличие проекта от формы при их заимствовании из
Депозитария состоит в том, что проект можно взять оттуда только в режиме Сору,
т.е. скопировать его и далее сохранить под другим именем. Если вы хотите взять
проект, хранящийся в Депозитарии, то начать работу надо не с привычной команды
File | New | Application, а с команды File | New | Other. Вы выбираете проект из
Депозитария и вам сразу же предлагается диалоговое окно выбора каталога, в
котором вы хотите сохранить копию проекта. После этого вы можете обычным образом
работать с этой копией и менять в ней все, что вам захочется.
Если есть механизм включения в Депозитарий форм и проектов, то должен быть и
механизм их удаления. Удаление объектов, хранящихся в Депозитарии выполняется
командой Tools | Repository. При этом открывается окно. То же окно открывается,
если в окне Депозитария New Items щелкнуть правой кнопкой мыши и выбрать из
контекстного меню раздел Properties.
В левой панели окна вы можете выбрать одну из страниц и в правой панели увидеть
состав этой страницы. Вы можете добавить (Add Page), удалить (Delete Page),
переименовать (Rename Page) страницы Депозитария, поменять их по
последовательность с помощью кнопок со стрелками, выделить один из хранящихся
объектов и удалить его (Delete Object), отредактировать (Edit Object) информацию
об объекте. Вы можете также выделить в правой панели одну из форм и включите
флажок Main Form (главная форма). Тогда при открытии нового проекта будет
появляться не обычная пустая форма, а именно эта помеченная в Депозитарии как
главная. Если для одной из форм включить флажок New Form (новая форма), то
именно эта форма, а не пустая, будет включаться в проект при выполнении команды
File | New | Form.
Если выделите в правой панели не форму, а проект (включенный вами или один их
расположенных на странице Projects), то вместо индикаторов Main Form и New Form
появится индикатор New Project. Если его включить, то именно этот проект в
дальнейшем будет открываться при создании вами нового проекта.
Сайт рассылки http://mydelphi7.narod.ru, на котором есть архив рассылки, также гостевая книга, переводчик.
Копировать, размещать, продавать представленную информацию запрещается.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||