C++Builder 4: новые возможности и некоторые примеры их применения

Наталия Елманова

Изменения в среде разработки

   Менеджер проектов

   Class Explorer

   Автоматизация создания кода (Code Inside)

Новые возможности отладки приложений

Новые средства проектирования пользовательских интерфейсов

   Компонент TActionList

   «Плавающие» окна и инструментальные панели (dockable tool windows)

   Манипуляция размерами и расположением интерфейсных элементов

Поддержка сервисов Windows NT

Работа с базами данных

   Поддержка новых версий СУБД и новых типов данных

   Поддержка вложенных таблиц

   Новые возможности генерации отчетов

   Автоматизация создания приложений для публикации данных в Internet

В начале 1999 года компания Inprise Сorporation объявила о выпуске Borland С++Builder 4 — новой версии весьма популярного в нашей стране средства разработки приложений. В данной работе приводится краткий обзор новых возможностей этой версии.

Изменения в среде разработки

Новая среда разработки С++Builder содержит так называемые плавающие окна и панели, напоминающие панели инструментов MS Office. Настраивая среду разработки, можно переместить инструментальные панели в произвольное место формы, объединить несколько окон в одно, пристыковать одно окно к другому, собрать несколько окон в многостраничный блокнот. Как всегда, все особенности интерфейса среды разработки могут быть с успехом перенесены в создаваемые приложения.

В начало

В начало

Менеджер проектов

Менеджер проектов С++Builder позволяет перетаскивать имена файлов с помощью мыши из других приложений Windows и из других проектов, а также использовать буфер обмена для копирования частей одного проекта в другой проект. Помимо этого имя активного проекта теперь можно выбрать из выпадающего списка в верхней части окна. Возможно также включение в проект любых типов файлов (например, текстовых файлов с пояснениями, заранее скомпилированных объектных модулей и др.).

В начало

В начало

Class Explorer

Для навигации внутри модуля можно использовать новый инструмент среды разработки — Class Explorer, содержащий в виде иерархической структуры все типы, классы, методы, глобальные переменные и процедуры, определенные в модуле. Отметим, что этот инструмент выполнен в виде «плавающей» формы, которую можно присоединить к другому окну среды разработки, наприме, к инспектору объектов, менеджеру проектов или редактору кода.

Содержимое Class Explorer синхронизировано с содержимым редактора кода — изменения в коде отображаются в Class Explorer, то есть этот инструмент производит разбор исходного текста непосредственно во время его создания. Изменения в Class Explorer приводят к соответствующим изменениям в коде приложения. В частности, возможно визуальное редактирование классов путем добавления новых свойств, полей и методов (опции контекстного меню New Field, New Property, New Method), вызывающих соответствующие диалоговые панели:

После заполнения диалоговой панели автоматически генерируется соответствующий код объявления и реализации методов, который в дальнейшем можно отредактировать:

Положение курсора в Class Explorer синхронизировано с положением курсора в редакторе текста, что позволяет легко находить реализации методов и ссылки на используемые модули. Контекстное меню Class Explorer позволяет находить объявление и реализацию выбранного класса.

Возможен также просмотр иерархии классов приложения, также синхронизированной с редактором кода и Class Explorer: В представленном списке возможна алфавитная сортировка по любому из параметров (имени поля, типа поля и др.). Соответствующий инструмент также представляет собой «плавающую» панель.

В начало

В начало

Автоматизация создания кода (Code Inside)

Новой особенностью C++Builder является возможность отображения контекстно-чувствительных выпадающих списков методов, свойств и событий, связанных с классом объекта при вводе точки или символа указателя на объект (так называемых Code Completion dialog boxes). Из этого списка можно выбрать необходимый элемент, который будет автоматически помещен в редактируемый код.

При вводе оператора присвоения нажатие комбинации клавиш Ctrl+пробел приведет к появлению списка аргументов, допустимых для данной переменной. Нужный аргумент можно выбрать из списка.

При вводе имени функции и открытой скобки нажатие комбинации клавиш Shift+Ctrl+пробел приводит к появлению списка аргументов данной функции.

Отметим, что указанные выше опции (Code Completion, Code Parameters) могут быть включены (тогда соответствующие списки появляются автоматически при вводе кода в редакторе) либо отключены (тогда для отображения этих окон требуется ввод указанных выше комбинаций клавиш).

Отметим также, что редактор кода теперь может использовать «горячие клавиши» Visual Studio, что облегчает пользователям этого продукта применение C++Builder.

В начало

В начало

Новые возможности отладки приложений

В C++Builder 4 появились новые возможности отладки приложений. В частности, поддерживается удаленная отладка исполняемых файлов и динамически загружаемых библиотек. Возможна отладка нескольких процессов (в том числе удаленных):

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

Возможен также просмотр загруженных модулей и потоков для нескольких процессов.

В С++Builder 4 возможна также отладка распределенных приложений (использующих как COM, так и CORBA).

В С++Builder 4 возможна отладка процессов, запущенных вне среды разработки (если соответствующие исполняемые файлы содержат отладочную информацию). При пошаговой отладке внутри функции возможно ее прекращение до возврата в вызывающую функцию, если нет дальнейшей необходимости в отладке вызванной функции.

Возможна также установка правил обработки исключений, вывода сведений о событиях в Log-файл. Для этой цели в среду разработки добавлен диалог Debugger Options.

В начало

В начало

Новые средства проектирования пользовательских интерфейсов

Компонент TActionList

На странице Standard палитры компонентов C++Builder 4 появился новый компонент TActionList. Он предназначен для упорядочения обработчиков событий различных интерфейсных элементов (меню, инструментальных панелей, кнопок и др.). Нередко при использовании широкого спектра интерфейсных элементов и изменения их поведения на этапе выполнения (например, изменения доступности некоторых элементов меню) отслеживание связей интерфейсных элементов и имеющихся в приложении процедур становится затруднительным. Теперь можно имеющиеся в приложении процедуры сделать обработчиками событий компонентов TAction, коллекция которых может быть свойством Actions компонента TActionList.

Рассмотрим в качестве иллюстрации следующий пример. Поместим на форму компонент TImageList, добавим в него какие-нибудь изображения из каталога Common Files\Borland Shared\Images\Buttons (например, FileOpen.bmp, FileNew.bmp, FileSave.bmp, FileClose.bmp).

Далее поместим на форму компонент TActionList. С помощью его редактора свойств создадим несколько объектов TAction, присвоим им имена, установим соответствующие значения свойств Caption и ImageIndex и создадим для каждого из них какие-нибудь обработчики событий OnExecute.

Теперь поместим на форму компонент TToolBar, добавив к нему четыре кнопки TToolButton, четыре компонента TButton, одно главное меню и одно popup-меню. У всех этих компонентов есть свойство Action, и, если выбрать его из выпадающего списка, соответствующий интерфейсный элемент будет обладать соответствующим набором свойств (надписью, графическим изображением) и обработчиком событий OnClick (у компонентов TMainMenu, TPopupMenu и TToolBar перед этим следует установить значение свойства Images, выбрав компонент ImageList1).

Помимо добавления собственных объектов TAction можно использовать готовые шаблоны таких объектов для выполнения стандартных операций:

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

В начало

В начало

«Плавающие» окна и инструментальные панели (dockable tool windows)

Одним из новшеств в создании пользовательского интерфейса приложений, отвечающего современным стандартам, является поддержка «плавающих» окон и инструментальных панелей. Все наследники TControl могут быть превращены в дочерние «плавающие» окна (наподобие инструментальных панелей MS Office), а наследники компонента TWinControl могут выполнять роль объектов, к которым эти окна могут приcтыковываться. Помимо этого «плавающие» формы могут образовывать страницы многостраничного блокнота, что само по себе является новшеством в создании пользовательских интерфейсов.

Рассмотрим простейший пример, иллюстрирующий эти возможности. Создадим проект, содержащий три формы.

На главную форму поместим кнопку и компонент TPageControl:

Установим следующие значения свойств компонентов приложения:

Компонент Свойство Значение
PageControl1 Align alBottom
  DockSite true
  DragKind dkDock
Form2 UseDockManager true
  DragKind dkDock
  DragMode dmAutomatic
Form3 UseDockManager true
  DragKind dkDock
  DragMode dmAutomatic

Сошлемся на модули, связанные с формами Form2 и Form3, в модуле, связанном с главной формой приложения, и создадим обработчик события, связанного с нажатием на кнопку:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form3->Show();
Form2->Show();
}

В процессе выполнения приложения после нажатия на кнопку появятся две дополнительные формы — Form2 и Form3, которые можно переместить на блокнот, после чего в нем образуются страницы с именами Form2 и Form3. Изъять форму из блокнота можно, перемещая соответствующий ярлычок с помощью мыши, — ярлычок при этом превратится в заголовок формы.

Отметим, что можно также превратить в «плавающие» окна интерфейсные элементы форм, например панели.

Из компонентов, поддерживающих «плавающие» интерфейсные элементы, особенно хотелось бы отметить TControlBar — компонент, служащий контейнером для любого интерфейсного элемента C++Builder и позволяющий пользователю на этапе выполнения перемещать внутри него интерфейсные элементы по своему усмотрению на этапе выполнения.

Следует также обратить внимание на то, что сама среда разработки C++Builder 4 почти целиком состоит из «плавающих» форм и панелей. В частности, почти все окна отладчика, Code Explorer, инспектор объектов, менеджер проектов, элементы инструментальной панели выполнены в виде «плавающих» форм.

В начало

В начало

Манипуляция размерами и расположением интерфейсных элементов

Из других новых возможностей C++Builder 4, связанных с созданием пользовательского интерфейса, следует отметить возможность ограничения размеров компонентов и форм. Теперь наследники компонента TControl в C++Builder 4 обладают свойством Constraints, определяющим максимально и минимально возможные значения ширины и высоты компонента или формы; при этом это свойство передается компоненту-контейнеру, содержащему такой компонент, если последний имеет свойство Align, отличное от alNone.

Помимо этого интерфейсные элементы имеют также свойство Anchors, указывающее на то, с каким из краев формы или компонента-контейнера связан данный интерфейсный элемент.

В качестве примера создадим форму, содержащую панель, ListBox и четыре кнопки.

Установим следующие значения подсвойств Top,Left,Bottom,Right свойства Anchors для этих компонентов:

Компонент Top Left Bottom Right
Panel1 + + + +
ListBox1 + + +  
YesBtn +     +
NoBtn       +
CancelBtn     + +
HelpBtn     + +

Теперь при изменении размера формы компоненты будут перемещаться вместе с теми краями содержащих их контейнеров, которые выбраны в свойстве Anchors, и при необходимости менять размер.

Если теперь установить для компонента Panel1 в свойстве Constraints минимальную ширину и высоту, то при уменьшении размеров формы поведение этого компонента несколько изменится:

В начало

В начало

Поддержка сервисов Windows NT

В C++Builder 4 имеется возможность создания приложений-сервисов Windows NT, выполняющихся в фоновом режиме и стартующих при загрузке операционной системы. С этой целью в репозитарии объектов имеются два дополнительных шаблона для создания подобных приложений: Service и Service Application.

В начало

В начало

Работа с базами данных

Поддержка новых версий СУБД и новых типов данных

Библиотека Borland Database Engine (BDE) теперь поддерживает Access ’97 и Oraclе 8, при этом поддерживаются новые расширения Oracle 8, такие, как абстрактные типы данных (ADT — Abstract Data Type), массивы, ссылки, вложенные таблицы. В соответствии с этим созданы новые классы объектов — потомков TField: TADTField, TReferenceField, TDataSetField, TArrayField.

В начало

В начало

Поддержка вложенных таблиц

Компонент TDBGrid теперь может отображать вложенные таблицы. Для иллюстрации этой возможности воспользуемся таблицами customer.db, orders.db и items.db, поставляемыми вместе с С++Builder. Поместим на форму три компонента TTable, три компонента TDataSourse, один компонент TClientDataSet и один компонент TProvider. Установим следующие свойства этих компонентов:

Компонент Свойство Значение
DBGrid1 DataSource DataSource3
DBNavigator1 DataSource DataSource3
Table1 DatabaseName BCDEMOS
  TableName customer.db
  Active true
DataSource1 DataSet Table1
Table2 DatabaseName BCDEMOS
  TableName orders.db
  IndexFieldNames CustNo
  MasterFields CustNo
  MasterSource DataSource1
  Active true
DataSource2 DataSet Table2
Table3 DatabaseName BCDEMOS
  TableName items.db
  IndexFieldNames OrderNo
  MasterFields OrderNo
  MasterSource DataSource2
  Active true
Provider1 DataSet Table1
ClientDataSet1 ProviderName Provider1
  Active true
DataSource3 DataSet ClientDataSet1

Сами таблицы формата Paradox, естественно, не поддерживают поля, содержащие вложенные таблицы, но такие поля поддерживает компонент TClientDataSet со страницы MIDAS палитры компонентов. Связав его с компонентом Table1 посредством компонента Provider1, мы получим набор данных, содержащий поле Table2 типа TDataSetField, а внутри вложенной таблицы — поле Table3 того же типа:

Такое представление данных даже в случае использования настольных СУБД весьма удобно просто потому, что оно решает общеизвестную проблему нехватки места на форме при наличии нескольких связанных таблиц. Единственное, о чем при этом следует позаботиться, — это вызов метода ApplyUpdates компонента TClientDataSet (например, в обработчике события, связанного с выбором какого-либо пункта меню или с нажатием на кнопку):

ClientDataSet1->ApplyUpdates(-1);

Если не использовать этот метод, данные будут сохраняться только в кэше, которым фактически и является компонент TClientDataSet, а не в самих таблицах.

В начало

В начало

Новые возможности генерации отчетов

В генераторе отчетов QuickReport добавлены компоненты TQRTextFilter, TQRHTMLFilter и TQRCSVFilter, позволяющие сохранять отчеты не только в оригинальном формате *.qrp, но и в виде текстового файла, файла формата HTML или CSV (Comma Separated Value).

В начало

В начало

Автоматизация создания приложений для публикации данных в Internet

В C++Builder 4 имеется DB Web Application Wizard, позволяющий автоматизировать создание приложения для публикации данных в Internet. После выбора соответствующей пиктограммы в репозитарии объектов можно выбрать тип приложения и тип компонентов TDBDataSet для построения приложения.

Далее следует выбрать псевдоним базы данных и имя публикуемой таблицы.

После этого следует выбрать публикуемые поля таблицы:

И, наконец, следует ввести текст заголовка генерируемой приложением страницы, а также текст, помещенный перед таблицей и после нее.

После этого можно открыть полученный компонент TWebModule, выбрать компонент Table1 и установить его свойство Active равным True.

Далее можно выбрать сгенерированный объект TWebAction, выбрать его в качестве действия по умолчанию — и можно компилировать приложение.

Обработчик события OnAction для сгенерированного объекта WebActionItem1 также генерируется автоматически:

void __fastcall TWebModule1::WebModule1WebActionItem1Action(TObject 
*Sender, TWebRequest *Request, TWebResponse *Response, boo &Handledl)
{
   DataSetTableProducer1->DataSet->Open();
   Response->Content = DataSetTableProducer1->Content();
   DataSetTableProducer1->DataSet->Close();
}

Теперь можно тестировать созданное приложение с помощью Web-сервера и Web-браузера, поместив его в каталог, где хранятся исполняемые файлы-скрипты для Web-сервера, запустив Web-сервер и обратившись к созданному исполняемому файлу:

Вторая часть данного обзора будет посвящена новым возможностям C++Builder 4, связанным с созданием многозвенных систем.

Российское представительство Inprise: Тел.:7(095)238-36-11

e-mail: info@inprise.ru.

http://www.inprise.ru

КомпьютерПресс 4'1999