Битные беззнаковые целые
В 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"
Установим следующие значения свойств компонентов приложения:
PageControl1 | Align | alBottom |
DockSite | True | |
DragKind | dkDock | |
Form2 | UseDockManager | True |
DragKind | dkDock | |
DragMode | dmAutomatic | |
Form3 | UseDockManager | True |
DragKind | dkDock | |
DragMode | dmAutomatic |
Сошлемся на модули, связанные с формами 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. Установим следующие свойства этих компонентов:
DBGrid1 | DataSource | DataSource3 |
DBNavigator1 | DataSource | DataSource3 |
Table1 | DatabaseName | 'DBDEMOS' |
TableName | 'customer.db' | |
Active | True | |
DataSource1 | DataSet | Table1 |
Table2 | DatabaseName | 'DBDEMOS' |
TableName | 'orders.db' | |
IndexFieldNames | 'CustNo' | |
MasterFields | 'CustNo' | |
MasterSource | DataSource1 | |
Active | True | |
DataSource2 | DataSet | Table2 |
Table3 | DatabaseName | 'DBDEMOS' |
TableName | 'items.db' | |
IndexFieldNames | 'OrderNo' | |
MasterFields | 'OrderNo' | |
MasterSource | DataSource2 | |
Active | True | |
Provider1 | DataSet | Table1 |
ClientDataSet1 | ProviderName | 'Provider1' |
Active | True | |
DataSource3 | DataSet | 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 разработчики получат замечательный инструмент, позволяющий создавать приложения, отвечающие всем современным индустриальным стандартам.
Хотите узнать больше?
|