Эта книга предназначена для профессиональных разработчиков программного обеспечения в среде Delphi и написана двумя признанными экспертами в этой области. В текст книги включен исходный код множества прекрасных примеров работоспособных приложений по всем обсуждаемым темам, включая примеры приложений рабочего стола, многоуровневых и Web-ориентированных приложений. Каждый пример подробно комментируется, что делает данную книгу отличным учебником, позволяющим быстро освоить создание разнообразных эффективных приложений. В этой книге описана стратегия создания пользовательских приложений, динамических библиотек, применения многопоточного режима, создания специальных компонентов и многого другого. Вы узнаете как с помощью Delphi создаются приложения, в которых используются технологии CLXT, BizSnapT, DataSnapT, SOAP, ASP и беспроводной связи. В новом издании авторы постарались сохранить дух и традиции прежних изданий книг этой серии, которые, возможно, сделали их наиболее читаемыми книгами о Delphi в мире, а также двухкратным призером читательских симпатий книг по Delphi.
Введение ЧАСТЬ I. ОСНОВНЫЕ НАПРАВЛЕНИЯ ПРОГРАММИРОВАНИЯ Глава 1. Программирование в Delphi Семейство продуктов Delphi Delphi: что почем Качество визуальной среды разработки Скорость работы компилятора и быстродействие откомпилированных программ Мощность языка программирования и его сложность Гибкость и масштабируемость архитектуры баз данных Поддержка средой разработки шаблонов проектирования и использования Немного истории Delphi 1 Delphi 2 Delphi 3 Delphi 4 Delphi 5 Delphi 6 Интегрированная среда разработки Delphi Главное окно Конструктор форм Инспектор объектов Редактор кода Проводник структуры кода Древовидное представление объектов Обзор исходного кода проекта Обзор простейшего приложения События и сообщения Необязательность программирования Упрощение разработки прототипов Расширяемость Delphi Десять важнейших возможностей IDE Delphi 1. Автозавершение классов 2. Навигатор AppBrowser 3. Навигатор Interface/Implementation 4. Стыковка окон 5. Броузер объектов 6. Новый GUID 7. Подсветка синтаксиса С++ 8. Список To Do 9. Использование диспетчера проектов 10. Использование Code Insight Резюме Глава 2. Язык программирования Object Pascal Комментарии Дополнительные возможности процедур и функций Скобки при вызове функций Перегрузка Значения параметров по умолчанию Переменные Константы Операторы Оператор присвоения Операторы сравнения Логические операторы Арифметические операторы Побитовые операторы Процедуры инкремента (приращения) и декремента Операторы присвоения с действием Типы данных Object Pascal Сравнение типов данных Символьные типы Многообразие строк Тип Variant Тип Currency Пользовательские типы данных Массивы Динамические массивы Записи Множества Объекты Указатели Псевдоним типа Приведение и преобразование типов Строковые ресурсы Условные операторы Оператор if Оператор case Циклы Цикл for Цикл while Цикл repeat..until Процедура Break() Процедура Continue() Процедуры и функции Передача параметров Область видимости Модули Раздел uses Взаимные ссылки Пакеты Использование пакетов Delphi Синтаксис описания пакетов Объектно-ориентированное программирование Объектно-основанное или объектно-ориентированное программирование Использование объектов Delphi Объявление и создание экземпляра Уничтожение Методы Типы методов Свойства Определение области видимости Внутреннее представление объектов Базовый класс - TObject Интерфейсы Структурная обработка исключений Классы исключений Процесс обработки исключений Повторная передача исключения Информация о типах времени выполнения Резюме Глава 3. Приключения сообщения Что такое сообщение? Типы сообщений Принципы работы системы сообщений Windows Система сообщений Delphi Специализированные записи Обработка сообщений Обработка сообщений - условие обязательное Возврат результата обработки сообщения Событие OnMessage класса TApplication Использование собственных типов сообщений Метод Perform() Функции API SendMessage() и PostMessage() Нестандартные сообщения Уведомляющие сообщения Внутренние сообщения компонентов VCL Пользовательские сообщения Анатомия системы сообщений: библиотека VCL Взаимосвязь сообщений и событий Резюме ЧАСТЬ II. ПРОФЕССИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ Глава 4. Переносимость кода Общая совместимость Определение версии Модули, компоненты и пакеты Проблемы IDE Совместимость Delphi и Kylix Только не в Linux Особенности языка и компилятора Несколько мелочей Новые возможности Delphi 6 Варианты Значения перечислимого типа Директива $IF Потенциальная несовместимость бинарных DFM Переход от Delphi 5 Переприсвоение типизированных констант Унарное вычитание Переход от Delphi 4 Проблемы RTL Проблемы VCL Проблемы приложений для Internet Проблемы баз данных Переход от Delphi 3 32-разрядные беззнаковые целые 64-разрядный целый тип Действительный тип Переход от Delphi 2 Изменения в булевых типах Строковые ресурсы ResourceString Изменения в RTL Класс TCustomForm Метод GetChildren() Серверы автоматизации Переход от Delphi 1 Резюме Глава 5. Создание многопоточных приложений Концепция потоков Типы многозадачности Использование многопоточности в приложениях Delphi Неправильное использование потоков Объект TThread Принципы работы объекта TThread Экземпляры потока Завершение потока Синхронизация с подпрограммами библиотеки VCL Демонстрационное приложение Приоритеты и расписание Приостановка и возобновление потока Хронометраж потока Управление несколькими потоками Хранение локальных данных потоков Синхронизация потоков Пример многопоточного приложения Пользовательский интерфейс Поток поиска Настройка приоритета Многопоточный доступ к базе данных Многопоточная графика Внеприоритетный поток Резюме Глава 6. Динамически компонуемые библиотеки Что такое библиотека DLL? Статическая компановка против динамической Зачем нужны библиотеки DLL? Совместное использование кода, ресурсов и данных несколькими приложениями Сокрытие реализации Создание и использование библиотек DLL Подсчет пенсов (пример простой DLL) Отображение модальных форм из DLL Отображение немодальных форм из библиотек DLL Использование DLL в приложениях Delphi Явная загрузка библиотек DLL Функция входа/выхода динамически компонуемых библиотек Функции инициализации и завершения процессов и потоков Пример функции входа/выхода Исключения в DLL Перехват исключений в 16разрядной Delphi Исключения и директива SafeCall Функции обратного вызова Использование функции обратного вызова Отображение нестандартного списка Обращение к функциям обратного вызова из библиотеки DLL Совместное использование DLL несколькими процессами Создание DLL с совместно используемой памятью Применение DLL с совместно используемой памятью Экспорт объектов из библиотек DLL Резюме ЧАСТЬ III. РАЗРАБОТКА БАЗ ДАННЫХ Глава 7. Архитектура баз данных в Delphi Типы баз данных Архитектура баз данных Подключение к серверам баз данных Способы подключения к базе данных Подключение к базе данных Работа с наборами данных Как открыть и закрыть набор данных Навигация по набору данных Манипулирование наборами данных Работа с полями Значения полей Типы данных полей Имена и номера полей Манипулирование данными полей Редактор полей Работа с полями типа BLOB Фильтрация данных Поиск в наборе данных Использование модулей данных Пример применения поиска, фильтра и диапазона Закладки Резюме Глава 8. Применение dbExpress при разработке баз данных Применение dbExpress Односторонние наборы данных DbExpress против Borland Database Engine (BDE) Использование dbExpress при разработке межплатформенных приложений Компоненты dbExpress Компонент TSQLConnection Класс TSQLDataset Компоненты совместимости с прежней версией Компонент TSQLMonitor Разработка приложений dbExpress, позволяющих редактировать данные Компонент TSQLClientDataset Распространение приложений dbExpress Резюме Глава 9. Применение dbGo for ADO при разработке баз данных Введение в dbGo Обзор стратегии Microsoft по универсальному доступу к данным Краткий обзор OLE DB, ADO и ODBC Использование dbGo for ADO Установка провайдера OLE DB для ODBC База данных Access Компоненты dbGo for ADO Компонент TADOConnection Ввод имени пользователя и пароля при подключении к базе данных Компонент TADOCommand Компонент TADODataset Компоненты для работы с наборами данных BDE Компонент TADOQuery Компонент TADOStoredProc Обработка транзакций Резюме ЧАСТЬ IV. КОМПОНЕНТОРИЕНТИРОВАННАЯ РАЗРАБОТКА Глава 10. Архитектура компонентов: VCL и CLX Немного подробнее о новой библиотеке CLX Что такое компонент? Иерархия компонентов Невизуальные компоненты Визуальные компоненты Структура компонентов Свойства Типы свойств Методы События Работа с потоками данных Отношения владения Отношения наследования Иерархия визуальных компонентов Класс TPersistent Методы класса TPersistent Класс TComponent Класс TControl Классы TWinControl и TWidgetControl Класс TGraphicControl Класс TCustomControl Другие классы Информация о типах времени выполнения (RTTI) Модуль TypInfo.pas - определитель RTTI Получение информации о типах Получение информации о типах указателей на методы Получение информации о перечислимых типах Резюме Глава 11. Разработка компонентов VCL Концепция разработки компонентов Решение о необходимости создания компонента Этапы разработки компонента Выбор базового класса Создание модуля компонента Создание свойств Создание событий Создание методов Конструкторы и деструкторы Регистрация компонента Проверка компонента Создание пиктограммы компонента Примеры разработки компонентов Расширение возможностей компонентовоболочек для классов Win32 Компонент TddgRunButton - создание свойств Компонент-контейнер TddgButtonEdit Проектные решения Предоставление свойств вложенных объектов Предоставление событий Компонент TddgDigitalClock - создание событий компонента Добавление форм в палитру компонентов Резюме Глава 12. Создание расширенного компонента VCL Псевдовизуальные компоненты Расширенные подсказки Создание потомка класса THintWindow Эллиптическое окно Активизация потомка класса THintWindow Применение TddgHintWindow Анимационные компоненты Компонент строки титров Создание кода компонента Создание изображения в памяти Прорисовка компонента Анимация титров Проверка компонента TddgMarquee Создание редакторов свойств Создание потомка редактора свойств Редактирование свойства как текста Регистрация редактора свойств Редактирование свойства в диалоговом окне Редакторы компонентов Класс TComponentEditor Класс TDefaultEditor Пример простого компонента Пример редактора для простого компонента Регистрация редактора компонентов Работа с потоками данных непубликуемых компонентов Определение свойств Пример использования функции DefineProperty() Компонент TddgWaveFile: пример использования функции DefineBinaryProperty() Категории свойств Классы категорий Пользовательские категории Списки компонентов: классы TCollection и TCollectionItem Определение класса TCollectionItem: компонент TRunBtnItem Определение класса TCollection: компонент TRunButtons Реализация классов TddgLaunchPad, TRunBtnItem и TRunButtons Редактирование списка компонентов TCollectionItem в диалоговом окне редактора свойств Резюме Глава 13. Разработка компонентов CLX Что такое CLX? Архитектура CLX Преобразование приложений Обойдемся без сообщений Простые компоненты Компонент TddgSpinner Дополнения времени разработки Ссылки на компоненты и список ImageList Компоненты CLX для работы с базами данных Редакторы компонентов CLX Пакеты Соглашения об именовании Пакеты времени выполнения Пакеты времени разработки Модули регистрации Пиктограммы компонентов Резюме Глава 14. Пакеты Для чего предназначены пакеты? Сокращение размера кода Дробление приложений и уменьшение их размеров Хранение компонентов Когда не нужно использовать пакеты? Типы пакетов Файлы пакетов Использование пакетов времени выполнения Установка пакетов в IDE Delphi Разработка пакетов Редактор пакетов Сценарии разработки пакетов Версии пакетов Директивы компилятора для пакетов Подробней о директиве {$WEAKPACKAGEUNIT} Соглашения об именах пакетов Расширяемые приложения, использующие пакеты времени выполнения (дополнения) Создание форм дополнений Экспорт функций из пакетов Загрузка формы из функции, расположенной в пакете Как получить информацию о пакете Резюме Глава 15. Разработка приложений COM Основы COM COM: Модель компонентных объектов COM, ActiveX или OLE? Терминология Достоинства ActiveX OLE 1 против OLE 2 Структурированное хранилище Единообразная передача данных Потоковые модели COM+ COM и Object Pascal Интерфейсы Использование интерфейсов Тип возвращаемого значения HResult Объекты COM и фабрики классов Классы TComObject и TComObjectFactory Внутренние серверы COM Внешние серверы COM Агрегация Распределенная модель COM Автоматизация Интерфейс IDispatch Информация о типе Позднее и раннее связывание Регистрация Создание сервера автоматизации Создание контроллеров автоматизации Усложнение технологий автоматизации События автоматизации Коллекции автоматизации Новые типы интерфейсов в библиотеке типов Обмен двоичными данными За кулисами: языковая поддержка COM Класс TOleContainer Пример простого приложения Пример более сложного приложения Резюме Глава 16. Программирование для оболочки Windows Вывод пиктограммы на панель задач Интерфейс API Обработка сообщений Пиктограммы и подсказки Обработка щелчков мышью Сокрытие приложения Пример приложения Панели инструментов рабочего стола Интерфейс API Класс TAppBar: форма окна AppBar Использование компонента TAppBar Ярлыки Windows Создание экземпляра интерфейса IShellLink Использование интерфейса IShellLink Пример приложения Расширения оболочки Мастер объектов COM Обработчики копирования Обработчики контекстных меню Обработчики пиктограмм Обработчики контекстной подсказки Резюме Глава 17. Применение интерфейса API Open Tools Интерфейсы Open Tools Использование интерфейса API Open Tools Мастер Dumb Мастер Wizard Мастер DDG Search Мастера форм Резюме ЧАСТЬ V. РАЗРАБОТКА КОРПОРАТИВНЫХ ПРИЛОЖЕНИЙ Глава 18. Транзакционные методы разработки с применением COM+ и MTS Что такое COM+? Почему COM? Службы Транзакции Система безопасности Оперативная активизация Компоненты для работы с очередью Объектный пул События Средства времени исполнения База данных регистрации (RegDB) Настраиваемые компоненты Контекст Нейтральные потоки Разработка приложений COM+ Цель - масштабируемость Контекст исполнения Учет состояния объектов Контроль за временем существования объектов Организация приложения COM+ Размышления о транзакциях Ресурсы COM+ в Delphi Мастера COM+ Структура COM+ Простое приложение Tic-Tac-Toe Отладка приложений COM+ Резюме Глава 19. Разработка приложений CORBA Характеристики CORBA Архитектура CORBA OSAgent Интерфейсы Язык определения интерфейсов (IDL) Основные типы данных Пользовательские типы данных Псевдонимы Перечисления Структуры Массивы Последовательности Параметры методов Модули Модуль Bank Сложные типы данных Delphi, CORBA и Enterprise Java Beans (EJB) Интенсивный курс EJB для программистов Delphi EJB - специализированный компонент Контейнеры для хранения объектов EJB Использование EJB предопределенных API Интерфейсы Home и Remote Типы объектов EJB Настройка JBuilder 5 для разработки EJB Разработка простого EJB “Hello, world” CORBA и Web-службы Создание Web-службы Создание клиентского приложения SOAP Добавление в проект Web-службы клиентского кода CORBA Резюме Глава 20. Приложения BizSnap: разработка Web служб SOAP Что такое Web-службы? Протокол SOAP Разработка Web-служб Рассмотрим класс TWebModule Определение вызываемого интерфейса Реализация вызываемого интерфейса Проверка Web-службы Обращение клиента к Web-службе Создание модуля импорта для удаленного вызываемого объекта Использование компонента THTTPRIO Резюме Глава 21. Разработка приложений DataSnap Механизм построения многоуровневого приложения Преимущества многоуровневой архитектуры Централизованная бизнес-логика Архитектура “тонкого” клиента Автоматическое согласование ошибок Модель “портфеля” Отказоустойчивость Балансировка загрузки Типичная архитектура приложения DataSnap Сервер Клиент Использование DataSnap для создания приложений Установка сервера Создание клиента Дополнительные параметры, повышающие надежность приложения Методы оптимизации клиентской части приложения Методы сервера приложений Примеры из реальной жизни Объединения Дополнительные возможности наборов данных клиента Двухуровневые приложения Классические ошибки Установка приложений DataSnap Проблемы лицензирования Настройка DCOM Файлы, необходимые для установки приложения Соглашения по установке приложений в Internet (брандмауэры) Резюме ЧАСТЬ VI. ПРОГРАММИРОВАНИЕ ДЛЯ INTERNET Глава 22. Разработка приложений ASP Понятие активного объекта сервера Активные страницы сервера Мастер активных объектов сервера Редактор библиотеки типов Объект ASP Response Первый запуск Объект ASP Request Перекомпиляция активных объектов сервера Повторный запуск активных страниц сервера Объекты ASP Session, Server и Application Активные объекты сервера и базы данных Активные объекты сервера и поддержка NetCLX Отладка активных объектов сервера Отладка активных объектов сервера с помощью MTS Отладка в Windows NT 4 Отладка в Windows 2000 Резюме Глава 23. Разработка приложений WebSnap Возможности WebSnap Несколько Web-модулей Серверные сценарии Компоненты класса TAdapter Разнообразие методов доступа Компоненты генераторов страниц Управление сеансом Служба регистрации (login) Отслеживание пользователя Управление HTML Службы загрузки файлов Создание приложения WebSnap Проект приложения Расширение функциональных возможностей приложения Меню навигации Процесс регистрации Управление данными предпочтений пользователя Хранение данных между сеансами Обработка изображений Отображение данных Преобразование приложения в DLL ISAPI Дополнительные возможности Компонент LocateFileServices Загрузка файлов Применение специальных шаблонов Специальные компоненты TAdapterPageProducer Резюме Глава 24. Разработка приложений беспроводной связи Эволюция разработки: как это было До восьмидесятых: сначала были динозавры Восьмидесятые: настольные приложения баз данных Начало девяностых: архитектура клиент/сервер Девяностые: многоуровневые, Internet-ориентированные транзакции Начало 2000-х: инфраструктура приложений простирается до устройств мобильной связи Мобильные беспроводные устройства Мобильные телефоны Устройства PalmOS Pocket PC RIM BlackBerry Технологии радиосвязи GSM, CDMA и TDMA CDPD 3G GPRS Bluetooth 802.11 Серверные технологии беспроводной передачи данных SMS WAP I-mode PQA Квалификация пользователя Сети с коммутацией каналов против сетей с коммутации пакетов Беспроводные сети - это не Web Серьезность фактора форм Ввод данных и методы навигации Мобильная коммерция Резюме Предметный указатель