|
|
|||||||||||||||||||||||||||||
|
Использование хранилища объектов DelphiИсточник: 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. Успехов в программировании! Ссылки по теме
|
|