Часть III. Компонентно-ориентированная разработка

Глава 20. Ключевые элементы VCL и информация о типах времени
выполнения:
Что такое компонент
Типы компонентов
Стандартные компоненты
Пользовательские компоненты
Графические компоненты
Невизуальные компоненты
Структура компонентов
Свойства
Свойства: доступ к полям компонента
Методы доступа к свойствам
Типы свойств
Методы
События
Назначение событию кода во время разработки программы
Динамическое назначение кода событию
Работа с потоками данных
Отношения владения
Отношения наследования
Иерархия визуальных компонентов
Класс TPersistent
Методы класса TPersistent
Класс TComponent
Свойства класса TComponent
Методы класса TComponent
Класс TControl
Класс TWinControl
Свойства класса TWinControl
Методы класса TWinControl
События класса TWinControl
Класс TGraphicControl
Класс TCustomControl
Другие классы
Классы TStrings и TStringsLists
Класс TCanvas
Информация о типах времени выполнения (RTTI)
Модуль TypInfo.pas - определитель RTTI
Получение информации о типах
Получение информации о типах объектов
Получение информации о происхождении объекта
Получение информации о типах свойств объекта
Проверка наличия некоторого свойства у объекта
Получение информации о типах указателей на методы
Получение RTTI-информации для упорядоченных типов
RTTI-информация для целочисленных типов
RTTI-информация для перечислимых типов
RTTI-информация для множеств
Присваивание значений свойствам с помощью RTTI
Резюме

Глава 21. Создание пользовательских компонентов в Delphi
Основные концепции разработки компонентов
Решение о необходимости создания компонента
Этапы разработки компонента
Выбор класса-предка
Создание модуля компонента
Создание свойств
Типы свойств
Создание событий
Происхождение событий
Определение свойств-событий
Создание методов
Никакой взаимозависимости!
Открытость метода
Конструкторы и деструкторы
Переопределение конструкторов
Поведение компонента во время разработки
Переопределение деструкторов
Регистрация компонента
Тестирование компонента
Создание пиктограммы компонента
Примеры разработки компонентов
Расширение возможностей компонентов-оболочек для классов Win32
Компонент TddgExtendedMemo - расширение компонента TMemo
TddgTabbedListBox - расширение компонента TListBox
Компонент TddgRunButton - создание свойств
Создание и выполнение процесса
Методы класса TddgRunButton
Компонент-контейнер TddgButtonEdit
Проектные решения
Выведение свойств вложенных объектов на поверхность
Вывод на поверхность событий вложенных объектов
Компонент TddgDigitalClock - создание событий компонента
Добавление форм в палитру компонентов
Пакеты компонентов
Зачем использовать пакеты
Сокращение размера кода
Дробление приложений и уменьшение их размеров
Хранение компонентов
Когда не нужно использовать пакеты
Типы пакетов
Файлы пакетов
Активизация использования пакетов в приложении
Установка пакетов в интегрированную среду разработки Delphi
Разработка пакетов
Редактор пакетов
Сценарии разработки пакетов
Сценарий 2. Только пакет разработки компонентов
Версии пакетов
Директивы компилятора, предназначенные для пакетов
Дополнительная информация о директиве {SWEAKPACKAGEUNIT}
Соглашения об именах пакетов
Пакеты надстроек
Генерирование форм надстроек
Резюме

Глава 22. Сложные методики работы с компонентами
Псевдовизуальные компоненты
Расширенные подсказки
Создание потомка класса THintWindow
Эллиптическое окно
Активизация потомка класса THintWindow
Использование компонента TddgHintWindow
Анимированные компоненты
Компонент бегущих титров
Написание кода компонента
Работа с изображением в памяти
Отображение компонента
Анимация полосы титров
Тестирование компонента TddgMarquee
Создание редакторов свойств
Создание объекта-потомка редактора свойств
Редактирование свойства в виде текста
Регистрация нового редактора свойства
Редактирование свойства в специальном диалоговом окне
Пример диалогового редактора свойств; расширение возможностей
компонента TddgRunButton
Редакторы компонентов
Компонент TComponentEditor
Свойства
Методы
Стандартный редактор компонентов TDefaultEditor
Пример простого компонента
Пример редактора для простого компонента
Регистрация редактора компонентов
Работа непубликуемых компонентов с потоками данных
Определение свойств
Пример использования функции DefineProperty()
Компонент TddgWaveFile: пример использования функции
DefineBinaryProperty()
Категории свойств
Классы категорий
Пользовательские категории
Списки компонентов: классы TCollection и TCollectionItem
Определение класса типа TCollectionItem: компонент TRunBtnItem
Определение класса типа TCollection: компонент TRunButtons
Реализация классов TddgLaunchPad, TRunBtnItem и TRunButtons
Реализация компонента TRunBtnItem
Реализация компонента TRunButtons
Реализация компонента TddgLaunchPad
Редактирование списка компонентов TCollectionItem в диалоговом окне
редактора свойств
Резюме

Глава 23. СОМ-ориентированные технологии
Основы СОМ
СОМ: Component Object Model
СОМ - ActiveX - OLE
Терминология
Достоинства ActiveX
Стандарты OLE 1 и OLE 2
Структурированное хранилище
Единообразная передача данных
Потоковые модели
Стандарт СОМ+
Object Pascal и СОМ
Интерфейсы
Интерфейс IUnknown
Использование интерфейсов
Интерфейсы и идентификаторы интерфейсов
Псевдоним метода
Тип возвращаемого значения HResult
СОМ-объекты и фабрики классов
Классы TComObject и TComObjectFactory
Внутренние СОМ-серверы
Функция DllRegisterServer()
Функция DllUnregisterServer()
Функция DllGetClassObject()
Функция DllCanUnloadNow()
Создание экземпляра внутреннего СОМ-сервера
Внешние СОМ-серверы
Регистрация
Создание экземпляра внешнего СОМ-сервера
Агрегирование
Распределенная модель СОМ
Автоматизация
Интерфейс IDispatch
Информация о типе
Позднее и раннее связывание
Регистрация
Создание сервера автоматизации
Создание внешнего сервера автоматизации
Создание внутреннего сервера автоматизации
Создание контроллеров автоматизации
Управление внешним сервером
Управление внутренним сервером
Использование более сложных технологий автоматизации
События автоматизации
Что представляют собой события СОМ
События в Delphi
События в автоматизации
События автоматизации в Delphi
События с несколькими стоками
Коллекции автоматизации
Реализация в Delphi
Новые типы интерфейсов в библиотеке типов
Обмен двоичными данными
Языковая поддержка для СОМ
Варианты
Массивы вариантов
Автоматизация с поздним связыванием
Тип данных WideString
Интерфейсы
Диспинтерфейсы
Сервер транзакций Microsoft (MTS)
Зачем нам MTS
Что такое MTS
Что лучше: знать или не знать о своем состоянии?
Управление временем жизни объектов
Пакеты
Безопасность
Ах, да, еще и транзакции!
Ресурсы
Технология MTS в Delphi
Мастера MTS
Структура MTS
Игра в крестики-нолики: пример приложения
Инсталляция сервера
Приложение клиента
Отладка MTS-приложений
Класс TOleContainer
Простейший пример приложения
Внедрение нового OLE-объекта
Внедрение или связывание существующего OLE-файла
Пример помощнее
Создание дочерней формы
Сохранение в файл и чтение из файла
Использование буфера обмена для копирования и вставки OLE-объекта
Резюме

Глава 24. Расширение оболочки Windows
Вывод пиктограммы на панель задач
Интерфейс API
Обработка сообщений
Пиктограммы и подсказки
Обработка щелчков мышью
Скрытие приложения
Пример приложения
Панели инструментов рабочего стола Windows
Интерфейс API
Компонент ТАррВаr: форма окна АррВаr
Использование компонента ТАррВаr
Ярлыки Windows
Создание экземпляра интерфейса IShellLink
Использование интерфейса IShellLink
Создание ярлыка
Получение и запись информации ярлыка
Пример приложения
Расширения оболочки
Мастер СОМ-объектов
Обработчики перемещений
Метод CopyCallback()
Реализация объекта ТСоруНооk
Регистрация
Обработчики контекстных меню
Интерфейс IShellExtInit
Интерфейс IContextMenu
Регистрация
Обработчики пиктограмм
Флаги пакета
Интерфейсы обработчика пиктограмм
Регистрация
Резюме

Глава 25. Создание элементов управления ActiveX
Зачем создавать элементы управления ActiveX
Создание элемента управления ActiveX
Мастер создания элемента управления ActiveX
Параметры элемента управления ActiveX
Инкапсуляция элементов управления VCL
Среда разработки ActiveX
Контейнерные элементы управления
Окно отражения
Время разработки и время выполнения
Лицензирование элемента управления
Страницы свойств
Стандартные страницы свойств
Пользовательские страницы свойств
Активные формы ActiveForm
Добавление свойств к формам ActiveForm
Элементы управления ActiveX в Web
Связь с Web-броузером
Распространение в Web
Вкладка Project
Вкладки Packages и Additional Files
Вкладка Code Signing
Общие советы
Резюме

Глава 26. Использование интерфейса Open Tools API
Интерфейсы Open Tools
Использование интерфейса Open Tools API
Мастер Dumb
Мастер Wizard
Интерфейс мастера
Пользовательский интерфейс мастера
Одним выстрелом - двух зайцев: ЕХЕ и DLL
Мастер DDG Search
Мастера форм
Резюме

Глава 27. Разработка приложений CORBA в Delphi
Брокеры запросов объектов
Интерфейсы
Заглушки и каркасы
ORB-брокер VisiBroker
VisiBroker: службы поддержки времени выполнения
Служба Smart Agent (инструмент osagent)
Демон активизации объектов
Хранилище интерфейсов
VisiBroker: инструменты администрирования
Поддержка архитектуры CORBA в среде Delphi
Классы поддержки архитектуры CORBA
Мастер CORBA-объектов
Редактор библиотек типов IDE Delphi
Создание CORBA-решений в среде Delphi 5
Построение CORBA-сервера
Вызов мастера CORBA-объектов
Использование редактора библиотек типов
Реализация методов интерфейса IQueryServer
Запуск CORBA-сервера
Построение CORBA-клиента с использованием раннего связывания
Создание CORBA-клиента
Подключение к CORBA-серверу
Построение CORBA-клиента с использованием сценария позднего связывания
Кросс-язык CORBA
Ручной маршалинг для CORBA-сервера, написанного на языке Java
Компилятор Idl2Pas фирмы Inprise
Развертывание ORB-брокера VisiBroker
Резюме


Часть VI. Работа с базами данных


Глава 28. Создание локальных приложений баз данных
Работа с наборами данных
Архитектура компонентов баз данных библиотеки VCL
Компоненты доступа к данным BDE
Открытие набора данных
Навигация по набору данных
Свойства BOF, EOF и циклическая обработка
Закладки
Пример навигации
Компонент TDataSource
Работа с полями
Значения полей
Типы полей данных
Имена и номера полей
Манипулирование полем данных
Редактор полей
Добавление полей
Потомки компонента TField
Поля и инспектор объектов
Вычисляемые поля
Подстановочные поля
Перетаскивание полей мышью
Работа с BLOB-ПОЛЯМИ
Класс TBlobField и типы поля
Пример использования BLOB-ПОЛЯ
Обновление набора данных
Изменение состояния набора данных
Фильтры
Фильтрация набора данных
Методы FindFirst/FindNext
Поиск записи
Использование компонента ТТablе
Поиск записей
Метод FindKey()
Методы SetKey()..GotoKey()
Поиск ближайшего соответствия
Использование индексов
Метод SetRange()
Метод ApplyRange()
Главная/подчиненная таблицы
События компонента ТТаЫе
Создание таблицы в программе
Модули данных
Пример приложения с поиском, фильтрацией и выделением
диапазона данных
Модуль данных
Главная форма
Форма выделения диапазона данных
Форма поиска по ключу
Форма фильтрации
Другие типы наборов данных: Tquery и TStoredProc
Компонент TQuery
Компонент TStoredProc
Таблицы в текстовом файле
Формат файла схемы
Файл данных
Использование текстовых таблиц
Ограничения
Импорт текстовых таблиц
Подключение с помощью ODBC
Где найти драйвер ODBC
Пример использования ODBC: подключение к MS Access
Объекты данных ActiveX (ADO)
Кто есть кто среди стратегий доступа к данным Microsoft
Компоненты ADOExpress
Компоненты обеспечения соединения
Компоненты доступа ADO
Компоненты обеспечения совместимости
Установка соединения с источником данных ADO
Пример: установка соединения средствами ADO
Установка ADO
Резюме

Глава 29. Разработка приложений архитектуры клиент/сервер
Почему именно клиент/сервер?
Архитектура клиент/сервер
Клиент
Сервер
Бизнес-правила
Размещение программ бизнес-правил
Защита данных
Целостность данных
Централизованное управление данными
Распределение работ
Модели клиент/сервер
Двухуровневая модель
Трехуровневая модель
Архитектура клиент/сервер и локальные базы данных
Работа с наборами данных и с отдельными записями
Защита данных
Методы блокировки записей
Целостность данных
Транзакции
Язык SQL и его роль в технологии клиент/сервер
Разработка приложений клиент/сервер в Delphi
Разработка серверной части
Объекты базы данных
Определение таблиц
Типы данных
Создание таблицы
Индексы
Вычисляемые столбцы
Внешние ключи
Значения по умолчанию
Использование доменов
Определение бизнес-правил с помощью представлений, хранимых
процедур и триггеров
Определение представлений
Определение хранимых процедур
Поддержка целостности данных с помощью хранимых процедур
Определение триггеров
Привилегии и права доступа к объектам базы данных
Предоставление доступа к таблицам
Предоставление доступа к представлениям
Предоставление доступа к хранимым процедурам
Отмена прав доступа пользователей
Разработка клиентской части
Использование компонента TDatabase
Подключение на уровне приложения
Управление защитой
Управление транзакциями
Какой компонент использовать - TTable или TQuery?
Компонент ТТаЫе и SQL-команды
Использование компонента TQuery
Динамический SQL
Выполнение хранимых процедур
Использование компонента TStoredProc
Получение результирующего набора хранимой процедуры
из компонента
TQuery
Резюме

Глава 30. Расширения баз данных VCL
Использование BDE
Модуль BDE
Функция Check()
Курсоры и дескрипторы
Синхронизация курсоров
Таблицы dBASE
Физический номер записи
Просмотр удаленных записей
Проверка записи на удаленность
Восстановление ранее удаленной записи
Упаковка таблицы
Таблицы Paradox
Порядковый номер
Упаковка таблицы
Ограничение результирующих наборов данных компонента TQuery
Прочие полезные функции BDE
Обобщающие функции SQL
Быстрое копирование таблицы
Пользователи сеанса Paradox
Создание элементов управления VCL для работы с данными
Расширение возможностей компонента TDataSet
Давным-давно...
...и теперь
Создание потомка компонента TDataSet
Абстрактные методы компонента TDataSet
Методы буферизации записи \'
Методы работы с закладками
Навигационные методы
Методы редактирования
Прочие методы
Необязательные методы работы с номером записи
Резюме

Глава 31. Компоненты WebBroker открывают двери в Internet
Расширения Web-серверов: ISAPI, NSAPI и CGI
Интерфейс CGI
Интерфейсы ISAPI и NSAPI
Создание Web-приложений с помощью Delphi
Классы TWebModule и TWebDispatcher
Классы TWebRequest и TWebResponse
Создание динамических HTML-страниц
Компонент TPageProducer
Классы TDataSetTableProducer и TQueryTableProducer
Поддержка информации о пользователях с помощью cookies
Перенаправление на другой Web-узел
Считывание информации из HTML-форм
Формирование потоков данных
Резюме

Глава 32. Разработка приложений MIDAS
Механизм построения многоуровневого приложения
Преимущества многоуровневой архитектуры
Централизованная поддержка бизнес-логики
Архитектура "тонкого" клиента
Автоматическое согласование ошибок доступа
Модель "портфеля"
Отказоустойчивость
Балансировка загрузки
Классические ошибки
Типичная архитектура приложения MIDAS
Сервер
Способы создания экземпляров
Выбор модели потоков
Выбор способа доступа к данным
Публикация служб
Клиент
Выбор соединения
Соединение компонентов
Использование технологии MIDAS для создания приложений
Установка сервера
Удаленный модуль данных (RDM)
Провайдеры
Регистрация сервера
Создание клиента
Извлечение данных
Редактирование данных в клиентском приложении
Отмена внесенных изменений
Возврат к исходной версии
Транзакции клиента: свойство SavePoint
Согласование данных
Использование стандартного диалогового окна согласования ошибок
Дополнительные параметры, используемые для повышения
устойчивости приложения
Методы оптимизации клиентской части приложения
Ограничение размеров пакета данных
Использование модели "портфеля"
Передача на сервер динамических SQL-команд
Методы оптимизации серверного приложения
Согласование разногласий записей
Прочие параметры сервера
Поддержка связи "главная-детальная"
Вложенные наборы данных
Примеры из реальной жизни
Объединения
Обновление одной таблицы
Обновление нескольких таблиц
Приложения MIDAS и Web
Простой HTML
Компоненты InternetExpress
Дополнительные возможности наборов данных клиента
Вложенные наборы данных
Связь "главная-детальная" в клиентской части приложения
Двухуровневые приложения
Установка MIDAS-приложений
Предоставление лицензии
Настройка DCOM
Файлы, необходимые для установки приложения
Соглашения по установке приложений в Internet
Резюме


Часть V. Быстрая разработка приложений баз данных


Глава 33. Inventory Manager: пример разработки приложения
с архитектурой клиент/сервер
Проектирование внутреннего интерфейса
Определение доменов
Определение таблиц
Таблица CUSTOMER
Таблица PART
Таблица SALES
Таблица ITEMS
Определение генераторов
Определение триггеров
Определение хранимых процедур
Предоставление прав доступа
Централизованный доступ к базе данных: реализация бизнес-правил
Методы Login/Logout
Методы работы с таблицей CUSTOMER
Методы работы с таблицей PART
Методы работы с таблицей SALES
Методы работы с временной таблицей
Оповещение пользователей класса TDataModule о событиях, связанных
с компонентами доступа к данным
Создание пользовательского интерфейса
Класс TMainForm - главная форма приложения
Форма TCustomerForm - ввод данных о покупателе
Форма TPartsForm - ввод данных о содержимом склада
Форма TSalesForm - просмотр данных о продажах
Форма TNewSalesForm - ввод данных о продажах
Диалоговое окно поиска данных о покупателях
Резюме

Глава 34. Диспетчер клиента: разработка приложения
по технологии MIDAS
Проектирование приложения сервера
Проектирование клиентского приложения
Модуль данных клиента
Начальное формирование соединения
Согласование разногласий
Установка и определение режима работы клиента
Сохранение режима работы клиента
Фильтрация записей
Главная форма клиентского приложения
Резюме

Глава 35. Разработка настольного приложения: сбор сведений
об ошибках
Общие требования к приложению
Возможность размещения в World Wide Web
Ввод данных о пользователе и регистрация
Обработка, просмотр и фильтрация записей об ошибках
Способы работы с записями об ошибках
Другие функции пользовательского интерфейса
Модель данных
Разработка модуля данных
Инициализация приложения и регистрация
Генерирование ключей для таблиц Paradox
Процедуры работы с данными об ошибках
Просмотр и фильтрация ошибок
Добавление пользователей
Добавление сведений о действиях (примечаний)
Разработка интерфейса пользователя
Главная форма
Другие функции пользовательского интерфейса
Подготовка приложения к работе в Web
Резюме

Глава 36. Приложение с использованием компонентов WebBroker:
сбор сведений об ошибках
Макеты страниц приложения
Внесение изменений в модуль данных
Настройка компонента TDataSetTableProducer: объект dstpBugs
Настройка компонента TWebDispatcher; объект wbdpBugs
Настройка компонента TPageProducer: объект pprdBugs
Кодирование функций ISAPI-сервера: добавление экземпляров объекта
TActionItem
Вспомогательные процедуры
Вводная страница
Получение и проверка регистрационного имени пользователя
Просмотр сведений об ошибках
Просмотр всех ошибок
Просмотр данных об ошибках, внесенных конкретным пользователем
Форматирование ячеек таблицы и отображение подробной информации
об ошибках
Добавление сведений о новой ошибке
Ввод сведений о новой ошибке
Верификация введенной информации об ошибке
Резюме


Часть VI. Приложения

Приложение А. Сообщения об ошибках и исключения
Уровни обработки
Ошибки времени выполнения
Исключения
Системные ошибки программного интерфейса Win32

Приложение Б. Коды ошибок Borland Database Engine
Коды ошибок Borland Database Engine
Приложение В. Рекомендуемая литература
Программирование на Delphi
Разработка компонентов
Программирование в Windows
Объектно-ориентированное программирование
Проектирование программного обеспечения и разработка
пользовательского интерфейса
COM/ActiveX/OLE
Приложение Г. Описание содержимого прилагаемого компакт-диска
Что содержится на прилагаемом компакт-диске
Инструкции по установке программ
Описание продуктов от независимых поставщиков
1stClass
Abbrevia (пробная версия)
Adobe Acrobat Reader 4.0
Advantage Database Server 5.5 для NT или NetWare
Async Professional (пробная версия)
Communicator 4.7
Dalis-SQL 1.5
EarthLink TotalAccess 2.3.2
Essentials (пробная версия)
Hawk Eye 4.0 (пробная версия)
InfoPower 2000
Internet Explorer 5.0
IntraBobv3.01
OnGuard (пробная версия)
Orpheus (пробная версия)
PowerTCP Internet Toolkit Evaluation
ReportBuilder Pro 4.21 (пробная версия)
Rubicon 2.07 (пробная версия)
Пробная версия StarTeam Workstation
SysTools (пробная версия)
WinZip7.0(SR-1)
Предметный указатель
Оглавление
Содержание