Библиотека компонентов Delphi 5 претерпела серьезные изменения по сравнению с предыдущей версией. Остановимся на них подробнее.
Компонент TApplicationEvents
В предыдущих версиях Delphi для создания обработчика события объекта TApplication следовало создать процедуру, а затем в явном виде присвоить имя этой процедуры обработчику события TApplication, например:
Иными словами, способ создания обработчиков таких событий отличался от привычного, использующего генерацию "заготовок" кода при щелчке на нужной строке инспектора объектов. Теперь же создавать такие обработчики событий можно и традиционным способом. Для этой цели можно использовать новый компонент TApplicationEvents, список событий которого включает все события TApplication. Этот компонент можно поместить на любую форму приложения (и даже на несколько форм), и при наступлении обрабатываемого события все имеющиеся обработчики будут выполняться по очереди. Если необходимо, чтобы один из имеющихся обработчиков этого события выполнялся первым, следует вызвать его метод Activate (например, в обработчике события OnActivate формы, на которой он находится). Для того, чтобы предотвратить выполнение последующих обработчиков данного события, можно вызвать метод CancelDispatch компонента TApplicationEvents.
Control Panel Applications: приложения для Панели управления
Для создания приложений, доступных в Панели управления Windows (*.CPL), в Delphi 5 имеется новый класс TAppletApplication. Такое приложение может содержать несколько модулей - потомков класса TAppletModule, каждый из которых может быть отображен в Панели управления. Для создания таких приложений имеются два эксперта, доступные на странице New репозитария объектов: ControlPanel Application и ControlPanel Module (рис. 17).
Рисунок 17. Апплеты Панели управления, созданные с помощью Delphi 5
Advanced custom drawing: дополнительные события компонентов TToolBar и TListView
В Delphi 5 у компонентов TTreeView, TListView и TToolBar расширен список событий. Теперь, наряду с событиями OnCustomDraw, OnCustomDrawItem и др. имеются также события OnAdvancedCustomDraw, OnAdvancedCustomDrawItem и т.д.
Обработчики этих событий, в отличие от имевшихся прежде, имеют дополнительный параметр, указывающий, на какой стадии перерисовки изображения наступает данное событие.
Создадим простейший пример, иллюстрирующий данные возможности. Поместим на форму компоненты TListView, TToolBar с несколькими кнопками и два компонента TImageList. Добавим в оба компонента TImageList по несколько изображений, а в TListView - несколько элементов, и установим их свойства LargeImages и SmallImages равными номерам изображений из одного из компонентов TListView (рис.1). То же самое проделаем и с компонентами TToolButton. Установим также свойство OwnerDraw компонента TListView равным True (рис. 18).
Рисунок 18. Проект для тестирования событий Advanced Custom Drawing
Создадим обработчики событий, связанных с нажатием на кнопки:
Теперь можно создать обработчики событий OnAdvancedCustomDraw, OnAdvancedCustomDrawItem компонента TListView, например:
Аналогичным образом можно создать и обработчики событий OnAdvancedCustomDraw и OnAdvancedCustomDrawButton компонента TToolBar. В результате можно наблюдать за различными стадиями рисования изображения на этих интерфейсных элементах (рис. 19).
Рисунок 19. Одно из событий Advanced Custom Drawing в момент выполнения его обработчика
Новые контейнерные классы
В библиотеке компонентов Delphi 5 появились новые контейнерные классы TObjectList, TComponentList и TClassList. Все они - потомки класса TList и предназначены для хранения ссылок на объекты, компоненты и классы. TComponentList может отслеживать уничтожение компонента, ссылку на который он содержит, и автоматически удалять ее.
Помимо этого, в Delphi 5 введены новые классы TObjectQueue и TObjectStack, предназначенные для хранения ссылок на объекты в виде очередей и стеков (рис. 20).
Рисунок 20. Иерархия объектов - потомков TList и TOrderedList
Фреймы
В Delphi 5 имеется одно очень полезное нововведение, позволяющее существенно облегчить повторное использование форм. Эта версия Delphi позволяет создавать так называемые фреймы, представляющие собой визуальные контейнеры, которые можно в дальнейшем размещать на формах. Соответствующий эксперт имеется в репозитарии объектов Delphi 5. Выбрав его пиктограмму, можно создать наследник класса TFrame, на котором далее можно размещать интерфейсные элементы и создавать обработчики событий для них точно так же, как это делается в случае обычной формы (рис. 21).
Рисунок 21. Фрейм на этапе разработки
После того как в проекте уже имеются все необходимые фреймы, можно размещать их на формах.
Это делается путем выбора со страницы Standard палитры компонентов "компонента" Frames. При этом появляется список доступных в данном проекте фреймов, из которого следует выбрать нужный. Далее можно изменять свойства как самого фрейма, так и входящих в него компонентов (рис. 22).
Рисунок 22. Приложение, использующее фрейм: можно менять свойства компонентов фрейма.
При размещении фрейма на форме создается наследник класса исходного фрема (это наиболее важное отличие фреймов от шаблонов компонентов, использование которых базируется на копировании). Это означает, что при изменении свойств компонентов в исходном фрейме происходит изменение свойств его наследников. С другой стороны, свойства фремов-копий можно и переопределить.
Что касается обработчиков событий компонентов, содержащихся в фреймах-копиях, они по определению изначально содержат лишь ссылку на обработчик того же события исходного фрейма (в отличие от шаблонов, при использовании которых код целиком копируется в модуль, связанный с формой). Однако этот код можно заменить на другой или дополнить своим.
Отметим также, что при необходимости использования одного и того же фрейма в нескольких проектах можно зарегистрировать его в палитре компонентов. Для этого достаточно создать стандартную процедуру регистрации, аналогичную процедуре регистрации компонента:
Затем можно выбрать из меню пункт Component/Install Component, выбрать "пакет" для установки компонента и скомпилировать его. В результате фрейм окажется на указанной в процедуре регистрации странице палитры компонентов.
Новые компоненты для работы с базами данных
Список компонентов для работы с базами (и, что более существенно, поддерживаемых технологий доступа к данным) в Delphi 5 существенно расширен по сравнению с предыдущими версиями.
В частности, в состав Delphi теперь входит набор компонентов InterBase Express. Этот набор компонентов предназначен для непосредственного доступа к серверу IB Database версии 5.5 и выше и использует непосредственно его клиентский API, не требуя, таким образом, использования BDE. Эти компоненты находятся на странице InterBase палитры компонентов. Подробности об этих компонентах можно прочесть в посвященной им статье.
Помимо компонентов для работы с IB Database, в комплект поставки Delphi 5 Enterprise входят также компоненты для работы с ADO (Active Data Objects) - COM-серверов, входящих ныне в состав многих продуктов Microsoft и использующих OLE DB для доступа к данным (ранее с этими объектами можно было работать только используя COM-интерфейсы). Эти компоненты взаимодействуют непосредственно с библиотеками, входящими в состав ADO, и не требуют наличия BDE. Однако они разработаны таким образом, чтобы их можно было легко использовать программистам, привыкшим работать с компонентами, взаимодействующими с BDE. Вместе с VCL-компонентами в комплект поставки Delphi Enterprise и сами библиотеки MDAC 2.1 (Microsoft Data Access Components). Пользователи Delphi 4 Professional могут приобрести эти VCL-компоненты и MDAC 2.1 отдельно. Подробности об этих компонентах также можно прочесть в отдельной посвященной им статье.
В связи с поддержкой ADO на уровне компонентов в VCL введены новые классы-потомки TFields для поддержки типов данных, специфичных для ADO: TWideStringField, TGuidField, TVariantField, TInterfaceField. TIDistatchField. Помимо этого, в Delphi 5 введены классы TGraphicField и TObjectField (последний является абстрактным классом).
Что касается компонентов, поддерживающих BDE, в них также внесены некоторые изменения. В частности, у компонента TDatabase теперь есть метод Execute, позволяющий выполнить SQL-запрос без использования компонента TQuery. Параметры этого метода позволяют сохранять результаты запроса в каком-либо результирующем наборе данных, кэшировать его для повышения эффективности повторного выполнения внутри одной, использовать параметры.
Помимо этого, в Delphi 5 введен новый класс TCustomConnection, представляющий собой базовый класс для компонентов, представляющих источники данных, таких как TDatabase, TIBDatabase, TADOConnection, а также классов - предков компонентов TDCOMConnection, TSocketConnection, TCorbaConnection и TWebConnection.
Новое в поддержке COM
На странице ActiveX репозитария объектов имеется эксперт для создания активных серверных объектов - Active Server Objects. Эти объекты представляют собой объекты автоматизации, доступные на активных серверных страницах (Active Server Pages), которые можно получить с помощью Internet Information Server. При создании такого объекта может быть сгенерирован простейший скрипт для его тестирования. Подробности об этом можно найти в статье, посвященной их использованию.
Delphi 5 при импорте библиотек типов в приложения предоставляет возможность установить COM-серверы в палитру компонентов, при этом полученный компонент (наследник класса TOleServer) обладает событиями, имеющимися у данного объекта автоматизации (это касается в том числе и библиотек типов COM-серверов MIcrosoft, предназначенных для работы с наборами данных). Это позволяет создавать их обработчики с помощью инспектора объектов, тем самым существенно упрощая создание кода для реагирования на события сервера. Что касается свойств таких компонентов, они, как и свойства серверных объектов, доступны только на этапе выполнения, поэтому в инспекторе объектов они не отображаются (рис. 23).
Рисунок 23. Компоненты для доступа к серверным объектам Netscape Communicator 4.5, полученные в результате импорта библиотеки типов.
Отметим, что на страницу Servers палитры компонентов изначально установлены компоненты - наследники TOleServer для доступа ко всем серверным объектам Microsoft Office (а именно, компоненты TWordApplication, TWordDocument, TWordFont, TWordParagraphFormat, TwordLetterContent, TBinder, TExcelApplication, TExcelQueryTable, TExcelChart, TExcelWorkSheet, TExcelWorkBook, TExcelOleObject, TDoCmd, TAccessHyperLink, TAccessForm, TAccessReport, TAccessReference, TPowerPointApplication, TPowerPointSlide, TPowerPointPresentation, TOutlookApplication, TContactItem, TAppointmentItem, TJournalItem, TMailItem, TMeetingRequestItem, TNoteItem, TPostItem, TRemoteItem, TReportItem, TTaskItem, TTaskRequestItem). Это облегчает создание контроллеров автоматизации MS Office (рис. 24).
Рисунок 24. Страница Servers палитры компонентов Delphi 5
Подробности об использовании компонентов страницы Servers при создании контроллеров автоматизации MS Office также можно прочесть в отдельной статье, посвященной этой теме.
Помимо этого, есть еще несколько небольших изменений в поддержке COM, таких как поддержка применяемых в некоторых COM-серверах таблиц виртуальных методов с "пустотами" (sparse vtables); кроме того, исправлены некоторые погрешности в классе TComObjectFactory, связанные с поддержкой модели free многопоточности; ситуация, когда регистрация COM-сервера невозможна из-за отсутствия права редактировать реестр, теперь также обрабатывается корректно (ранее об этом разработчику просто не сообщалось). Изменились также некоторые установки по умолчанию в экспертах для создания COM-объектов - теперь по умолчанию в них предлагается создавать библиотеку типов и генерировать код, предназначенный для поддержки автоматизации.
MIDAS 3, InternetExpress и XML
Технология MIDAS, предназначенная для организации распределенных вычислений с COM-серверами доступа к данным, стала весьма популярной за последние два года. В Delphi 5 эта технология получила свое дальнейшее развитие.
Помимо поддерживаемых ранее средств доступа к серверам, базирующихся на DCOM, CORBA и использовании сокетов, Delphi 5 предоставляет возможность использовать протокол HTTP (для этой цели предназначен новый компонент TWebConnection). Это означает, что при соединении с сервером можно использовать брандмауэры и SSL (Secure Sockets Layer - протокол, гарантирующий безопасную передачу данных по сети, комбинирующий криптографическую систему с открытым ключом и блочное шифрование данных), а также применять организацию пула ресурсов (resource pooling).
Помимо этого, MIDAS 3 (версия MIDAS, поставляемая с Delphi 5) поддерживает удаленные модули данных, не хранящие состояния (stateless data module), то есть не хранящие данные, связанные с конкретным клиентом. Это означает, что при создании объектов Microsoft Transaction Server, являющихся MIDAS-серверами доступа к данным, код, удовлетворяющий требованиям к таким объектам, теперь генерируется автоматически (в прежней версии Delphi его нужно было создавать вручную).
Говоря о MIDAS, нельзя не упомянуть поддержку MIDAS-клиентов в виде Web-приложений. Реализована она в виде компонентов InternetExpress, содержащих компоненты TXMLBroker и TMIDASPageProducer (последний обладает очень удобным редактором свойств, позволяющим увидеть, из каких объектов состоит и как будет выглядеть окончательный пользовательский интерфейс). Подобные приложения генерируют вместо вариантных массивов XML-код, который интерпретируется несколькими библиотеками JavaScript (поставляемыми вместе с Web-приложением и включенными для этой цели в комплект поставки Delphi 5). Конечное пользовательское приложение в этом случае представляет собой Web-браузер, поддерживающий JavaScript (рис. 25).
Рисунок 25. "Ультратонкий" клиент, обращающийся к WebMIDAS-приложению.
Отметим, что компоненты InternetExpress можно также применять и при создании приложений, не использующих MIDAS.
Следует, однако, отметить, что изменения в MIDAS привели к тому, что ранее созданные MIDAS-серверы и клиенты могут потребовать небольшой модернизации. Например, вместо интерфейса IProvider используется интерфейс IAppServer, вместо dbclient.dll - midas.dll; компонент TProvider также больше не используется. Вместо него рекомендуется использовать TDataSetProvider, который теперь может иметь дело с любым набором данных, в том числе не имеющим отношения к BDE.
Подробности о MIDAS 3 содержатся в отдельной статье, посвященной этой проблеме.
Компоненты для создания Web-приложений
Страница Internet палитры компонентов теперь состоит из восьми компонентов. Компоненты от NetMasters содержатся на отдельной странице FastNet. Компонент THTML в этой версии Delphi заменен на TWebBrowser, представляющий собой оболочку элемента управления ActiveX, устанавливающегося вместе с Microsoft Internet Explorer.
Помимо этого, в Delphi 5 имеются компоненты InternetExpress для создания MIDAS-клиентов в виде Web-приложений (о них было сказано выше).
Отметим также, что у компонента TWebAction теперь имеется свойство Producer, позволяющее непосредственно указать, какую именно HTML-страницу нужно генерировать при обращении. Это во многих случаях избавляет от необходимости создавать обработчик события OnAction этого компонента.
Другие полезные мелочи
Из других нововведений и улучшений следует отметить существенное расширение списка стандартных объектов TAction, используемых в компоненте TActionList (рис. 26).
Рисунок 26. Список стандартных объектов TAction в Delphi 5
И уж совсем маленькая, но приятная деталь: наконец-то минимизация и восстановление главной формы Delphi-приложения происходит с анимацией, характерной для большинства современных Windows-приложений.
|