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
Создадим обработчики событий, связанных с нажатием на кнопки:
procedure TForm1.ToolButton1Click(Sender: TObject); begin ListView2.ViewStyle:=vsIcon; end; procedure TForm1.ToolButton2Click(Sender: TObject); begin ListView2.ViewStyle:=vsSmallIcon; end; procedure TForm1.ToolButton3Click(Sender: TObject); begin ListView2.ViewStyle:=vsList; end; |
Теперь можно создать обработчики событий OnAdvancedCustomDraw, OnAdvancedCustomDrawItem компонента TListView, например:
procedure TForm1.ListView2AdvancedCustomDraw(Sender: TCustomListView; const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin case Stage of cdPrePaint: ShowMessage('ListView is pre-painted'); cdPostPaint: ShowMessage('ListView is post-painted'); end; end; procedure TForm1.ListView2AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin if (stage=cdPrePaint) then ShowMessage(Item.Caption+' is pre-painted'); end; |
Аналогичным образом можно создать и обработчики событий OnAdvancedCustomDraw и OnAdvancedCustomDrawButton компонента TToolBar. В результате можно наблюдать за различными стадиями рисования изображения на этих интерфейсных элементах (рис. 19).
Рисунок 19. Одно из событий Advanced Custom Drawing в момент выполнения его обработчика
Breakpoint actions, breakpoint groups: новые свойства точек прерывания
В прежних версиях Delphi точки прерывания были предназначены только для остановки процесса выполнения в режиме отладки. В Delphi 5 можно указать, какие именно действия (breakpoint actions) следует выполнить в момент достижения точки остановки: приостановить выполнение (как в прежних версиях Delphi), добавить текстовое сообщение в log-файл для регистрации событий отладчика (event log), записать в log-файл результат вычисления выражения, содержащего переменные отлаживаемого процесса (или вычислить выражение и никуда результат не записывать), а также сделать доступной или недоступной группу точек прерывания (о группах будет сказано ниже). Можно выполнить одновременно несколько действий в одной точке прерывания (рис. 27).
Рисунок 27. Новые свойства точек прерывания: их установка и отображение на этапе выполнения.
Свойства точки прерывания теперь отображаются во всплывающем окне при подведении курсора мыши к выбранной точке.
Отметим, что точки прерывания могут быть объединены в группы, определенные пользователем, и эти группы могут быть активированы или деактивированы с помощью действия какой-либо другой точки прерывания.
Code Editor: новые возможности настройки опций редактора кода
Настройки редактора кода в Delphi 5 содержатся в отдельной диалоговой панели (рис. 6). При этом, в дополнение к стандартным наборам "горячих" клавиш, эмулирующих наиболее популярные текстовые редакторы и средства разработки, можно, используя Open Tools API, создать и зарегистрировать свой собственный набор. |
Рисунок 6. Страница Key Mappings диалоговой панели Editor Properties |
Control Panel Applications: приложения для Панели управления
Для создания приложений, доступных в Панели управления Windows (*.CPL), в Delphi 5 имеется новый класс TAppletApplication. Такое приложение может содержать несколько модулей - потомков класса TAppletModule, каждый из которых может быть отображен в Панели управления. Для создания таких приложений имеются два эксперта, доступные на странице New репозитария объектов: ControlPanel Application и ControlPanel Module (рис. 17).
Рисунок 17. Апплеты Панели управления, созданные с помощью Delphi 5
Customized Desktops: использование различных конфигураций среды разработки
Delphi 5 позволяет сохранять сведения о том, какие окна среды разработки открыты, и где именно на экране они расположены. Таких конфигураций может быть создано и сохранено несколько, при этом имеется возможность выделить отдельную конфигурацию, которая будет автоматически загружаться в режиме отладки (так называемый debug desktop) и выгружаться при выходе из него. Для этой цели инструментальная панель содержит кнопки Save current desktop и Set debug desktop, а главное меню - соответствующий подраздел View/Desktops (рис. 1).
Рисунок 1. Инструментальная панель Delphi 5 со списком конфигураций.
Все сохраненные конфигурации среды разработки хранятся в файлах с расширением *.dst подкаталога Delphi 5\Bin.
DataModule Designer: новый редактор модулей данных
Новый редактор модулей данных представляет собой, безусловно, одно из наиболее приятных средств визуализации разработки приложений. Теперь модуль данных выглядит не только как объект, напоминающий форму с невизуальными компонентами, но и как полноценное представление модели данных, используемой в данном приложении - достаточно лишь переключиться на страницу Data Diagram. По внешнему виду изображение на этой странице напоминает диаграмму "сущность-связь", обычно изображаемую при проектировании данных с помощью CASE-средств (рис. 4), хотя, возможно, многие сторонники их использования предпочли бы иметь дело с одной из стандартных нотаций, применяемых в CASE-технологии.
Рисунок 4. Новый редактор модулей данных
Однако сходство редактора модулей данных с CASE-средствами этим не ограничивается. Если соединять в нем изображения компонентов - наследников TDataSet с помощью мыши, при этом автоматически будут добавляться новые компоненты (например, TDataSource), устанавливаться значения свойств, обеспечивающие эту связь, при этом при необходимости могут появляться диалоговые панели редакторов этих свойств. Тип связи (master-detail, lookup, property) можно выбрать, нажав соответствующую кнопку на вертикальной инструментальной панели слева от диаграммы. Можно также добавлять блоки комментариев и связывать их с изображениями компонентов.
Отметим также, что в левой части редактора модулей данных окажутся выделенными те компоненты, чьи значения свойств, существенных для функционирования приложения, еще не установлены. Это значит, что начинающим пользователям Delphi теперь больше не нужно разыскивать такие свойства при необходимости исправить ошибку.
И последнее. Помимо собственно компонентов TDataSet, на странице DataDiagram могут быть отображены и другие компоненты, и их свойства также можно устанавливать, связывая эти изображения с помощью мыши (рис. 5).
Рисунок 5. В редакторе модулей данных можно связывать между собой и другие компоненты. |
В целом подобный редактор наверняка придется по вкусу руководителям проектов, авторам технических заданий и иным разработчикам, занимающимся документированием приложений. |
Delphi 5: среда разработки
Delphi 5: среда разработки.................................................................................................................................................. 1
Новые инструменты.................................................................................................................................................................. 1
Customized Desktops: использование различных конфигураций среды разработки............................................... 1
Object Inspector: некоторые полезные нововведения........................................................................................................ 2
DataModule Designer: новый редактор модулей данных................................................................................................ 3
Code Editor: новые возможности настройки опций редактора кода...................................................................... 4
Опции командной строки......................................................................................................................................................... 4
Средства управления проектами........................................................................................................................................ 5
Нововведения в менеджере проектов.................................................................................................................................. 5
Новый браузер проектов.......................................................................................................................................................... 5
To-do list: список недоделанных дел…................................................................................................................................. 6
DFM как текст............................................................................................................................................................................ 7
Управление автоматическим созданием форм в проектах.......................................................................................... 7
Translation Repository: создадим коллективный словарь….......................................................................................... 7
TeamSource - новое средство управления коллективной разработкой проектов................................................... 9
Новое в Visual Component Library.................................................................................................................................... 10
Компонент TApplicationEvents............................................................................................................................................. 10
Control Panel Applications: приложения для Панели управления.............................................................................. 11
Advanced custom drawing: дополнительные события компонентов TToolBar и TListView............................... 12
Новые контейнерные классы................................................................................................................................................. 13
Фреймы........................................................................................................................................................................................ 13
Новые компоненты для работы с базами данных.......................................................................................................... 15
Новое в поддержке COM....................................................................................................................................................... 16
MIDAS 3, InternetExpress и XML............................................................................................................................................ 17
Компоненты для создания Web-приложений................................................................................................................... 18
Другие полезные мелочи......................................................................................................................................................... 18
Новые возможности отладки.............................................................................................................................................. 19
Breakpoint actions, breakpoint groups: новые свойства точек прерывания............................................................ 19
Другие полезные нововведения............................................................................................................................................. 19
Вместо заключения.................................................................................................................................................................. 21
Среда разработки Delphi 5 включает ряд расширений и дополнений, призванных обеспечить максимальное удобство разработчика.
DFM как текст
В Delphi 5 можно выбрать, в каком формате следует сохранять файлы ресурсов - в виде двоичного файла, как это было в предыдущих версиях, или в виде текста. Во втором случае двоичный файл на основе текста создается в процессе компиляции. Выбрать, в каком именно виде сохранять ресурс формы, можно с помощью соответствующей опции контекстного меню либо с помощью страницы Preferences диалоговой панели Environment Options.
Другие полезные мелочи
Из других нововведений и улучшений следует отметить существенное расширение списка стандартных объектов TAction, используемых в компоненте TActionList (рис. 26).
Рисунок 26. Список стандартных объектов TAction в Delphi 5
И уж совсем маленькая, но приятная деталь: наконец-то минимизация и восстановление главной формы Delphi-приложения происходит с анимацией, характерной для большинства современных Windows-приложений.
Другие полезные нововведения
С помощью пункта меню Run/Attach to Process можно начать отлаживать любой из уже запущенных процессов, в том числе не имеющий отношения к Delphi. Процесс, подлежащий отладке, можно выбрать из соответствующего диалога (рис. 28).
Рисунок 28. Список запущенных процессов.
С помощью выбора пункта меню Run/Run Until Return можно в процессе пошаговой отладки процедуры или функции заставить отладчик выполнить оставшийся код процедуры в нормальном режиме, что может сэкономить немало времени.
При отладке многопоточных приложений можно устанавливать разные опции отладчика для разных потоков.
Помимо окна просмотра CPU, в Delphi 5 имеется также окно просмотра FPU (Floating Point Unit), позволяющее получить информацию о регистрах FPU, флагах и др.
Отметим также, что среда разработки Delphi 5 поддерживает операции drag-and-drop во время отладки. Например, из редактора кода можно перенести выражение в окно Watch List, после чего это выражение останется в соответствующем списке. Можно перенести выражение в Debug Inspector. Можно также перенести выражение на панель, содержащую дамп памяти в окне CPU, и получить его адрес.
К диалоговой панели Evaluate/Modify добавлено несколько новых кнопок, позволяющих загрузить выражение в Debug Inspector, вычислить или изменить его, поместить в Watch List (рис. 29).
Рисунок 29. Диалоговая панель Evaluate/Modify
Отметим также, что список исключений, которые можно игнорировать при использовании Delphi, пополнился исключениями, связанными с использованием библиотек ADO, внутренними исключениями VisiBroker и пользовательскими исключениями.
Фреймы
В Delphi 5 имеется одно очень полезное нововведение, позволяющее существенно облегчить повторное использование форм. Эта версия Delphi позволяет создавать так называемые фреймы, представляющие собой визуальные контейнеры, которые можно в дальнейшем размещать на формах. Соответствующий эксперт имеется в репозитарии объектов Delphi 5. Выбрав его пиктограмму, можно создать наследник класса TFrame, на котором далее можно размещать интерфейсные элементы и создавать обработчики событий для них точно так же, как это делается в случае обычной формы (рис. 21).
Рисунок 21. Фрейм на этапе разработки
После того как в проекте уже имеются все необходимые фреймы, можно размещать их на формах.
Это делается путем выбора со страницы Standard палитры компонентов "компонента" Frames. При этом появляется список доступных в данном проекте фреймов, из которого следует выбрать нужный. Далее можно изменять свойства как самого фрейма, так и входящих в него компонентов (рис. 22).
Рисунок 22. Приложение, использующее фрейм: можно менять свойства компонентов фрейма.
При размещении фрейма на форме создается наследник класса исходного фрема (это наиболее важное отличие фреймов от шаблонов компонентов, использование которых базируется на копировании). Это означает, что при изменении свойств компонентов в исходном фрейме происходит изменение свойств его наследников. С другой стороны, свойства фремов-копий можно и переопределить.
Что касается обработчиков событий компонентов, содержащихся в фреймах-копиях, они по определению изначально содержат лишь ссылку на обработчик того же события исходного фрейма (в отличие от шаблонов, при использовании которых код целиком копируется в модуль, связанный с формой). Однако этот код можно заменить на другой или дополнить своим.
procedure TForm1.Frame22RadioGroup1Click(Sender: TObject); begin Frame22.RadioGroup1Click(Sender);//original code ShowMessage('Hello!'); //custom code end; |
Отметим также, что при необходимости использования одного и того же фрейма в нескольких проектах можно зарегистрировать его в палитре компонентов. Для этого достаточно создать стандартную процедуру регистрации, аналогичную процедуре регистрации компонента:
unit fr2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ImgList, ComCtrls; type TFrame2 = class(TFrame) ImageList1: TImageList; RadioGroup1: TRadioGroup; ListView1: TListView; procedure RadioGroup1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; procedure Register; //опишем процедуру регистрации в секции интерфейса implementation {$R *.DFM} procedure TFrame2.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: ListView1.ViewStyle:=vsIcon; 1: ListView1.ViewStyle:=vsSmallIcon; 2: ListView1.ViewStyle:=vsList; 3: ListView1.ViewStyle:=vsReport; end; end; procedure Register; //реализация процедуры регистрации фрейма begin RegisterComponents('FramePage',[TFrame2]); end; |
Затем можно выбрать из меню пункт Component/Install Component, выбрать "пакет" для установки компонента и скомпилировать его. В результате фрейм окажется на указанной в процедуре регистрации странице палитры компонентов.
Компонент TApplicationEvents
В предыдущих версиях Delphi для создания обработчика события объекта TApplication следовало создать процедуру, а затем в явном виде присвоить имя этой процедуры обработчику события TApplication, например:
procedure TForm1.ProcMess(var msg: TMsg; var handled: boolean); begin if (msg.message=WM_SYSCOMMAND) and (msg.wParam=SC_SCREENSAVE) and (RadioGroup1.ItemIndex=1) then handled:=true else handled:=false; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage:=ProcMess; end; |
Иными словами, способ создания обработчиков таких событий отличался от привычного, использующего генерацию "заготовок" кода при щелчке на нужной строке инспектора объектов. Теперь же создавать такие обработчики событий можно и традиционным способом. Для этой цели можно использовать новый компонент TApplicationEvents, список событий которого включает все события TApplication. Этот компонент можно поместить на любую форму приложения (и даже на несколько форм), и при наступлении обрабатываемого события все имеющиеся обработчики будут выполняться по очереди. Если необходимо, чтобы один из имеющихся обработчиков этого события выполнялся первым, следует вызвать его метод Activate (например, в обработчике события OnActivate формы, на которой он находится). Для того, чтобы предотвратить выполнение последующих обработчиков данного события, можно вызвать метод CancelDispatch компонента TApplicationEvents.
Компоненты для создания Web-приложений
Страница Internet палитры компонентов теперь состоит из восьми компонентов. Компоненты от NetMasters содержатся на отдельной странице FastNet. Компонент THTML в этой версии Delphi заменен на TWebBrowser, представляющий собой оболочку элемента управления ActiveX, устанавливающегося вместе с Microsoft Internet Explorer.
Помимо этого, в Delphi 5 имеются компоненты InternetExpress для создания MIDAS-клиентов в виде Web-приложений (о них было сказано выше).
Отметим также, что у компонента TWebAction теперь имеется свойство Producer, позволяющее непосредственно указать, какую именно HTML-страницу нужно генерировать при обращении. Это во многих случаях избавляет от необходимости создавать обработчик события OnAction этого компонента.
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 содержатся в отдельной статье, посвященной этой проблеме.
Новое в поддержке 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-объектов - теперь по умолчанию в них предлагается создавать библиотеку типов и генерировать код, предназначенный для поддержки автоматизации.
Новое в Visual Component Library
Библиотека компонентов Delphi 5 претерпела серьезные изменения по сравнению с предыдущей версией. Остановимся на них подробнее.
Нововведения в менеджере проектов
Менеджер проектов Delphi 5 теперь позволяет не только работать одновременно над несколькими проектами, но и выбирать активный проект из выпадающего списка (рис. 7).
Рисунок 7. Менеджер проектов Delphi 5
Новые компоненты для работы с базами данных
Список компонентов для работы с базами (и, что более существенно, поддерживаемых технологий доступа к данным) в 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.
Новые контейнерные классы
В библиотеке компонентов Delphi 5 появились новые контейнерные классы TObjectList, TComponentList и TClassList. Все они - потомки класса TList и предназначены для хранения ссылок на объекты, компоненты и классы. TComponentList может отслеживать уничтожение компонента, ссылку на который он содержит, и автоматически удалять ее.
Помимо этого, в Delphi 5 введены новые классы TObjectQueue и TObjectStack, предназначенные для хранения ссылок на объекты в виде очередей и стеков (рис. 20).
Рисунок 20. Иерархия объектов - потомков TList и TOrderedList
Новые возможности отладки
В интегрированном отладчике Delphi появилось немало новых возможностей, которые имеет смысл рассмотреть более подробно.
Новый браузер проектов
Браузер проектов (Project Browser) заменил Object Browser, присутствовавший в предыдущих версиях Delphi. В отличие от Object Browser, он доступен, даже если проект еще не скомпилирован. Есть возможность выбора, какие именно объекты отображать - классы данного приложения или все классы VCL. С помощью двойного щелчка мыши на имени класса можно вывести отдельное окно с детальной информацией о нем (рис. 8).
Рисунок 8. Браузер проектов
Помимо просмотра иерархии классов, возможен просмотр глобальных переменных и модулей, а также получение сведений о том, какие другие модули ссылаются на данный модуль.
Object Inspector: некоторые полезные нововведения
В Delphi 5, в отличие от предыдущих версий Delphi, инспектор объектов может содержать графические изображения. Например, в строке, содержащей значение такого свойства, как Color, теперь содержится не только наименование, но и изображение прямоугольника соответствующего цвета. Еще один пример: при выборе свойства Cursor из выпадающего списка можно выбрать изображение нужного курсора. Аналогичные редакторы свойств имеются у свойств Pen, Brush, ImageIndex (рис. 2).
Отметим, что теперь при создании собственных компонентов разработчик имеет возможность указать, что именно должно быть нарисовано в инспекторе объектов при отображении или выборе значения свойства. Данная возможность обеспечивается благодаря изменениям, внесенным в API, отвечающий за создание редакторов свойств. Эти изменения, в частности, позволяют, помимо собственно значения свойства, хранящегося в ресурсах формы, иметь также дополнительное графическое свойство, в которое можно поместить графическое изображение в соответствии с пожеланиями разработчика компонента.
Помимо этого, Delphi 5 позволяет установить, какие именно категории свойств должны отображаться в инспекторе объектов. Список отображаемых категорий свойств можно изменить, выбрав опцию View контекстного меню инспектора объектов. Кроме того, выбрав опцию Arrange из контекстного меню инспектора объектов, можно указать, как именно сортировать отображаемые в нем свойства - по алфавиту или по категориям (рис. 3).
Рисунок 2. Инспектор объектов с графическими изображениями |
Рисунок 3. Инспектор объектов, отображающий свойства, отсортированные по категориям |
Некоторые свойства могут содержаться одновременно в нескольких категориях. Например, свойства Top, Left, Width, Height формы содержатся и в категории Layout, и в категории Visual.
Отметим, что при создании собственных компонентов разработчик может регистрировать вновь созданные свойства в имеющихся категориях или создать собственные категории свойств.
Опции командной строки
Среда разработки Delphi 5 поддерживает несколько новых опций командной строки, позволяющих, в частности, отображать, сколько оперативной памяти занято в данный момент, компилировать загружаемый проект при запуске среды, выводить все сообщения в log-файл.
TeamSource - новое средство управления коллективной разработкой проектов
При коллективной разработке приложений весьма существенным фактором является контроль за различными версиями проектов, форм, модулей, скриптов баз данных и даже пользовательской документации. Как показывает отечественная практика, этому аспекту деятельности не всегда уделяется должное внимание. В результате этого нередко большое количество времени тратится на исправление последствий несогласованных действий различных авторов проекта (и, увы, на выяснение отношений на тему "Кто переписал мой триггер?! " или на другую подобную тему).
Средства управления коллективной разработкой проектов существовали и в предыдущих версиях Delphi (Intersolv PVCS или интерфейс к нему). В Delphi 5 вместо PVCS используется TeamSource - оригинальный инструментарий, весьма удобный в использовании (рис. 15).
Рисунок 15. Borland TeamSource
Принцип работы многих средств контроля версий основан на блокировке файлов, когда над одним файлом в данный момент времени работает только один автор. Существуют также средства контроля версий, принцип работы которых заключается в том, что каждый автор работает со своей локальной копией файла, при этом допускается одновременная работа нескольких человек над одним файлом. Когда автор заканчивает работу над своей локальной копией, все его изменения сохраняются и приводятся в соответствие с изменениями других авторов. Приведение в соответствие заключается в сравнении различий между локальной версией файла и его так называемой мастер-копией и их синхронизации (рис. 16).
Рисунок 16. Синхронизация локальной версии с мастер-копией
После приведения в соответствие изменения в локальной версии сохраняются в мастер-копии, а ее изменения - в локальной версии. Именно эта модель контроля версий используется в TeamSource. Собственно средство контроля версий (которым может быть и PVCS) используется для организации архива файлов, подлежащих коллективной разработке. Одно из простейших средств организации архива, ZLib, поставляется вместе с TeamSource.
To-do list: список недоделанных дел…
Delphi 5 теперь поддерживает так называемый список заданий (to-do list). Задания могут относиться как ко всему проекту в целом, так и к отдельному модулю. Их список можно получить, выбрав пункт меню View/To-do list. В этом окне можно добавлять элементы в список, отмечать их как выполненные, редактировать, менять их приоритетный порядок. Можно также добавить элемент в список с помощью соответствующей опции контекстного меню редактора кода или с помощью комбинации клавиш Ctrl-Shift-T (рис. 9, 10).
Рисунок 9. Создание нового задания
Рисунок 10. Список заданий, помещенных в To-do list.
Задания к отдельным модулям хранятся в качестве комментариев в исходном тексте модуля:
{ TODO -oМаша -cДизайн : Изменить шрифт на кнопках } |
Задания для всего проекта хранятся в файле с расширением *.TODO. В списке задания для всего проекта и для отдельных форм сопровождаются разными пиктограммами.
Отметим, что каждое задание может содержать имя исполнителя, приоритет, категорию задания (их может быть сколько угодно), текст задания и отметку, выполнено ли оно.
{ DONE -oМаша -cДизайн : Изменить шрифт на кнопках } |
По всем этим параметрам список заданий может быть отсортирован. Если модуль, к которому относится задание, не загружен в редактор кода, соответствующая строка в списке отображается серым цветом.
Отметим, что список заданий может быть скопирован в буфер обмена в виде текста или HTML-таблицы.
Translation Repository: создадим коллективный словарь…
Delphi 5 предоставляет новые удобные средства создания приложений в различных языковых версиях. Для создания таких приложений используется набор средств под общим названием International Translation Environment.
Проиллюстрируем эти возможности на простейшем примере. Предположим, нам нужно создать приложение, существующее в русской и английской версии. Создадим новый проект, состоящий из одной формы с несколькими интерфейсными элементами, и сохраним его:
Далее выберем из главного меню опцию Project/Language/Add. В результате будет запущен эксперт, предлагающий последовательность форм, в которых следует выбрать поддерживаемые проектом языки (рис. 11).
Рисунок 11. Эксперт для создания многоязычных приложений
В результате будут созданы два дополнительных проекта динамически загружаемых библиотек, содержащих строковые ресурсы для двух языков, и автоматически запущен Translation Manager (рис. 12).
Рисунок 12. Проект приложения, имеющего две языковые версии
Translation Manager представляет собой, по существу, редактор строковых ресурсов, которые могут присутствовать в форме. В нем отображены сведения о тех свойствах интерфейсных элементов, которые могут быть различными в различных языковых версиях приложения. В числе этих свойств - не только свойства типа Caption или Text, но и иные визуальные характеристики, например, Height и Width. Помимо этого, в строковых ресурсах присутствуют и стандартные строки (названия дней недели и месяцев, сообщения об ошибках, названия общеупотребимых кнопок типа "Yes", "No", "Cancel", "Help", и др.).
Отредактируем в нашем примере названия интерфейсных элементов (рис. 13).
Рисунок 13. Translation Manager
Теперь мы можем выбрать опцию Project/Languages/Set Active и выбрать один из доступных языков. Скомпилировав приложение, получим нужную языковую версию (рис. 14).
Рисунок 14. Две языковых версии одного приложения
При поставке такого приложения следует не забыть скопировать в его каталог один из двух скомпилированных файлов ресурсов, имеющих в нашем случае расширения *.ENU и *.RUS и имя, совпадающее с именем исполняемого файла.
Отметим, что языковые версии строк можно сохранить в специальном хранилище (так называемомTranslation Repository - репозитарии переводов) и загружать из него. Данный репозитарий является разделяемым, что позволяет использовать его при групповой работе.
Управление автоматическим созданием форм в проектах
В прежних версиях Delphi при создании новой формы она, за редким исключением, попадала в список автоматически создаваемых форм (Autocreated Forms). В Delphi 5 можно выбрать, помещать ли вновь создаваемые формы в этот список либо в список Available Forms. В последнем случае в список автоматически создаваемых форм попадет только главная форма приложения.
Вместо заключения
Таким образом, Delphi 5 обладает немалым количеством весьма полезных нововведений, поддерживающих самые современные технологии и способных повысить эффективность разработки программных продуктов самого разнообразного назначения - от простейших утилит, игр, мультимедиа-приложений до самых сложных (в том числе распределенных) систем. С более подробными сведениями о наиболее значимых из них (в том числе о поддержке ADO и ASP, MIDAS 3, компонентах для непосредственного доступа к IB Database, использовании серверов автоматизации) можно ознакомиться в других статьях, посвященных этому продукту и размещенных на сайте российского представительства Inprise.
С автором можно связаться по адресу:
http://www.geocities.com/SiliconValley/Way/9281