Использование хранилища объектов Delphi
Введение
Начиная делать новую программу, мы обычно не задумываемся над тем, а обязательно ли делать всё в нуля, с самого-самого начала? С большой долей вероятности в каждой программе есть та или иная часть, присутствующая в других, ранее созданных программах. Когда мы пишем заявление или заполняем какую-нибудь бумажную анкету, мы ведь используем не чистый лист бумаги - в нём уже написана или напечатана некоторая заготовка. Встаёт вопрос: а каким образом можно применить это в программировании? Можно ли сократить время на создании стандартных интерфейсов и написании стандартного кода? В данной статье я буду рассматривать работу в 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. Успехов в программировании!
Автор: Ерёмин А.А.
Статья добавлена: 21 февраля 2009
Следующая статья: Леворекурсивный парсер »
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Статьи, похожие по тематике
- Выравнивание компонентов
- О костылях
- Обучающий курс. 2. Первое знакомство
- Обучающий курс. 3. Работа с компонентами в дизайнере форм
- Обучающий курс. 4. Свойства в Delphi
- Обучающий курс. 5. Управление проектом
- Обучающий курс. 6. Обзор свойств формы
- Обучающий курс. 7. Обзор палитры компонент - Standard, Additional
- Рефакторинг
- Формат файлов RES применительно к BITMAP-ресурсам
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
{{a:51}} (буква a — латинская) — только адрес статьи (URL);
{{статья:51}} — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Пока нет комментариев к данной статье. Оставьте свой и он будет первым.
Оставлять комментарии к статьям могут только зарегистрированные пользователи.