Введение
Начиная делать новую программу, мы обычно не задумываемся над
тем, а обязательно ли делать всё в нуля, с самого-самого начала? С большой долей
вероятности в каждой программе есть та или иная часть, присутствующая в других,
ранее созданных программах. Когда мы пишем заявление или заполняем какую-нибудь
бумажную анкету, мы ведь используем не чистый лист бумаги - в нём уже написана
или напечатана некоторая заготовка. Встаёт вопрос: а каким образом можно
применить это в программировании? Можно ли сократить время на создании
стандартных интерфейсов и написании стандартного кода? В данной статье я буду
рассматривать работу в Delphi 2009, однако в предыдущих версиях всё, о чём будет
идти речь, было сделано практически идентично.
Хранилище объектов в Delphi
Хранилище объектов (Object
Repository) появилось в Delphi практически с первых версий. Не замечая
того, каждый из нас пользуется им постоянно. Новый проект - это тоже своего рода
заготовка. Delphi не заставляет нас писать вручную файл проекта, описывать
основную форму и добавлять её в проект. Далее, когда требуется добавить в
приложение новую форму, мы тоже берём некий шаблон. Да, это чистая форма без
каких-либо компонентов, но ведь её описание тоже состоит из некоторого
количества строк. А мы их не пишем. И одновременно с этим создаётся новый модуль
примерно такого содержания:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
end.
Так где же находится это хранилище объектов? А находится оно в меню
File - New. Что же это за хранилище такое, ведь там всего несколько
пунктов? Ан-нет, имеющиеся в этом подменю пункты - наиболее основные. Они
используются очень часто, поэтому и вынесены ближе. Среди них - новое
приложение, новая форма, новый модуль и т.п.
Однако помимо этих пунктов есть и ещё два - Other...
(Другое) и Customize (Настроить под себя). Вот они-то нам и
нужны. Пункт Other... открывает тот самый Object Repository, а пункт
Customize позволит изменить содержимое данного меню.
Окно Object Repository
В заголовке окна - надпись "New Items", хотя и
называется это хранилищем объектов. Для чего оно нужно? Всё просто: это набор
заготовок самого разного типа и предназначенных для самых разных задач, проще
говоря шаблоны. Используются они очень просто: выбираем то, что нужно, и
получаем "бланк", который меняем так, как нам угодно. Вспомните, например,
сколько раз вам приходилось создавать окно About ("О программе") в своих
проектах? А ведь это окно стандартное, типичное для всех приложений. Да и общий
вид у него есть, сформировавшийся со временем и привычный для всех
пользователей. Вместо того, чтобы каждый раз создавать это окно заново, можно
взять готовый шаблон, вписать нужные данные и окошко готово!
Итак, окно состоит из двух частей - слева находится список
(дерево) категорий, а справа отображаются объекты, принадлежащие выбранной
категории. В более ранних версиях Delphi окно было выполнено в виде вкладок с
названиями категорий.
Разработчики поместили в хранилище множество интересных и
полезных вещей. Что именно нам доступно, рассмотрим чуть позже.
Использование хранилища очень простое: выбираем желаемый
объект, нажимаем OK и он добавляется в текущий проект (если это
составная часть проекта - форма, модуль и т.п.), либо создаётся новый проект
(например, если это DLL или вообще готовый проект). Добавление некоторых
объектов сопровождается предварительной их настройкой - это может быть окно с
предложением ввести требуемые данные, либо пошаговый мастер.
Примеры использования
Раз уж мы заговорили об окне About, давайте его и попробуем
добавить в наш проект. Итак, выбираем File - New - Other.
Нужный нам объект называется About box и располагается в категории
Delphi Files:
После нажатия OK в нашем проекте появилась новая форма с именем
AboutBox и несколькими компонентами - текстовыми метками, картинкой и
кнопкой. Удобно, не правда ли? Остаётся лишь вписать название программы,
версию, вставить нужную иконку и окно полностью готово. Делается буквально
за минуту. Создать такое окно вручную несложно, но всё же это займёт больше
времени.
Теперь давайте возьмём что-нибудь более интересное. Например, объект
Dual list box. Как следует из названия, это окно с двумя списками.
Знакомое окно? Ещё бы, ведь такие используются очень часто. Далеко ходить не
надо - окно настроек проекта (Project - Options), раздел Forms.
Согласитесь, что размещение такого количества компонент на форме заняло бы
гораздо больше времени. Но всё это ещё не всё. В окне About за нас был
автоматически создан интерфейс. А в этом примере за нас ещё и код написали!
Откройте программный модуль - там не так уж и мало написано. Ну что, а
каково писать всё это вручную?
Выбор способа вставки объекта в проект
При выборе в окне хранилища некоторых объектов (в основном
форм) внизу появляется область выбора способа вставки объекта. Имеется 3 разных
варианта. По умолчанию выбран вариант Copy. С использованием этого
варианта ничего "плохого" сделать не удастся, так что можно безболезненно
экспериментировать.
Итак, разберём, в чём смысл каждого из способов.
Copy (копирование) - стандартный способ
вставки, когда имеющийся в хранилище объект просто копируется в ваш проект. Вы
можете изменять вставленный объект как угодно, так как эти изменения останутся
только в вашем проекте: в хранилище объект нисколько не изменится. Именно
поэтому я назвал этот способ безопасным.
Inherit (наследование) - пожалуй, это самый
мощный и самый прогрессивный способ вставки объектов. Смысл его заключается в
том, что если вставленный объект изменился в самом хранилище (т.е. оригинальный
экземпляр), то изменения автоматически будут внесены и в ваш проект в этот
объект. Однако обратного процесса нет: как бы вы ни меняли объект у себя,
оригинальный не изменится. Данный способ удобен, например, при адаптации к более
новым версиям операционной системы - возможно, нужно внесить какие-то важные
изменения в объект, чтобы он корректно воспринимался ОС или поддерживал её новые
возможности. Понятно, что это сделают разработчики среды программирования, а вот
чтобы вручную не делать этого самим программистам, и существует такой удобный
способ.
Use (использование) - способ, при
использовании которого в проект вставляется оригинальный объект и все изменения
сразу же вносятся в объект хранилища. В пояснениях, думаю, не нуждается.
Физическое расположение хранилища
Понятно, что все объекты хранилища не появляются из ниоткуда,
а находятся где-то на диске. Найти это место несложно - это папка
ObjRepos в папке, куда установлена сама среда Delphi, т.е. в
большинстве случаев это X:\Program Files\CodeGear\RAD Studio\x.0\ObjRepos.
Названия файлов в основном соответствуют тем названиям, которые видны в окне
File - New - Other. Так что, если вам потребовалось изменить какой-нибудь
объект, следует найти нужный файл и внести в него изменения.
Содержимое хранилища
Теперь давайте кратко пробежимся по хранилищу и посмотрим, что
есть у нас в арсенале. Рассмотрение будет идти по категориям.
Delphi Projects:
Console Application - консольное приложение,
т.е. приложение без форм.
Control Panel Application - приложение для
"Панели управления" Windows (т.н. апплет).
DLL Wizard - заготовка DLL-библиотеки.
MDI Application - приложение с многооконным
интерфейсом, т.е. для одновременного редактирования сразу нескольких документов.
Выполнено в виде текстового редактора. Запрограммированы функции создания нового
документа и открытия существующего.
Package - пакет, в который помещаются модули
новых компонент для более простой и быстрой их установки в Delphi на других
компьютерах.
Resource DLL Wizard - пошаговый мастер по
созданию DLL-библиотек, используемых в нескольких проектах.
SDI Application - программа с единственным
окном редактирования документа. Создано аналогично MDI Application - в
виде текстового редактора.
Service Application - сервисное приложение,
т.е. дополнительная служба для операционной системы.
VCL Forms Application - стандартное
VCL-приложение, которое мы в основном и используем.
ActiveX
- основные элементы для разработки собственных компонент, дополнений и библиотек
типов.
Delphi Files:
About box - информационное окно "О
программе".
Component - новый компонент на базе
какого-либо из существующих.
Control Panel Module - модуль для Control
Panel Application.
Data Module - модуль данных, на котором
размещают компоненты, отвечающие за работу с базами данных.
Dialog with Help (Horizontal) и
Dialog with Help (Vertical) - стандартные диалоговые окна с кнопками "OK",
"Cancel" и "Help". Отличаются расположением кнопок - снизу по
горизонтали или справа по вертикали.
Dual list box - окно с двумя списками (ListBox)
и возможностью выбора требуемых элементов из списка.
Form - стандартная пустая форма.
Frame - форма-фрейм, которая может
отображаться внутри другой формы. Чтобы вставить имеющийся фрейм на форму,
используется кнопка Frames на вкладке Standard палитры
компонент.
Password Dialog - диалог ввода пароля.
Reconcile Error Dialog - используется в
приложениях баз данных для пояснения обнаруженной ошибки при изменении таблицы.
Standard Dialog - классический диалог с
кнопками "OK" и "Cancel".
Tabbed Pages - диалоговое окно с несколькими
вкладками и кнопками "OK", "Cancel" и "Help".
Thread Object - модуль с объектом "поток" (TThread).
Unit - заготовка для нового программного
модуля.
Inheritable Items - формы, которые
добавляются в проект наследованием (описание этого способа внедрения см. выше).
VCL for the Web - основные
элементы для создания Web-приложений.
Wizards
- различные мастера-помощники по созданию каких-либо объектов.
Other Files:
Code Template - шаблон для быстрой вставки в
программный код (пишется как XML).
Project Group - группа проектов. Является
удобным средством для работы сразу с несколькими проектами, а также может
существенно облегчить параллельную разработку программ и DLL-библиотек.
Text - простой текстовый файл.
Unit Test
- средства для тестирования имеющихся модулей и проектов и разделения готовых
(Release) и разрабатываемых (Debug) версий.
Web Documents - основные форматы
файлов, используемые в Web.
Расширение хранилища
Надеюсь, вы уже оценили полезность Object Repository. Нужно
поговорить теперь и о том, как можно добавить в этот каталог что-то новое. На
самом деле, добавление происходит очень легко и выполняется за несколько секунд.
Однако, разработав что-то полезное (в первую очередь для себя) и добавив это в
хранилище, можно впоследствии радоваться всю жизнь :-)
Например, нам недостаточно предложенного диалога ввода пароля
и мы хотим сделать диалог регистрации нового пользователя: нужно будет указать
желаемый логин и пароль, но пароль необходимо подтвердить, введя его дважды.
Разработаем такой диалог.
За основу возьмём Password Dialog. Открыв модуль,
видим, что ни одной дополнительной строки кода там нет. Что ж, сделаем сами.
К имеющемуся полю ввода добавим ещё два, и изменим все
названия на те, которые нужны. В обработчике нажатия кнопки "Создать" будем
проверять, заполнены ли все поля, а также совпадают ли пароль и его
подтверждение:
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
begin
if Length(Trim(LoginEdit.Text)) = 0 then
begin
MessageDlg('Вы не ввели логин.',mtError,[mbOk],0);
Exit
end;
if Length(Trim(Password1Edit.Text)) = 0 then
begin
MessageDlg('Вы не ввели пароль.',mtError,[mbOk],0);
Exit
end;
if Length(Trim(Password2Edit.Text)) = 0 then
begin
MessageDlg('Вы не ввели подтверждение пароля.',mtError,[mbOk],0);
Exit
end;
if Password1Edit.Text <> Password2Edit.Text then
begin
MessageDlg('Пароль и его подтверждение не совпадают.',mtError,[mbOk],0);
Exit
end;
end;
После того, как всё завершено, сохраняем полученную форму.
Теперь нужно добавить наше творение в репозиторий. Для этого в
контекстном меню нашей формы выбираем пункт Add to
Repository. В появившемся окне нужно ввести название добавляемого
объекта, его описание, имя автора. Также можно выбрать иконку, которая будет
отображаться в окне возле названия объекта. Объект будет помещён в ту категорию,
которая выбрана в дерева слева. Можно создать и новую категорию кнопкой New
Category.
После этого в окне хранилища появится созданная нами форма.
Если нужно добавить не отдельную форму, а весь проект, то
следует выбрать пункт меню Project - Add to Repository.
Появится аналогичное окно, которое точно так же заполняется.
Помните, что Delphi не копирует добавляемые исходники в папку
ObjRepos, поэтому лучше сразу сохранять их туда самостоятельно, чтобы
избежать случайного переноса или удаления файлов.
Редактор Object Repository
Для редактирования имеющихся объектов существует простой
редактор, который вызывается командой Tools - Repository. В
этом окне можно удалить или изменить существующие объекты.
Заключение
Хранилище объектов - простое в плане понимания и
использования, но в то же время очень удобное средство для разработки
приложений. Особенно удобно то, что в хранилище можно добавить свои собственные
разработки, а также отредактировать существующие. В данной статье были освящены
все основные приёмы работы с Object Repository, а также был приведён краткий
обзор тех объектов, которые уже имеются в стандартной поставке Dephi. Успехов в
программировании!
|