Delphi 4 новые возможности и некоторые примеры их применения

         

Битные беззнаковые целые


В Delphi 4 введен новый тип данных Longword, представляющий собой 32-битовые беззнаковые целые числа. Диапазон значений этого типа данных - от 0 до 4294967295.



Битные целые


В Delphi 4 введен новый тип данных - Int64 (64-битные целые). Диапазон значений этого типа данных - от -263 до 263 - 1. Отметим, что функции High, Low, Succ, Pred, Inc, Dec, IntToStr, IntToHex, Round, Trunc поддерживают тип Int64. Введены также новые функции StrToInt64 и StrToInt64Def для поддержки этого типа данных.



Делегирование реализации интерфейса свойству


В Delphi 4 введена новая директива implements, позволяющая делегировать реализацию интерфейса свойству. Например, property Interface1: IInterface1 read FInterface1 implements IInterface1;

определяет свойство Interface1, реализующее интерфейс Interface1.

| |



Динамические массивы


В Delphi 4 появилась возможность, наряду с обычными массивами, создавать динамические массивы, в которых не определено число элементов: S: array of string;

Отметим, что динамические массивы могут быть многомерными: I: array of array of integer;





Параметры со значениями по умолчанию


Процедуры и функции теперь могут иметь параметры со значениями по умолчанию. Эти параметры определяются в следующей форме: Name: Type = value

При вызове процедуры или функции с параметрами, имеющими значение по умолчанию, этот параметр может быть опущен. Например, если определить какую-либо процедуру следующим образом: procedure MyProc(A: Integer; B: Integer = 0); то следуюшие два выражения будут эквивалентны: MyProc(I, 0); MyProc(I);

Соответственно параметры со значениями по умолчанию должны находиться в конце списка параметров процедуры или функции.



Перегрузка методов


В Delphi 4 объекты могут обладать несколькими одноименными методами, отличающимися набором аргументов: constructor Create(AOwner: TComponent); overload; override; constructor Create(AOwner: TComponent; Text: string); overload;

Перегруженные методы отмечаются ключевым словом overload.



Автоматизация определения новых классов (Class Completion)


В Delphi 4 автоматизировано определение новых классов путем генерации заготовок кода реализации для определяемых разработчиком членов классов.

Допустим, мы определяем новый класс, вводя в секцию интерфейса следующий код: TMSGButton=class(TButton) property MSGcount:integer; property MSG: string; procedure ShowMSG; end;

Если теперь нажать комбинацию клавиш Ctrl-Shift-C, в секцию интерфейса будут автоматически добавлены описания методов для изменения определенных свойств (в нашем случае свойств MSGCount и MSG): type TForm1 = class(TForm) TMSGButton=class(TButton) property MSGcount:integer read FMSGcount write SetMSGcount; property MSG: string read FMSG write SetMSG; procedure ShowMSG; private FMSG: string; FMSGcount: integer; procedure SetMSG(const Value: string); procedure SetMSGcount(const Value: integer); end;

В секцию реализации будет добавлен следующий код: procedure TMSGButton.SetMSG(const Value: string); begin FMSG := Value; end; procedure TMSGButton.SetMSGcount(const Value: integer); begin FMSGcount := Value; end; procedure TMSGButton.ShowMSG; begin end;

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

Рис. 4 Автоматическая генерация описаний методов.

| |



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


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

Рис. 5 Окна отладчика Delphi 4.

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

Возможен также просмотр содержимого регистров процессора, дизассемблированного кода, дампов памяти (эта возможность ранее присутствовала в C++Builder).

Рис. 6 Просмотр содержимого регистров процессора при отладке приложения

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

Рис. 7 Диалог Debugger Options.

| |



Другие дополнительные возможности


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

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

Рис. 13 Компонент TControlBar - на этапе выполнения можно перемещать интерфейсные элементы внутри него.

Помимо этого, в Delphi 4 включена поддержка Intellimouse. Приложения, созданные с помощью Delphi 4, автоматически обнаруживают и используют это устройство, при этом не требуется создания дополнительного кода.

| |



Компонент TActionList


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

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

Рис. 8 Добавление элементов в ImageList.

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

Рис. 9 Редактор свойств компонента TActionList.

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

Рис. 10 Главное меню и форма приложения, использующего компонент TActionList.

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



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


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

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

Рис. 11 Главная форма приложения с блокнотом, действующим как "docking site"

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

КомпонентСвойствоЗначение
PageControl1AlignalBottom
DockSiteTrue
 DragKinddkDock
Form2UseDockManagerTrue
 DragKinddkDock
 DragModedmAutomatic
Form3UseDockManagerTrue
 DragKinddkDock
 DragModedmAutomatic

Сошлемся на модули, связанные с формами Form2 и Form3, в модуле, связанном с главной формой приложения, и создадим обработчик события, связанного с нажатием на кнопку: procedure TForm1.Button1Click(Sender: TObject); begin Form2.Show; Form3.Show; end;

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

Рис. 12 "Плавающие" панели, помещенные в блокнот, на этапе выполнения.

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

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



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


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

Рис. 14 Репозитарий объектов Delphi 4

| |



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


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

Рис. 22 Выбор DB Web Application Wizard из репозитария объектов Delphi 4.

Рис. 23 Выбор типа приложения.

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

Рис. 24 Выбор псевдонима базы данных и таблицыдля публикации в Web.

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

Рис. 25 Выбор публикуемых полей.

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

Рис. 26 Ввод заголовка таблицы и дополнительного текста

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

Рис. 27 Сгенерированный компонент TWebModule

Рис. 28 Редактор свойства Actions компонента TWebModule

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

Рис. 29 Результат выполнения сгенерированного приложения



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


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

Рис. 20 Отчет QuickReport с возможностью сохранения данных в формате HTML.

Рис. 21 Отчет QuickReport в формате HTML, отображенный в броузере.



Новый генератор запросов - SQL Builder


В Delphi 4 в качестве построителя запросов используется SQL Builder, уже знакомый пользователям Visual dBase 7 и C++Builder 3. Он позволяет создавать и выполнять запросы, редактировать созданные SQL-предложения, использовать вычисляемые поля и связи между таблицами, основанные на выражениях.

Рис. 17 SQL Builder.

Сгенерированный запрос можно отредактировать вручную, и все внесенные изменения будут отображены в дизайнере запросов.

Рис. 18 Сгенерированный текст запроса можно редактировать.

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

Рис. 19 Выполнение запроса из SQL Builder

Отметим, что скопированный в буфер обмена текст легко преобразуется в таблицы текстовых процессоров (например, MS Word 97).



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


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



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


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

КомпонентСвойствоЗначение
DBGrid1DataSourceDataSource3
DBNavigator1DataSourceDataSource3
Table1DatabaseName 'DBDEMOS'
TableName'customer.db'
ActiveTrue
DataSource1 DataSetTable1
Table2DatabaseName 'DBDEMOS'
TableName 'orders.db'
IndexFieldNames 'CustNo'
MasterFields 'CustNo'
MasterSourceDataSource1
ActiveTrue
DataSource2DataSet Table2
Table3DatabaseName 'DBDEMOS'
TableName'items.db'
IndexFieldNames'OrderNo'
MasterFields'OrderNo'
MasterSourceDataSource2
ActiveTrue
Provider1DataSetTable1
ClientDataSet1ProviderName 'Provider1'
ActiveTrue
DataSource3DataSet ClientDataSet1

Рис. 15 Главная форма приложения, использующего вложенные таблицы.

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

Рис. 16 Вложенные таблицы на этапе выполнения.

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

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



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


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



Создание многозвенных систем


Возможности создания многозвенных информационных систем в Delphi 4 существенно расширены по сравнению с прежней версией. В данную версию включена поддержка CORBA (Common Object Request Broker Architecture), что позволяет использовать в качестве серверов приложений сервисы, выполняющиеся на различных платформах. Имеется также поддержка Microsoft Transaction Server. В палитре компонентов теперь имеется отдельная страница MIDAS, содержащая компоненты, используемые в серверах приложений и "тонких" клиентах, в частности, новые компоненты TCorbaConnection, TDCOMConnection, TSocketConnection, TOLEnterpriseConnection (последние три обладают свойством LoginPrompt, поддерживающим аутентификацию пользователя). В репозитарии объектов имеется соответствующая страница Multitier, содержащая генераторы соответствующих типов приложений.

Рис. 30 Шаблоны серверов приложений репозитария объектов

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

Рис. 31 Создание удаленного модуля данных

После выбора соответствующей пиктограммы (например, Remote Data Module) из репозитария объектов и ввода характеристик соответствующего COM-объекта получим удаленный модуль данных, в который можно поместить компоненты доступа к данным.

Рис. 32 Главная форма и модуль данных сервера приложений

Далее следует экспортировать компоненты доступа к данным из модуля данных:

Рис. 33 Библиотека типов удаленного модуля данных

После этого можно скомпилировать сервер приложений и приступить к созданию "тонкого" клиента. С этой целью можно добавить в имеющуюся группу проектов еще один проект (если разработка клиента ведется на том же компьютере, где создавался сервер приложений), либо просто создать новый проект или активную форму (в случае "тонкого" клиента в виде ActiveX) и поместить туда какой-либо компонент доступа к удаленному серверу (например, TSocketConnection). Для осуществления удаленного доступа с помощью TSocketConnection следует запустить на том компьютере, где содержится сервер приложений, Borland Socket Server. Затем следует установить свойства Host и ServerName равными имени компьютера и удаленного модуля данных (в формате <имя исполняемого файла>.<имя удаленного модуля данных>) соответственно. Далее можно поместить на форму компонент TClientDataSet, связать его с компонентом TSocketConnection и выбрать значение свойства ProviderName из выпадающего списка. Теперь можно помещать на форму компоненты для отображения данных (например, создав объекты TFields и переместив их на форму методом drag-and-drop из списка полей). Таким образом, "тонкий" клиент готов.

Рис. 34 Главная форма "тонкого" клиента

Помимо соединения клиента с сервером с помощью протокола TCP/IP, возможно использование Microsoft DCOM (Distributed Component Object Model) и соответственно компонента TDCOMConnection, а также технологии OLenterprise (с помощью компонента TOLEnterpriseConnection).

Отметим, что CORBA-серверы и CORBA-клиенты с помощью Delphi 3 создаются примерно так же.

| |



новая версия Delphi представляет собой


Итак, новая версия Delphi представляет собой высокопродуктивное средство быстрой разработки приложений, в том числе корпоративных информационных систем, использующих распределенные вычисления. Этот продукт позволяет осуществлять разработку CORBA- и COM-серверов и клиентов, в том числе "тонких" клиентов, не требующих конфигурации, таких, как отображаемые в Web-броузере ActiveX. Delphi 4 включает поддержку Microsoft BackOffice, и, в частности, позволяет создавать компоненты Microsoft Transaction Server. Delphi 4 позволяет также создавать приложения для публикации данных в Internet в стандартах CGI, WinCGI, ISAPI. Таким образом, в лице Delphi 4 разработчики получат замечательный инструмент, позволяющий создавать приложения, отвечающие всем современным индустриальным стандартам.
Хотите узнать больше?
|