Оглавление
Работав BorlandC++ Builder
Среда разработкиC++ Builder
C++ Builder представляетсобой SDI-приложение, главное окнокоторого содержитнастраиваемуюинструментальнуюпанель (слева)и палитру компонентов(справа). Помимоэтого, по умолчаниюпри запускеC++ Builderпоявляютсяокно инспектораобъектов (слева)и форма новогоприложения(справа). Подокном формыприложениянаходится окноредакторакода.
Формы являютсяосновой приложенийC++ Builder. Созданиепользовательскогоинтерфейсаприложениязаключаетсяв добавлениив окно формыэлементовобъектов C++ Builder, называемыхкомпонентами.КомпонентыC++ Builder располагаютсяна палитрекомпонентов, выполненнойв виде многостраничногоблокнота. ВажнаяособенностьC++ Builder состоит втом, что он позволяетсоздаватьсобственныекомпонентыи настраиватьпалитру компонентов, а также создаватьразличныеверсии палитрыкомпонентовдля разныхпроектов. КомпонентыC++ Builder
Компонентыразделяютсяна видимые(визуальные)и невидимые(невизуальные).Визуальныекомпонентыпоявляютсяво время выполненияточно так же, как и во времяпроектирования.Примерамиявляются кнопкии редактируемыеполя. Невизуальныекомпонентыпоявляютсяво время проектированиякак пиктограммына форме. Ониникогда невидны во времявыполнения, но обладаютопределеннойфункциональностью(например, обеспечиваютдоступ к данным, вызывают стандартныедиалоги Windows идр.)
Для добавлениякомпонентав форму можновыбрать мышьюнужный компонентв палитре ищелкнуть левойклавишей мышив нужном местепроектируемойформы. Компонентпоявится наформе, и далееего можно перемещать, менять размерыи другие характеристики.
Каждый компонентC++ Builder имеет триразновидностихарактеристик: свойства, событияи методы.
Если выбратькомпонент изпалитры и добавитьего к форме, инспекторобъектовавтоматическипокажет свойстваи события, которыемогут бытьиспользованыс этим компонентом.В верхней частиинспектораобъектов имеетсявыпадающийсписок, позволяющийвыбирать нужныйобъект из имеющихсяна форме. Свойствакомпонентов
Свойстваявляются атрибутамикомпонента, определяющимиего внешнийвид и поведение.Многие свойствакомпонентав колонке свойствимеют значение, устанавливаемоепо умолчанию(например, высотакнопок). Свойствакомпонентаотображаютсяна страницесвойств (Properties).Инспекторобъектов отображаетопубликованные(published) свойствакомпонентов.Помимо published-свойств, компонентымогут и чащевсего имеютобщие (public), опубликованныесвойства, которыедоступны тольково время выполненияприложения.Инспекторобъектов используетсядля установкисвойств вовремя проектирования.Список свойстврасполагаетсяна страницесвойств инспектораобъектов. Можноопределитьсвойства вовремя проектированияили написатькод для видоизменениясвойств компонентаво время выполненияприложения.
При определениисвойств компонентаво время проектированиянужно выбратькомпонент наформе, открытьстраницу свойствв инспектореобъектов, выбратьопределяемоесвойство иизменить егос помощью редакторасвойств (этоможет бытьпростое поледля ввода текстаили числа, выпадающийсписок, раскрывающийсясписок, диалоговаяпанель и т.д.).События
Страницасобытий (Events) инспектораобъектов показываетсписок событий, распознаваемыхкомпонентом(программированиедля операционныхсистем с графическимпользовательскиминтерфейсом, в частности, для Windows 95 или Windows NT преполагает описаниереакции приложенияна те или иныесобытия, а самаоперационнаясистема занимаетсяпостояннымопросом компьютерас целью выявлениянаступлениякакого-либособытия). Каждыйкомпонент имеетсвой собственныйнабор обработчиковсобытий. В C++Builder следует писатьфункции, называемыеобработчикамисобытий, и связыватьсобытия с этимифункциями.Создавая обработчиктого или иногособытия, выпоручаетепрограммевыполнитьнаписаннуюфункцию, еслиэто событиепроизойдет.
Для того чтобыдобавить обработчиксобытий, нужновыбрать наформе с помощьюмыши компонент, которому необходимобработчиксобытий, затемоткрыть страницусобытий инспектораобъектов идважды щелкнутьлевой клавишеймыши на колонкезначений рядомс событием, чтобы заставитьC++ Builder сгенерироватьпрототип обработчикасобытий и показатьего в редакторекода. При этомавтоматическигенерируетсятекст пустойфункции, и редактороткрываетсяв том месте, где следуетвводить код.Курсор позиционируетсявнутри операторныхскобок {… }. Далеенужно ввестикод, которыйдолжен выполнятьсяпри наступлениисобытия. Обработчиксобытий можетиметь параметры, которые указываютсяпосле именифункции в круглыхскобках. Методы
Метод являетсяфункцией, котораясвязана скомпонентом, и которая объявляетсякак часть объекта.Создавая обработчикисобытий, можновызывать методы, используяследующуюнотацию: ->, например:
Edit1->Show();
Отметим, чтопри созданииформы связанныес ней модульи заголовочныйфайл с расширением*.h генерируютсяобязательно, тогда как присоздании новогомодуля он необязан бытьсвязан с формой(например, еслив нем содержатсяпроцедурырасчетов). Именаформы и модуляможно изменить, причем желательносделать этосразу послесоздания, покана них не появилосьмного ссылокв других формахи модулях. Менеджерпроектов
Файлы, образующиеприложение- формы и модули- собраны в проект.Менеджер проектовпоказываетсписки файлови модулей приложенияи позволяетосуществлятьнавигацию междуними. Можновызвать менеджерпроектов, выбравпункт менюView/ProjectManager.По умолчаниювновь созданныйпроект получаетимя Project1.cpp.
По умолчаниюпроект первоначальносодержит файлыдля одной формыи исходногокода одногомодуля. Однакобольшинствопроектов содержатнесколько форми модулей. Чтобыдобавить модульили форму кпроекту, нужнощелкнуть правойкнопкой мышии выбрать пунктNewFormиз контекстногоменю. Можнотакже добавлятьсуществующиеформы и модулик проекту, используякнопку Addконтекстногоменю менеджерапроектов ивыбирая модульили форму, которуюнужно добавить.Формы и модулиможно удалитьв любой моментв течение разработкипроекта. Однако, из-за того, чтоформа связанывсегда с модулем, нельзя удалитьодно без удалениядругого, заисключениемслучая, когдамодуль не имеетсвязи с формой.Удалить модульиз проектаможно, используякнопку Removeменеджерапроектов.
Если выбратькнопку Optionsв менеджерепроектов, откроетсядиалоговаяпанель опцийпроекта, в которойможно выбратьглавную формуприложения, определить, какие формыбудут создаватьсядинамически, каковы параметрыкомпиляциимодулей (в томчисле созданныхв Delphi, так как C++ Builderможет включатьих в проекты)и компоновки.
Важным элементомсреды разработкиC++ Builderявляется контекстноеменю, появляющеесяпри нажатиина правую клавишумыши и предлагающеебыстрый доступк наиболеечасто используемымкомандам.
Разумеется,C++ Builderобладает встроеннойсистемойконтекстно-зависимойпомощи, доступнойдля любогоэлемента интерфейсаи являющейсяобширным источникомсправочнойинформациио C++ Builder.Созданиеприложенийв C++Builder
Первым шагомв разработкеприложенияC++ Builderявляется созданиепроекта. Файлыпроекта содержатсгенерированныйавтоматическиисходный текст, который становитсячастью приложения, когда оноскомпилированои подготовленок выполнению.Чтобы создатьновый проект, нужно выбратьпункт менюFile/NewApplication.
C++ Builderсоздает файлпроекта с именемпо умолчаниюProject1.cpp, а также make-файлс именем поумолчаниюProject1.mak. При внесенииизменений впроект, таких, как добавлениеновой формы,C++ Builderобновляет файлпроекта.
Проект илиприложениеобычно имеютнесколько форм.Добавлениеформы к проектусоздает следующиедополнительныефайлы:
Файл формы с расширением .DFM, содержащий информацию о ресурсах окон для конструирования формы
Файл модуля с расширением .CPP, содержащий код на C++.
Заголовочный файл с расширением .H, содержащий описание класса формы.
Когда выдобавляетеновую форму, файл проектаавтоматическиобновляется.
Для того чтобыдобавить однуили более формк проекту, выберитепункт менюFile/NewForm.Появится пустаяформа, котораябудет добавленак проекту. Можновоспользоватьсяпунктом менюFile/New, выбрать страницуFormsи выбрать подходящийшаблон из репозиторияобъектов.
Для того, чтобы простооткомпилироватьтекущий проект, из меню Compileнужно выбратьпункт менюCompile.Для того чтобыоткомпилироватьпроект и создатьисполняемыйфайл для текущегопроекта, изменю Runнужно выбратьпункт меню Run.Компоновкапроекта являетсяинкрементной(перекомпилируютсятолько изменившиесямодули).
Если привыполненииприложениявозникаетошибка временивыполнения,C++ Builderделает паузув выполнениипрограммы ипоказываетредактор кодас курсором, установленнымна операторе, являющемсяисточникомошибки. Преждечем делатьнеобходимуюкоррекцию, следует перезапуститьприложение, выбирая пунктменю Runиз контекстногоменю или изменю Run, закрыть приложениеи лишь затемвносить измененияв проект. В этомслучае уменьшитсявероятностьпотери ресурсовWindows.
КомпонентыBorlandC++ Builder
Выбор компонентовдля групповыхопераций
Для эффективнойразработкипользовательскихинтерфейсовприложенийC++ Builder нередковозникаетнеобходимостьв манипулированиикомпонентамина формах.Большинствоопераций дляманипулированиякомпонентаминаходятся вменю Edit: К различнымопциям этогоменю следуетобращатьсяпосле того, какна форме вы ранодин или несколькокомпонентов, свойства которыхтребуетсяизменить.
Выбрать одинкомпонент можноследующимиспособами:
Выбрав с помощью мыши компонент на форме
Выбрав имя компонента в селекторе объектов.
Переходом к компоненту на форме, нажимая клавишу Tab.
Выбратьнесколькокомпонентовможно следующимиспособами:
Удерживая нажатой клавишу Shift, щелкнуть мышью на каждом компоненте.
Нажать левую клавишу мыши и окружить нужные компоненты прямоугольным контуром.Установкаразделяемыхсвойств компонентов
Большинствовизуальныхкомпонентовимеют общиесвойства, (например,Visible, Width, Left). Для установкиодинаковыхзначений общихсвойств длянесколькихкомпонентовнеобходимовыполнитьследующиедействия:
1. Выбратьнескольконастраиваемыхкомпонентов.При этом страницасвойств объектовбудет отображатьтолько те свойства, которые имеютсяу всех выбранныхкомпонентов.
2. Установитьзначения свойств, общих для выделенныхкомпонентов.Изменениеразмера компонентов
Изменениеразмера компонентаможно проводитькак при добавленииего на форму, так и послеэтого.
При добавлениикомпонентаследует выбратьего на палитрекомпонентов.Далее нужнопоместитькурсор мышина форму, нажатьлевую клавишуи перемещатьмышь, в результатечего на формепоявитсяпрямоугольник, изображающийграницы будущегокомпонента.Когда прямоугольникприобрететнеобходимыеразмеры, нужноотпуститькнопку мыши.
Если перевестикурсор мышина один изпоявившихсявокруг компонентамаленькихчерных квадратиков, курсор мышиизменяет форму.Перемещая этоткурсор и вместес ним границукомпонента, можно изменятьего размеры.
Для измененияразмеров несколькихкомпонентовследует выбратьих одним изописанных вышеспособов. Далеенужно выбратьпункт менюEdit/Size. Появитсядиалоговоеокно Size. Выберитеопции размера.Для точнойустановкиразмера в пикселяхможно ввестичисла в поляWidth и Height. Далее нужнонажать кнопкуOK.
Можно добавитьнесколько копийкомпонентаодного типа, выбирая компонентиз палитры принажатой клавишеShift. В этом случаевокруг компонентапоявляетсяпрямоугольник, окружающийэтот компонент.После этогокаждый щелчокмышью на формеприводит кпоявлению наней копии компонента.Закончив режиммногократногокопирования, следует щелкнутьмышью на инструментевыбора курсора(первая кнопкана палитрекомпонентовс изображениемстрелки).Выравниваниекомпонентов
Для выравниваниякомпонентовна форме можноиспользоватьследующиекомбинацииклавиш:Shift + стрелки Изменяет размер компонента на один пиксель в направлении выбранной стрелки Shift + Ctrl + стрелки Перемещает компонент на одну единицу сетки в направлении выбранной стрелки Ctrl + стрелки Перемещает компонент на один пиксель в направлении выбранной стрелки
Можно такжевыровнятькомпоненты, используя пунктменю View/AlignmentPalette. Дляэтогонужно:
Выбрать компоненты для выравнивания.
Выбрать пункт меню View/Alignment Palette.
Выбрать нужную кнопку.
Можно выровнятькомпоненты, используя пунктменю Edit/Align. Для этогонужно:
Выбрать компоненты для выравнивания.
Выбрать пункт меню Edit/Align. Появится диалоговое окно Alignment.
Выбрать нужную опцию и нажать на кнопку OK.
Можно изменитьусловия выравниваниякомпонент, используя пунктменю Options/Environment. Дляэтого нужно:
1. Выбратьпункт менюOptions/Environment. Диалоговоеокно Environment появитсяоткрытым настранице Preferences.
2. В группеForm designer можно выбратьследующиеопции:
Display grid — сделать сетку из точек на форме видимой для выравниваемых компонентов
Snap to grid — заставить левые и верхние стороны компонентов расположиться на линиях сетки.
3. Для того, чтобы изменитьрасстояниемежду узламисетки, нужноввести новыезначения вместоимеющихся.Значение поумолчанию — 8пикселей пооси X (по горизонтали)и по оси Y (повертикали).
4.Нажать OK.Работас базами данныхв Borland C++ Builder.
ИспользуяBorland C++ Builder, можно создатьприложения, работающиекак с однопользовательскимибазами данных(БД), так и с сервернымиСУБД, такимикак Oracle, Sybase, Informix, Interbase, MS SQLServer, DB2, а также сODBC-источниками.ВозможностиC++ Builder, связанныес созданиемприложений, использующихбазы данных, весьма обширныдля того, чтобыописать их водной статье.Поэтому сегоднямы рассмотримлишь простейшиевозможностиработы с таблицамибаз данных.
Набор данныхв C++ Builder — это объект, состоящий изнабора записей, каждая из которых, в свою очередь, состоит изполей, и указателятекущей записи.Набор данныхможет иметьполное соответствиес реальносуществующейтаблицей илибыть результатомзапроса, онможет бытьчастью таблицыили объединятьмежду собойнесколькотаблиц.
Набор данныхв C++ Builder являетсяпотомком абстрактногокласса TDataSet (абстрактныйкласс — это класс, от которогоможно порождатьдругие классы, но нельзя создатьэкземпляробъекта данногокласса). Например, классы TQuery, TTable иTStoredProc, содержащиесяна страницепалитры компонентовData Access, — наследникиTDBDataSet, который, всвою очередь, является наследникомTDataSet. TDataSet содержитабстракции, необходимыедля непосредственногоуправлениятаблицами илизапросами, обеспечиваясредства длятого, чтобыоткрыть таблицуили выполнитьзапрос и перемещатьсяпо строкам.КомпонентTDataSource
КомпонентDataSource действуеткак посредникмежду компонентамиTDataSet (TTable, TQuery, TStoredProc) и компонентамиData Controls — элементамиуправления, обеспечивающимипредставлениеданных на форме.КомпонентыTDataSet управляютсвязями с библиотекойBorland Database Engine (BDE), а компонентDataSource управляетсвязями с даннымив компонентахData Controls.
В типичныхприложенияхБД компонентDataSource, как правило, связан с однимкомпоненомTDataSet (TTable или TQuery) и с однимили болеекомпонентамиData Controls (такими, какDBGrid, DBEdit и др.). Связьэтого компонентас компонентамиTDataSet и DataControls осуществляетсяс использованиемследующихсвойств и событий:
Свойство DataSet компонента DataSource идентифицирует имя компонента TDataSet. Можно присвоить значение свойству DataSet на этапе выполнения или с помощью инспектора объектов на этапе проектирования.
Свойство Enabled компонента DataSource активизирует или останавливает взаимосвязь между компонентами TDataSource и Data Controls. Если значение свойства Enabled равно true, то компоненты Data Controls, связанные с TDataSource, воспринимают изменения набора данных. Использование свойства Enabled позволяет временно разъединять визуальные компоненты Data Controls и TDataSource, например, для того, чтобы в случае поиска в таблице с большим количеством записей не отображать на экране пролистывание всей таблицы.
Свойство AutoEdit компонента DataSource контролирует, как инициируется редактирование в компонентах Data Controls. Если значение свойства AutoEdit равно true, то режим редактирования начинается непосредственно при получении фокуса компонентом Data Controls, связанным с данным компонентом TDataSet. В противном случае режим редактирования начинается, когда вызывается метод Edit компонента TDataSet, например, после нажатия пользователем кнопки Edit на компоненте DBNavigator. · Событие OnDataChange компонента DataSource наступает, когда происходит изменение значения поля, записи, таблицы, запроса.
Событие OnUpdateData компонента DataSource наступает, когда пользователь пытается изменить текущую запись в TDataSet. Обработчик этого события следует создавать, когда требуется соблюсти условия ссылочной целостности или ограничения, накладываемые на значения полей изменяемой базы данных.КомпонентTTable
Наиболеепростым способомобращения ктаблицам базданных являетсяиспользованиекомпонентаTTable, предоставляющегодоступ к однойтаблице. Дляэтой цели наиболеечасто используютсяследующиесвойства:
Active — указывает, открыта (true) или нет (false) данная таблица.
DatabaseName — имя каталога, содержащего искомую таблицу, либо псевдоним (alias) удаленной БД (псевдонимы устанавливаются с помощью утилиты конфигурации BDE, описание которой присутствует во многих источниках, посвященных продуктам Borland, либо с помощью SQL Explorer, вызываемого с помощью пункта меню Database/Explore). Это свойство может быть изменено только в случае, если таблица закрыта (ее свойство Active равно false), например:
Table1->Active= false;
Table1->DatabaseName= «BCDEMOS»
Table1->Active= true;
TableName — имя таблицы.
Exclusive — если это свойство принимает значение true, то никакой другой пользователь не может открыть таблицу, если она открыта данным приложением. Если это свойство равно false (значение по умолчанию), то другие пользователи могут открывать эту таблицу.
IndexName — идентифицирует вторичный индекс для таблицы. Это свойство нельзя изменить, пока таблица открыта.
MasterFields — определяет имя поля для создания связи с другой таблицей.
MasterSource — имя компонента TDataSource, с помощью которого TTable будет получать данные из связанной таблицы.
ReadOnly — если это свойство равно true, таблица открыта в режиме «только для чтения». Нельзя изменить свойство ReadOnly, пока таблица открыта.
Eof, Bof — эти свойства принимают значение true, когда указатель текущей записи расположен на последней или соответственно первой записи таблицы.
Fields — массив объектов TField. Используя это свойство, можно обращаться к полям по номеру, что удобно, когда заранее неизвестна структура таблицы:
Edit1->Text=Table1->Fields[2]->AsString;
Наиболеечасто при работес компонентомTTable используютсяследующиеметоды:
Open и Close устанавливают значения свойства Active равными True и False соответственно.
Refresh позволяет заново считать набор данных из БД.
First, Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую и предыдущую записи соответственно, например:
Table1->First();
while(!Table1->Eof)
{
//что-тоделаем...
Table1->Next();
};
MoveBy перемещает указатель на указанное число строк (оно может быть и отрицательным) в пределах таблицы
Insert, Edit, Delete, Append — переводят таблицу в режимы вставки записи, редактирования, удаления, добавления записи соответственно.
Post — осуществляет физическое сохранение измененных данных. Например:
Table2->Insert();
Table2->Fields[0]->AsInteger= 100;
Table2->Fields[1]->AsString=Edit1->Text;
Table2->Post();
Cancel — отменяет внесенные изменения, не сохраненные физически.
FieldByName — предоставляет возможность обращения к данным в полях по имени поля:
S=Table1->FieldByName(«area»)->AsString;
SetKey переключает таблицу в режим поиска.
GotoKey начинает поиск строки, значение Fields[n] которой равно выбранному, где n — номер колонки таблицы, начиная с 0:
Table1->SetKey();
Table1->Fields[0]->AsString=Edit1->Text;
Table1->GotoKey();
SetRangeStart, SetRangeEnd, ApplyRange позволяют выбрать нужные строки на основе диапазона значений какого-либо поля.
Table1->SetRangeStart();
Table1->Fields[0]->AsString= Edit1->Text;
Table1->SetRangeEnd();
Table1->Fields[0]->AsString= Edit2->Text;
Table1->ApplyRange();
FreeBookmark, GetBookmark, GotoBookmark- позволяют создать помеченную строку в таблице и затем вернуться к ней позже. Методы Bookmark используют класс TBookmark. Метод GetBookmark устанавливает закладку на текущей cтроке таблицы. GotoBookmark осуществляет перемещение в таблице к строке, ранее отмеченной закладкой. Метод FreeBookmark используется для уничтожения объекта типа TBookmark:
TBookmarkMarker=Table1->GetBookmark();
Table1->GotoBookmark(Marker);
Table1->FreeBookmark(Marker);
Cобытия компонентаTTable позволяютстроить иконтролироватьповедениеприложе ий БД.Например, событиеBeforePost наступаетперед вставкойили изменениемзаписи, событиеAfterPost — после сохранениявставленнойили измененнойзаписи, событиеAfterDelete — после удалениязаписи и т.д.
Чтобы внестикомпонентTTable в форму, нужновыполнитьследующее:
1. Используястраницу Data Accessпалитры компонентов, разместитькомпонентTTable на форме илив модуле данных.
2. СвойствуDatabaseName присвоитьимя каталога, где находитсяБД, либо псевдоима БД.
3. СвойствуTableName присвоитьимя таблицыили выбратьтаблицу извыпадающегосписка.
4. Внести вформу компонентDataSource и установитьзначение свойстваDataSet равным именикомпонентаTTable.
5. Внести компонентыData Controls и связатьих с компонентомDataSource для того, чтобыотобразитьна экране данныеиз таблицы БД.КомпонентTField
Объекты классаTField являютсясвойствомобъекта TDataSet (напомним, что некоторыесвойства объектовсами являютсяобъектами сих собственныминаборами свойств, и TField — один из них).
СвойствоFields объекта типаTDataSet позволяетобращатьсяк отдельнымполям набораданных. СвойствоFields являетсямассивом илинабором объектовTField, динамическисоздающимсяво время выполненияприложения.Элементы массивасоответствуютколонкам таблицы.
Объект TField неделает никакихпредположенийотносительнотипов данных, с которыми онсвязан. Он имеетнесколькосвойств, позволяющихустановитьили вернутьобратно значенияполя, например,AsString, AsBoolean, AsFloat, AsInteger. Наиболеечасто используютсясвойства Text (cтрокатекста, выводимогов связанныйс данным полеминтерфейсныйэлемент) и FieldName(имя поля базыданных).
Fields Editor позволяетсоздать такназываемыйстатическийсписок полейтаблицы, добавляемыхк описаниюкласса формы.Когда впервыеиспользуютсятакие компонентыTDataSet, как компонентTTable или TQuery, списокполей для нихдинамическигенерируетсяв процессевыполненияприложенияна основе имеющихсястолбцов таблицили результатовSQL-запроса. Fields Editorпозволяетопределитьи затем модифицироватьстатическийсписок компонентовField на этапепроектированияприложения.При внесенииколонок сиспользованиемFields Editor для каждогоиз полей, добавленныхк TDataSet, возникаютобъекты TField, послечего можноувидеть этиполя в инспектореобъектов ииспользоватьв приложенияхих свойства, события и методы.
ИспользоватьFields Editor нужно следующимобразом:
Разместить компонент TTable или TQuery на форме.
Установить свойство DatabaseName для TTable или TQuery.
Установить свойство TableName компонента TTable или свойство SQL компонента TQuery.
Выбрать компонент TDataSet на форме и нажать правую клавишу мыши, после чего появится контекстное меню.
Из контекстного меню выбрать Fields Еditor. Появится пустое окно с заголовком, совпадающим с именем компонента TTable.
Снова нажать правую клавишу мыши над пустым окном и из контекстного меню выб ать опцию Add Fields.Имена всех колонок таблицы или запроса появятся в диалоговой панели Add Fields.
Выбрать поля, которые нужно внести в список объектов, и нажать OK.
Если требуется создать вычисляемое поле на основе имеющихся полей, нажать правую клавишу мыши и из контекстного меню выбрать New Field для создания нового поля на основе существующего или для создания вычисляемого поля (в дальнейшем следует создать код обработчика события OnCalcFields компонента TTable, где и производятся необходимые вычисления).
Если необходимо удалить статическое поле из списка полей в наборе данных, нужно нажать правую клавишу мыши и из контекстного меню выбрать Delete.
После того, как в Fields Editor добавленыполя, они появятсяв инспектореобъектов, ассылки на них- в h-файле формы.
Если теперьприменитьоперациюdrag-and-drop к выделеннымв Fields Editor полям, перенесяих на форму, томожно получитьготовую формус необходимымнабором интерфейсныхэлементов (внашем случае- DBEdit, позволяющийотображатьи редактироватьстроковые, числовые, денежныеи другие поля, чьи значенияпредставимыв виде строкисимволов, иDBImage, позволяющийотображатьграфическиеполя и использоватьClipboard для их редактирования).Если к такойформе добавитькомпонентTDBNavigator (этот компонентреализуетосновные методыTTable и TQuery, связанныес редактированиемданных) и связатьего с имеющимсякомпонентомTDataSource, а затемскомпилироватьпроект, получимприложениедля просмотраи редактированияданных в таблице.
При работеFields Editor создаютсяобъекты, соответствующиевидимым в инспектореобъектов полям.Эти объектыявляются потомкамиобъектноготипа TField. Таблица1 описываетсуществующиеклассы такихобъектов:
Таблица 1.Потомки TField Потомок Описание TStringField Текстовые данные фиксированной длины до 8192 символов. TAutoIncField Целые числа от -2,147,483,648 до 2,147,483,647. Предназначен для нумерации ст ок в наборе данных. Потомок TIntegerField. TIntegerField Целые числа от -2,147,483,648 до 2,147,483,647. TSmallIntField Целые числа от -32768 до 32767. TWordField Целые числа от 0 до 65535. TFloatField Действительные числа с абсолютной величиной от 1.2x10e-324 до 1.7x10e308 с точностью до 15-16 цифры. TCurrencyField Действительные числа с абсолютной величиной от 1.2x10e-324 до 1.7x10e308 с точностью до 15-16 цифры. TBooleanField Значения true или false. TDateTimeField Значения даты и времени. TDateField Значения даты. TTimeField Значения времени. TBlobField Произвольное поле данных без ограничений размера. TBytesField Произвольное поле данных без ограничений размера. TVarBytesField Произвольное поле данных до 65535 символов с фактической длиной, представленной в первых двух байтах. TMemoField Текст произвольной длины. TGraphicField Графическое поле произвольной длины, например, битовый массив. КомпонентTDBGrid
КомпонентTDBGrid обеспечиваеттабличныйспособ отображенияна экране строкданных из компонентовTTable или TQuery. Приложениеможет использоватьTDBGrid для отображения, вставки, уничтожения, редактированияданных БД. ОбычноDBGrid используетсяв сочетаниис DBNavigator, хотя можноиспользоватьи другие интерфейсныеэлементы, включивв их обработчикисобытий методыFirst, Last, Next, Ptior, Insert, Delete, Edit, Append, Post, CancelкомпонентаTTable.
Внешний видтаблицы (например, надписи в заголовкахстолбцов) можетбыть измененс помощью редакторасвойств Columns Editor. Длявызова Columns Editor нужнолибо выбратьсоответствующуюопцию в контекстномменю компонентаDBGrid или щелкнутьмышью в колонкезначений напротивсвойства Columns винспектореобъектов.
Вторым способомполученияконтроля надхарактеристикамиDBGrid или другимикомпонентамиявляется созданиеописанным вышеспособом статическогонабора компонентовTField. Имея компоненттипа TField, созданныйдля каждогоиз полей в набореданных, можноустановитьширину, формат, маску, расположение, метку для отображенияв DBGrid и другиехарактеристики.
Поля Float, Integer и Dateобладают свойствомDisplayMask. Это свойствоможно использовать, чтобы форматироватьданные в компонентеDBGrid или другомкомпонентеData Controls. Например, экранный форматmm-dd-yy может использоватьсядля размещенияполей типадата.
НекоторыекомпонентыTField (например,TStringField) обладаютсвойствомEditMask, которое можноустановить, вводя данныев DBGrid и другиекомпонентыData Controls. Для установкисвойства EditMaskнужно установитькомпонент Fieldв Object Inspector и выбратьсвойство EditMask, после чегопоявится диалоговаяпанель Input Mask Editor,. Чтобыпроверить маскуредактирования, нужно ввестизначение в полеTest Input.Поставкаприложений, созданных спомощью С++ Builder
--PAGE_BREAK--
Одной изважнейшихпроблем приразработкезаказных программныхпродуктовявляетсяокончательнаясборка проектаи поставкаприложений.Эта проблемаможет бытьрешена различнымиспособами взависимостиот условийпоставки, числаустановок, состава поставляемогопродукта.Поставкаисполняемыхфайлов
При окончательнойсборке исполняемогофайла (то естьнепосредственноперед созданиемдистрибутива)следует убратьиз исполняемогофайла отладочнуюинформацию.Для этого следуетиз менеджерапроектов вызватьдиалоговуюпанель Project Options инажать кнопкуRelease.
Если в проектеиспользуютсямодули и формыDelphi, следует отключитьвсе опции всекции Debugging и включитьопцию Optimization в секцииCode Generation на страницеPascal.
В той же диалоговойпанели следуетвыбрать пиктограммуприложения(страницаApplication). Eе можно создатьс помощью входящегов комплектпоставки С++Builder графическогоредактора, который можнозапустить, выбрав пунктменю Tools/image Editor. Помимоэтого, следуетуказать названиеприложения(то есть строку, которая будетотображатьсяв панели задачWindows) и имя файласправки, в которомсодержатсяэкраны контекстно-зависимойпомощи.
Если ссылкана справочныйфайл присутствуетв опциях проекта, можно связатьэкраны помощис интерфейснымиэлементамиприложения.Для этой целиследует установитьзначения свойстваHelpContext интерфейсныхэлементовприложенияравным номерамразделовсоответствующихэкранов помощииз секции [MAP] файлапроекта справки.В этом случаепосле компиляцииприложениянажатие наклавишу F1 будетвыводить наэкран окносправочнойсистемы с разделомсправки, описывающиминтерфейсныйэлемент, имеющийфокус ввода.Установкаи настройкаBorland Database Engine
Если приложениене используетбазы данных, в большинствеслучаев будетдостаточнопросто скопироватьна компьютерпользователяисполняемыйфайл и другиевходящие вкомплект поставкифайлы (например, файл справки, файл оглавлениясправки и др.).
Если приложениеиспользуетбазы данных, следует, помимоприложения, установитьна компьютерпользователябиблиотекуBorland Database Engine. Установкаэтой библиотекизаключаетсяв копированиифайлов этойбиблиотекина компьютерпользователя, внесении сведенийо ней в реестр(разделHKEY_LOCAL_MACHINE//SOFTWARE//Borland//Database Engine), установкепиктограммыдля утилитыконфигурацииBDE, а также настройкепсевдонимов, необходимыхдля корректнойработы данногоприложения.
В процессеустановки BDEмогут возникнутьследующиепроблемы. Во-первых, у пользователяна компьютеремогут бытьустановленыдругие приложения, использующиеэту библиотеку.Если скопироватьна такой компьютерфайл конфигурацииBDE поверх имеющегося, работоспособностьэтих приложенийможет бытьнарушена из-затого, что исчезнутописания псевдонимов, используемыхими. Поэтомупри добавлениисвоих псевдонимовлучше пользоватьсяопцией File/Merge утилитыконфигурацииBDE или создатьпсевдонимывручную.
Можно посмотретьна эту проблемус другой стороны.Как избежатьпотери работоспособностивашего приложения, если другойпрограммистустановит свойфайл конфигурацииBDE поверх установленноговами? Возможноерешение этойпроблемы — создаватьпсевдонимыдинамическиво время работыприложенияили анализироватьих существованиепри запускеи создаватьих, если по каким-топричинам ониисчезли. Многиеразработчикихранят информациюо них в локальныхini-файлах внеIDAPI32.CFG.
Вторая проблемаможет бытьсвязана снесовпадениемверсий BDE. Еслис момента выходаиспользуемойвами версииBDE прошло какое-товремя (а на данныймомент послеC++ Builder появилисьтакие продукты, как Delphi и IntraBuilder 1.5, содержащиеболее новуюверсию BDE, чемС++ Builder), есть рискзаменить старойверсией BDE болееновую, если накомпьютерепользователяустановленыэти средстваразработкиили созданныес их помощьюприложения, что может нарушитьих работоспособность.
Чтобы избежатьподобныхнеприятностей, можно воспользоватьсяодной недокументированнойособенностьюBDE. Дело в том, чтовремя созданияфайлов этойбиблиотекисовпадает сномером версииBDE, чем и можновоспользоваться.Путь к файламBDE следует искатьв реестре Windows(ключHKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine, параметрыCONFIGFILE01 и DLLPATH).
Обязательноследует убедиться, что эти каталогии файлы действительносуществуют.К сожалению, не все пользователиграмотнодеинсталлируютприложения.Часто бывает, что ставшийненужным каталогпросто стирается, при этом каталогс BDE может бытькак удален, аможет быть, инет. При этом, скорее всего(исключениябывают оченьредко) соответствующийключ реестрасохранится,«сбивая с толку»инсталляционноеприложение.
Отметим, чтоследует такжеустановитьна компьютерпользователянеобходимыедрайверы SQL Linksдля доступак сервернымСУБД, если онииспользуются, а также клиентскоепрограммноеобеспечениедля работы ссоответствующейсерверной СУБД(например, SQL*Netдля Oracle). Крометого, пользовательдолжен обладатьнеобходимымипривилегиямидля доступак используемымвашим приложениемобъектам базыданных — таблицам, хранимым процедурами др. Если выготовите исерверную частьприложения, следует предоставитьадминистраторубазы данныхтак называемыйDDL-сценарийсерверной части(DDL — Data Definition Language), представляющийсобой сценарийсоздания объектовбазы данных, написанныйна SQL либо на егопроцедурномрасширении, характерномдля данногосервера базданных. Подобныйсценарий можетбыть созданвручную либос помощью какого-либоCASE-средства типаERwin компании LogicWorks (CASE, что расшифровываетсякак Computer-Aided Software/System Engineering, представляетсобой технологиюпроектированияБД, основаннуюна графическомописании сущностей, атрибутов исвязей междуними).
Если вашеприложениеиспользуетODBC, следует установитьсоответствующийODBC-драйвер и, возможно,32-разрядныйODBC-администратор- он в общем случаене обязанприсутствоватьна компьютерепользователя.Установкадополнительныхкомпонентовприложения
Если вашеприложениеиспользуетActiveX-компоненты, следует установитьв каталогWindows\System соответствующийфайл *.OCX и внестив реестр соответствующиеветви (HKEY_CLASS_ROOT\CLSID\....) длярегистрациисоответствующихOLE-серверов.
Если вашеприложениеиспользуеткакие-либопродукты третьихфирм (например,Run-time-версии генераторовотчетов стороннихпроизводителей, например, CrystalReports), следуетустановитьих на компьютерпользователяв соответствиис инструкциямипо поставке, предоставленнымикомпанией-производителем.
Еще однапроблема, характернаядля русскоязычныхприложений, может бытьсвязана с отсутствиемна компьютерепользователяиспользуемыхвашим приложениемшрифтов либоотображениемих аналогов, содержащихвместо русскихбукв диакритическиесимволы европейскихалфавитов. Какрешить этупроблему?
Самый простойспособ — неиспользоватьэкзотическихшрифтов. Шрифтытипа Arial, Courier и Times New Roman, как правило, есть на всехкомпьютерах.Если же такойуверенностинет, можно либопредложитьпользователювыбирать шрифтыдля приложенияпри его запускеи сохранятьнастройки вфайлах (этонеудобно, таккак при этомнадписи могутне уместитьсяна кнопках, метки могут«наехать» другна друга и т.д.), либо инсталлироватьнужные шрифтывместе с приложением.В случае Windows 95достаточноскопироватьих в каталогFonts. Можно такжеприсвоить«своим» шрифтамуникальныенестандартныеимена, чтобыслучайно незаменить имишрифты, используемыедругими приложениями(заменив ванглоязычнойверсии Windows шрифтArial его русскоязычнойверсией, вы внекоторыхслучаях можетелишить вашегопользователявозможностиписать в текстовыхпроцессорахпо-французскиили по-немецкиэтим шрифтом).Способысозданиядистрибутивов
Прежде чемописать процесссозданиядистрибутива, рассмотрим, что именноделает инсталляционноеприложение.
Во-первых, оно, как следуетиз вышеизложенного, копирует файлы(*.exe, *.ocx, *.dll, *.hlp, шрифты, данные и др.) всоответствующиекаталоги.
Во-вторых, оно можетмодифицироватьреестр.
В- третьих, оно можетмодифицироватьпеременнуюокружения PATH.
В-четвертых, оно создаетпрограммнуюгруппу и пиктограммы, а также модифицируетменю Windows-95 или WindowsNT.
В-пятых, согласнообщепринятымстандартам, оно должнопредоставлятьпользователювозможностьвыбора параметровустановки(каталог, выборустанавливаемыхчастей приложения), чтения лицензионногосоглашенияи файла readme, содержащегопоследнююинформациюо продукте.
В-шестых, ономожет принеобходимостиперезапуститьWindows.
Как создатьинсталляционноеприложение? Существуетнескольковариантоврешения этойпроблемы. Во-первых, его можно написатьна C++ Builder или Delphi, используяфункции Windows API длямодификацииреестра согласноалгоритму, изложенномувыше. Во-вторых, такое приложениеможно создатьс использованиемгенераторовдистрибутивов(InstallShield, Wise и др.). Отметим, что использованиеэтих средствобычно подразумеваетнаписаниеспециализированногоскрипта наязыке, напоминающемС (в случаеInstalShield) или Basic (в случаеWise).
Однако самыйпростой способсоздать инсталляционноеприложение- использоватьвходящий вкомплект поставкиверсий Borland C++ Builder версийProfessional и Client/Server Suite упрощенныйгенератордистрибутивовInstall Shield Exdivss, позволяющийпредоставитьпользователювозможностьвыбора вариантаинсталляции, добавитьдеинсталлятор(точнее, файлс расширением*.isu, используемыйутилитой установкии удаленияпрограмм Windows 95), установитьBDE, добавитьпсевдонимыбаз данных, редактироватьдиалоги инсталляционногоприложения, создаватьпрограммныегруппы, создаватьдистрибутивныедискеты.
Сразу жеотметим недостаткидистрибутивов, созданных спомощью этогопродукта. Во-первых, этот продуктпредполагает, что устанавливаемая(то есть имеющаясяна компьютере, где создаетсядистрибутив)версия BDE — самаяновая, что можетпривести кзамене имеющейсяна компьютерепользователяверсии BDE на болеераннюю. Во-вторых, некоторыедиалоги инсталляционногоприложенияоказываютсяанглоязычными.
Тем не менее, если перечисленныенедостаткине очень важныили могут бытьустранены вконкретномслучае (например, путем выборавариантаинсталляции), использованиеданного средстваможет сэкономитьдовольно многовремени присоздании дистрибутиваприложения.Созданиедистрибутивовс помощьюInstallShield Exdivss
При запускеInstall Shield Exdivss появляетсяокно с радиогруппой, предлагающееоткрыть существующийпроект илисоздать новый.
При созданиинового проектаследует ввестиимя проектаи указать каталог, в котором расположеныфайлы приложения.
Флажок «Includecustom setup type» следуетвыбрать, есливы планируетепредоставитьпользователювозможностьвыбора вариантаинсталляцииCustom Setup для самостоятельноговыбора вариантаинсталляции.После этогопоявится главныйэкран InstallShield, в которомперечисленапоследовательностьшагов, которыеследует выполнитьдля созданиядистрибутива.
В разделеSet the Visual Design следуетзаполнить полясо сведениямио приложении: название приложения, как оно будетвыглядеть впрограммнойгруппе, имяисполняемогофайла, каталог, в который следуетустановитьприложение.
Отметим, чтоInstall Shield содержитнесколькопеременных, идентифицирующихдиски и каталогикомпьютерапользователя, что позволяетне знать реальнуюсистему каталогови дисков этогокомпьютера:
— каталог для установки, указанный пользователем,
— каталог, в котором содержится Windows
— каталог Windows\System
— диск, на котором содержится Windows
— диск, на котором содержится каталог Windows\System
— каталог Program Files.
Щелкнув назакладке Main Window, можно установитьзаголовокинсталляционногоприложения, цвет фона илоготип.
Щелкнув назакладке Features, можно обнаружитьодну-единственнуюопцию — Automatic Uninstaller. Еерекомендуетсяоставить выбранной.
Следующийраздел — Specify InstallShieldOptions for Borland C++ — предназначендля выборакомпонентов, часто поставляемыхс приложениями:BDE, SQL Links и др. Выбравнужный компонент(в нашем случаеBDE) и нажав кнопкуSettings, получимпоследовательностьиз четырехдиалоговыхокон для выборачастей BDE, поставляемыхс данным приложением, и созданияпсевдонимов.
При установкепараметровпсевдонимовможно выбратьтип псевдонимаи местоположениеданных. Остальныепараметрыпсевдонима(в том числе иязыковые драйверы)можно указатьв текстовомредакторе внижней частиокна.
Щелкнув позакладке AdvancedOptions, можно ознакомитьсясо спискомфайлов дополнительныхкомпонентов(в нашем случаеBDE) и сведениямио них.
Следующийраздел — Specify Components andFiles — предназначендля определениягрупп файлов, компонентовприложенияи типов установки.Щелкнув назакладке Groups, можно создатьгруппы файловдля созданияиз них компонентовдистрибутива.Можно такжеиспользоватьExplorer и переноситьиз него нужныефайлы методомdrag-and-drop (для этогонужно нажатькнопку Launch Explorer). Нерекомендуетсяоставлятьгруппы пустыми.
Щелкнув назакладке Components, можно определитькомпонентыдистрибутива(их сможет выбиратьпользовательв случае выбораварианта инсталляцииCustom, поэтому можнодать им русскоязычныеназвания) иуказать, изкаких группфайлов онисостоят. Неследует оставлятькомпоненты, не содержащиегрупп.
Следующаязакладка — SetupTypes — предназначенадля определениявариантовустановки. Еслищелкнуть наней, может оказаться, что вариантинсталляцииего один — Typical(например, вызабыли отметитьфлажок «Include custom setuptype»). В этом случаеследует выбратьраздел Select User InterfaceComponents и, щелкнувна закладкеComponents, в списке DialogBoxes отметить опцииSetup Type и Custom Setup. Послеэтого можновернуться кзакладке Setup Typesи определитьварианты инсталляции.Как правило, варианты Custom иTypical содержат всевозможныекомпоненты, а вариант Compact — минимальныйнабор компонентов, пригодный длянормальнойработы приложения.
В разделеSelect User Interface Components можновыбрать диалоги, в которыхпользовательвводит необходимуюинформациюво время инсталляции(например, сведенияо себе и компании, серийный номерпродукта), знакомитсяс лицензионнымсоглашениеми файлам readme, указываеткаталог дляинсталляции, выбирает типустановки ит.д. Возможентакже предварительныйпросмотр диалоговпри нажатиикнопки Preview.
Следующийраздел — Make Registry Changes — позволяетсоздавать накомпьютерепользователяновые ключиреестра (закладкаKeys) и значенияключей (Values). Этоможет оказатьсяполезным, есливы используетев вашем приложениикомпонентыActiveX или создаетеOLE-сервер. Ключии их значенияможно копироватьиз редакторареестра, еслион поддерживаеттакую опреацию.
Следующийраздел — Specify Folders andIcons — позволяетопределитьсостав будущейпрограммнойгруппы, а такжеопределитьпараметрыкоманднойстроки (закладкаAdvanced).
Наконец, последнийраздел — Run Disk Builder. Послесохраненияинсталляционногоскрипта (с помощьюнажатия накнопку с изображениемдискеты напанели инструментовглавного окнаInstallShield) и выборатипа носителейпроисходитсоздание нажестком дискеобразов дистрибутивныхдискет. Выбравзатем разделCreate Distribution Media, можнозаписать надискеты созданныйдистрибутив.
Опцию Test Run можноиспользоватьдля проверкиработы инсталляционногоприложения.Однако нерекомендуетсяделать это накомпьютере, где производитсяразработкаприложений.Лучше провеститестовые испытанияна компьютере, похожем накомпьютерываших пользователей.Кроме того, рекомендуетсясоздать на этомкомпьютерекопию Windows, чтобыв случае некорректнойработы инсталлятораможно быловернуть программноеобеспечениев исходноесостояние.
Запускинсталляционнойпрограммыприводит кпоследовательномупоявлениювыбранных вразделе Select UserInterface Components диалогов.
Результатомработы инсталляционногоприложенияявляется установкаприложенияи необходимыхдля его работыфайлов на компьютерпользователя, создание программнойгруппы, внесениенеобходимыхключей в реестр.
Если присоздании дистрибутивавы выбралиопцию Automatic Uninstaller, тов случае возникновениянеобходимостидеинсталляцииустановленногоприложенияследует использоватьутилиту «Установкаи удалениепрограмм» впанели управленияWindows.
Таким образом, хотя InstallShield Exdivss и нерешает полностьювсех проблем, возникающихпри поставкеприложений, с его помощьюво многих случаяхвозможно быстроесозданиедистрибутивов, удовлетворяющихсовременнымтребованиямк функциональностии дизайнуинсталляционныхприложений.
В заключениеотметим, чтопоставка приложений, созданных спомощью Delphi, осуществляетсяпрактическиточно так же, как и поставкаприложений, созданных спомощью C++ Builder.Списокиспользованнойлитературы
Джарод Холингвэрт, Дэн Баттерфилд, Боб Сворт, Джэйми Оллсоп C++Builder 5. Руководство разработчика.
Borland C++ Builder 5. Энциклопедия программиста. Калверт Ч., Рейсдорф К., «ДиаСофт» — 2001, 944 стр.
www.codenet.ru/