(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование хранилища объектов 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. Что же это за хранилище такое, ведь там всего несколько пунктов? Ан-нет, имеющиеся в этом подменю пункты - наиболее основные. Они используются очень часто, поэтому и вынесены ближе. Среди них - новое приложение, новая форма, новый модуль и т.п.

Подменю File - New в Delphi

Однако помимо этих пунктов есть и ещё два - Other... (Другое) и Customize (Настроить под себя). Вот они-то нам и нужны. Пункт Other... открывает тот самый Object Repository, а пункт Customize позволит изменить содержимое данного меню.

Окно Object Repository

В заголовке окна - надпись "New Items", хотя и называется это хранилищем объектов. Для чего оно нужно? Всё просто: это набор заготовок самого разного типа и предназначенных для самых разных задач, проще говоря шаблоны. Используются они очень просто: выбираем то, что нужно, и получаем "бланк", который меняем так, как нам угодно. Вспомните, например, сколько раз вам приходилось создавать окно About ("О программе") в своих проектах? А ведь это окно стандартное, типичное для всех приложений. Да и общий вид у него есть, сформировавшийся со временем и привычный для всех пользователей. Вместо того, чтобы каждый раз создавать это окно заново, можно взять готовый шаблон, вписать нужные данные и окошко готово!

Итак, окно состоит из двух частей - слева находится список (дерево) категорий, а справа отображаются объекты, принадлежащие выбранной категории. В более ранних версиях Delphi окно было выполнено в виде вкладок с названиями категорий.

Окно хранилища объектов (Object Repository)

Разработчики поместили в хранилище множество интересных и полезных вещей. Что именно нам доступно, рассмотрим чуть позже.

Использование хранилища очень простое: выбираем желаемый объект, нажимаем OK и он добавляется в текущий проект (если это составная часть проекта - форма, модуль и т.п.), либо создаётся новый проект (например, если это DLL или вообще готовый проект). Добавление некоторых объектов сопровождается предварительной их настройкой - это может быть окно с предложением ввести требуемые данные, либо пошаговый мастер.

Примеры использования

Раз уж мы заговорили об окне About, давайте его и попробуем добавить в наш проект. Итак, выбираем File - New - Other. Нужный нам объект называется About box и располагается в категории Delphi Files:

Delphi Files в Object Repository (объект About box)

После нажатия OK в нашем проекте появилась новая форма с именем AboutBox и несколькими компонентами - текстовыми метками, картинкой и кнопкой. Удобно, не правда ли? Остаётся лишь вписать название программы, версию, вставить нужную иконку и окно полностью готово. Делается буквально за минуту. Создать такое окно вручную несложно, но всё же это займёт больше времени.

Окно About, созданное из заготовки в репозитории

Теперь давайте возьмём что-нибудь более интересное. Например, объект Dual list box. Как следует из названия, это окно с двумя списками. Знакомое окно? Ещё бы, ведь такие используются очень часто. Далеко ходить не надо - окно настроек проекта (Project - Options), раздел Forms. Согласитесь, что размещение такого количества компонент на форме заняло бы гораздо больше времени. Но всё это ещё не всё. В окне About за нас был автоматически создан интерфейс. А в этом примере за нас ещё и код написали! Откройте программный модуль - там не так уж и мало написано. Ну что, а каково писать всё это вручную?

Окно Dual list box из хранилища объектов - удобная и функциональная форма

Выбор способа вставки объекта в проект

При выборе в окне хранилища некоторых объектов (в основном форм) внизу появляется область выбора способа вставки объекта. Имеется 3 разных варианта. По умолчанию выбран вариант Copy. С использованием этого варианта ничего "плохого" сделать не удастся, так что можно безболезненно экспериментировать.

Способ вставки объекта в проект - Copy, Inherit или Use

Итак, разберём, в чём смысл каждого из способов.

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.

Окно добавления созданной формы в хранилище объектов (Add to Repository)

После этого в окне хранилища появится созданная нами форма.

Созданная форма в списке (категория Delphi Files)

Если нужно добавить не отдельную форму, а весь проект, то следует выбрать пункт меню Project - Add to Repository. Появится аналогичное окно, которое точно так же заполняется.

Помните, что Delphi не копирует добавляемые исходники в папку ObjRepos, поэтому лучше сразу сохранять их туда самостоятельно, чтобы избежать случайного переноса или удаления файлов.

Редактор Object Repository

Для редактирования имеющихся объектов существует простой редактор, который вызывается командой Tools - Repository. В этом окне можно удалить или изменить существующие объекты.

Заключение

Хранилище объектов - простое в плане понимания и использования, но в то же время очень удобное средство для разработки приложений. Особенно удобно то, что в хранилище можно добавить свои собственные разработки, а также отредактировать существующие. В данной статье были освящены все основные приёмы работы с Object Repository, а также был приведён краткий обзор тех объектов, которые уже имеются в стандартной поставке Dephi. Успехов в программировании!

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 14.10.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
NERO 2016 Classic ESD. Электронный ключ
Bamboo
ABBYY Lingvo x6 Английская Домашняя версия, электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мир OLAP и Business Intelligence: новости, статьи, обзоры
Проект mic-hard - все об XP - новости, статьи, советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100