| Оглавление | Глава 1. Проектирование приложений | 1 |
| Занятие 1. Использование Microsoft Solutions Framework | |
| Microsoft Solutions Framework: обзор | 2 |
| Microsoft Solutions Framework: модели | 2 |
| Solutions Design Model | 3 |
| Solutions Design Model: этапы проектирования | 4 |
| Цели концептуального проектирования | 4 |
| Цели логического дизайна | 5 |
| Цели физического дизайна | 5 |
| Ваша роль как разработчика | 5 |
| Задачи на этапе создания логического дизайна | 6 |
| Процесс формирования логического дизайна | 6 |
| Резюме занятия | 7 |
| Занятие 2. Проектирование системной архитектуры | |
| Введение в структуру приложений | 9 |
| Одноуровневые приложения | 10 |
| Двухуровневые приложения | 10 |
| Многоуровневые приложения | 10 |
| Разработка многоуровневой системы | 11 |
| Резюме занятия | 12 |
| Занятие 3. Использование Visual SourceSafe | 13 |
| Visual SourceSafe: обзор | 13 |
| Упражнение: добавление Visual SourceSafe в Visual Basic | 14 |
| Visual SourceSafe: компоненты | 14 |
| Управление файлами | 14 |
| Команда Check Out | 14 |
| Команда Check In | 15 |
| Команда Undo Check Out | 15 |
| Команда Get Latest Version | 15 |
| Повторное использование файлов | 15 |
| Разделение | 15 |
| Ветвление | 16 |
| Слияние | 16 |
| Использование средств администрирования | 17 |
| Открытие баз данных Visual SourceSafe | 17 |
| Архивирование проектов | 17 |
| Резюме занятия | 18 |
| Резюме главы | 19 |
| Упражнение: использование Microsoft Solutions Framework | 20 |
| Microsoft Solutions Framework | 20 |
| Система бронирования номеров в отеле Chateau St. Mark | 20 |
| Использование для упражнений файлов с прилагаемого компакт-диска | 21 |
| Предварительный просмотр решения для отели Chateau St. Mark | 21 |
| Закрепление материала | 22 |
| Глава 2. Создание пользовательского интерфейса | 23 |
| Занятие 1. Принципы разработки пользовательского интерфейса | 24 |
| Композиция | 24 |
| Простота | 24 |
| Разметка элементов | 25 |
| Единообразие | 26 |
| Узнаваемость | 27 |
| Легкость восприятия | 27 |
| Цвет | 27 |
| Изображения и значки | 28 |
| Шрифты | 28 |
| Меню | 28 |
| Резюме занятия | 29 |
| Занятие 2. Управление формами | 30 |
| Добавление формы в проект | 30 |
| Установка стартовой формы | 30 |
| Использование событий формы | 31 |
| Initialize | 31 |
| Load | 32 |
| Activate/Deactivate | 32 |
| QueryUnload | 33 |
| Unload | 33 |
| Terminate | 33 |
| Применение методов формы | 34 |
| Load | 34 |
| Unload | 34 |
| Hide | 34 |
| Show | 35 |
| Использование набора Forms | 35 |
| Резюме занятия | 37 |
| Занятие 3. Использование элементов управления | 38 |
| Работа с элементами управления | 38 |
| Добавление нестандартных элементов управления | 38 |
| Удаление элементов управления | 40 |
| Настройка свойств элементов управления | 40 |
| Использование массивов элементов управления | 41 |
| Создание массивов элементов управления на этапе разработки | 42 |
| Создание элементов управления в период выполнения | 43 |
| Упражнение: использование массивов элементов управления | 44 |
| Использование наборов элементов управления | 47 |
| Упражнение: применение метода Add к набору Controls | 47 |
| Улучшение пользовательского интерфейса | 49 |
| ImageList | 49 |
| TreeView | 50 |
| ListView | 52 |
| ТооBаr | 53 |
| StatusBar | 54 |
| Резюме занятия | 55 |
| Занятие 4. Использование меню | 56 |
| Создание меню на этапе разработки | 56 |
| Использование Menu Editor | 56 |
| Разделение элементов меню | 58 |
| Клавиши доступа и «быстрые» клавиши | 58 |
| Создание контекстных меню | 59 |
| Модификация меню и период выполнения | 60 |
| Включение и отключение команд меню | 60 |
| Отображение галочки рядом с командой меню | 60 |
| Скрытие элементов меню | 61 |
| Использование массива элементов управления меню | 61 |
| Добавление элементов меню в период выполнения | 61 |
| Резюме занятия | 62 |
| Резюме главы | 63 |
| Упражнение: создание пользовательского интерфейса приложения Chateau St. Mark | 64 |
| Создание пользовательского интерфейса | 64 |
| Добавление на форму нестандартных элементов управления | 66 |
| Добавление строки меню | 68 |
| Закрепление материала | 70 |
| Глава 3. Проверка и обработка пользовательского ввода | 71 |
| Занятие 1. Контроль ввода | 72 |
| Важность контроля пользовательского ввода | 72 |
| Виды контроля данных | 72 |
| Обратная связь с пользователем | 73 |
| Применение метода SetFocus | 73 |
| Использование события LostFocus | 74 |
| Резюме занятия | 75 |
| Занятие 2. Реализация проверки данных на уровне формы | 76 |
| Общие сведения о проверке данных на уровне формы | 76 |
| Обработчик клавиатуры на уровне формы | 76 |
| Использование события KeyPress | 77 |
| Использование событий KeyDown и KeyUp | 77 |
| Использование свойства KeyPreview | 77 |
| Включение и отключение элементов управления в зависимости от введенных данных | 78 |
| Упражнение: включение и отключение элементов управления | 79 |
| Резюме занятия | 80 |
| Занятие З. Реализация проверки данных на уровне полей | 81 |
| Использование свойств элемента TextBox | 81 |
| Свойство MaxLength | 81 |
| Свойство PasswordChar | 81 |
| Свойство Locked | 82 |
| Использование событий для контроля на уровне полей | 82 |
| Проверка и форматирование символов | 82 |
| Проверка данных с использованием события Change | 83 |
| Функции проверки данных | 84 |
| Использование элемента управления MaskEdBox | 84 |
| Свойство Mask | 85 |
| Свойство Format | 85 |
| Свойство Text и CLipText | 86 |
| Свойство AutoTab | 86 |
| Событие Validate | 86 |
| Использование события Validate | 86 |
| Установка свойства Causes Validation | 87 |
| Упражнение: использование события Validate в сочетании со свойством Causes Validation | 87 |
| Резюме занятия | 89 |
| Резюме главы | 90 |
| Упражнение: контроль данных на уровне формы и полей | 91 |
| Контроль навигации пользователя | 91 |
| Контроль данных на уровне полей | 93 |
| Использование событий Validate и LostFocus | 94 |
| Контроль данных на уровне формы | 94 |
| Закрепление материала | 96 |
| Глава 4. Средства отладки | 97 |
| Занятие 1. Отладка приложения | 98 |
| Типы ошибок | 98 |
| Синтаксические ошибки | 98 |
| Ошибки периода выполнения | 99 |
| Логические ошибки | 99 |
| Меню и панель инструментов Debug | 99 |
| Использование режима прерывания | 100 |
| Функция Step Into | 101 |
| Функция Step Over | 102 |
| Функция Step Out | 102 |
| Функция Run to Cursor | 102 |
| Команда Set Next Statement | 102 |
| Команда Show Next Statement | 103 |
| Резюме занятия | 103 |
| Занятие 2. Тестирование приложения | 104 |
| Окно Immediate | 104 |
| Оценка переменных и выражений | 104 |
| Изменение значений переменных | 106 |
| Комбинации клавиш, используемые в окне Immediate | 106 |
| Объект Debug | 106 |
| Debug Print | 106 |
| Debug Assert | 107 |
| Окно Locals | 107 |
| Кнопка Call Stack | 108 |
| Колонка Expression | 108 |
| Колонка Value | 108 |
| Колонка Type | 108 |
| Задание контрольных выражений | 108 |
| Добавление контрольного выражения | 109 |
| Изменение или удаление контрольного выражения | 110 |
| Выбор вида наблюдения | 110 |
| Диалоговое окно Quick Watch | 110 |
| Диалоговое окно Call Stack | 110 |
| Трассировка вложенных процедур | 111 |
| Резюме занятия | 111 |
| Резюме главы | 112 |
| Упражнение: отладка приложения | 112 |
| Закрепление материала | 116 |
| Глава 5. Обработка ошибок | 117 |
| Занятие 1. Создание обработчика ошибок | 118 |
| Как Visual Basic обрабатывает ошибки периода выполнения | 118 |
| Реализация локального обработчика ошибок | 118 |
| Активизация обработчика ошибок | 118 |
| Обработки ошибок | 119 |
| Возобновление нормального выполнения программы | 119 |
| Упражнение: создание обработчика ошибок | 120 |
| Последовательность вызова обработчиков ошибок | 121 |
| Возобновление программы после выполнения обработчика ошибок из другой процедуры | 122 |
| Отключение обработчика ошибок | 122 |
| Возможности Visual Basic в перехвате ошибок | 123 |
| Резюме занятия | 124 |
| Занятие 2. Применение строчной обработки ошибок | 125 |
| Создание строчного обработчика ошибок | 125 |
| Очистка объекта Err | 125 |
| Отключение строчного обработчика ошибок | 126 |
| Резюме занятия | 126 |
| Занятие 3. Реализация централизованной обработки ошибок | 127 |
| Создание централизованного обработчика ошибок | 127 |
| Резюме занятия | 128 |
| Резюме главы | 129 |
| Упражнение: реализация обработки ошибок | 129 |
| Реализация процедурной обработки ошибок | 130 |
| Реализация строчной обработки ошибок | 131 |
| Закрепление материала | 132 |
| Глава 6. Введение в модули классов | 133 |
| Занятие 1. Введение в СОМ | 134 |
| Модель компонентных объектов | 134 |
| ООП и разработка приложений на базе компонентов | 135 |
| Visual Basic и СОМ | 135 |
| Модули классов | 136 |
| Создание СОМ-компонентов в Visual Basic | 136 |
| Резюме занятия | 137 |
| Занятие 2. Использование модулей классов | 138 |
| Добавление модуля класса в проект | 138 |
| Объявление объектных переменных | 138 |
| Ипользование внешних объектов | 139 |
| Универсальные объектные переменные | 139 |
| Создание объектов на основе компонентов | 139 |
| Оператор Set с ключеным словом New | 140 |
| Резюме занятия | 140 |
| Занятие З. Создание модулей классов | 141 |
| Создание процедур-свойств | 141 |
| Упражнение: разработка модуля класса | 141 |
| Создание методов | 142 |
| Использование класса СHouse | 143 |
| Создание событий | 143 |
| Определение собственных событий | 144 |
| Использование RaiseEvent | 144 |
| Обработка событий | 144 |
| Ограничения, связанные с ключевым словом WithEvents | 145 |
| Резюме занятия | 145 |
| Занятие 4. Надстройка Class Builder | 146 |
| Загрузка Class Builder | 146 |
| Создание нового класса | 146 |
| Создание интерфейса класса | 147 |
| Модели объектов | 147 |
| Взаимосвязи объектов | 148 |
| Резюме занятия | 148 |
| Резюме главы | 149 |
| Упражнение: создание модулей классов | 150 |
| Создание модуля классов с помощью Class Builder | 150 |
| Закрепление материала | 152 |
| Глава 7. Введение в ActiveX Data Objects (ADO) | 153 |
| Занятие 1. Доступ к данным в Visual Basic | 154 |
| Интерфейсы доступа к данным | 154 |
| ОАО | 154 |
| RDO | 155 |
| ADO | 155 |
| Концепции реляционных баз данных | 156 |
| Таблицы | 156 |
| Записи | 157 |
| Поля | 157 |
| Ключи | 157 |
| Резюме занятия | 158 |
| Занятие 2. Введение в OLE DB и АОО | 159 |
| Что такое OLE DB | 159 |
| Компоненты OLE DB | 159 |
| Потребители данных | 160 |
| Сервисные компоненты | 160 |
| Провайдеры данных | 160 |
| Взаимосвязь OLE DB и ADO | 161 |
| Резюме занятия | 161 |
| Занятие З. Язык SQL | 162 |
| Оператор Select | 162 |
| Блок WHERE IN | 163 |
| Блок Where Between | 163 |
| Оператор LIKE | 163 |
| Блок ORDER BY | 164 |
| Резюме занятия | 164 |
| Занятие 4. Элемент управления ADO Data | 165 |
| Использование ADO Data | 165 |
| Подключение к источнику данных | 166 |
| Настройка строки подключении | 167 |
| Настройка свойства RecordSource | 167 |
| Упражнение: подключение ADO Data к источнику данных | 169 |
| Связывание элементов управления | 170 |
| Настройка свойств DataSource и DataField | 170 |
| Упражнение: связывание элементов управления | 171 |
| Data Form Wizard | 171 |
| Резюме занятия | 173 |
| Занятие 5. Программирование элемента управления ADO Data | 174 |
| Создание объекта Recordset | 174 |
| Проверка текущей позиции в наборе записей | 174 |
| Изменение записей в Recordset | 174 |
| Добавление записей в Recordset | 175 |
| Удаление записей из Recordset | 175 |
| Поиск записей | 176 |
| Проверка результатов поиска | 176 |
| Формирование критериев с неполными значениями | 176 |
| Упражнение: поиск записей в Recordset | 177 |
| Резюме занятия | 178 |
| Резюме главы | 179 |
| Упражнение: использование ADO Data | 180 |
| Подключение ADO Data к источнику данных | 180 |
| Связывание элементов управления с ADO Data | 182 |
| Закрепление материала | 184 |
| Глава 8. Разработка программных решений с применением ADO | 185 |
| Занятие 1. Введение в модель объектов ADO | 186 |
| ADO объекты | 186 |
| Наборы объектов в ADO | 187 |
| Резюме занятия | 188 |
| Занятие 2. Подключение к источнику данных | 189 |
| Объект сonnection | 189 |
| Создание объекта Connection | 190 |
| Упражнение: программное подключение к базе данных | 191 |
| События объекта Connection | 192 |
| Включение событий ADO-объектов | 192 |
| Резюме занятия | 193 |
| Занятие 3. Выборка данных | 194 |
| Выборка записей с помощью объекта Recordset | 194 |
| Явное использование объекта Connection | 195 |
| Неявное использование объекта Connection | 195 |
| Доступ к записям в объекте Recordset | 196 |
| Выборка записей с помощью объекта Command | 196 |
| Упражнение: получение информации из базы данных | 198 |
| Резюме занятия | 199 |
| Занятие 4. Перемещение по записям | 200 |
| Определение типа курсора | 200 |
| Методы Reeesync и Reguery | 201 |
| Представление данных пользователю | 201 |
| Перемещение по набору записей | 201 |
| Дополнительные навигационные методы и свойства | 202 |
| Поиск в наборе записей | 203 |
| Применение свойства Filter | 203 |
| Резюме занятия | 204 |
| Занятие 5. Модификация данных | 205 |
| Блокировка набора записей | 205 |
| Редактирование данных | 205 |
| Отмена изменений | 206 |
| Добавление новой записи | 206 |
| Удаление записи | 206 |
| Резюме занятия | 207 |
| Занятие 6. Использование Data Environment | 208 |
| Создание соединения | 208 |
| Представление записей пользователю | 209 |
| Упражнение: отображение записей с помощью Data Environment | 210 |
| Резюме занятия | 211 |
| Резюме главы | 212 |
| Упражнение: использование ADO | 213 |
| Создание ADO-объектов | 213 |
| Написание ADO-кода | 214 |
| Закрепление материала | 217 |
| Глава 9. Подключение к СОМ-серверам | 219 |
| Занятие 1. Подключение к СОМ-компонентам | 220 |
| Основные сведения о СОМ-компонентах | 220 |
| Регистрация компонента | 220 |
| Утилита Regsvr 32 | 221 |
| Библиотеки типов | 222 |
| Установка ссылок | 222 |
| Резюме занятия | 223 |
| Занятие 2. Управление СОМ-компонентами | 224 |
| Автоматизация | 224 |
| Объявление объектных переменных | 225 |
| Создание экземпляра объекта | 225 |
| Использование функции GetObject | 226 |
| Использование функции CreateObject | 226 |
| Использование оператора Set с ключевым словом New | 227 |
| Упражнение: использование функциональности Microsoft Excel | 227 |
| Object Browser | 229 |
| Резюме занятия | 230 |
| Занятие 3. Вызов функций Win32 API | 231 |
| СОМ-компоненты и Win32 DLL-библиотеки | 231 |
| Использование Win32 API | 231 |
| Расширение функциональности приложений на основе Win32 API | 232 |
| Объявление DLL-функций | 232 |
| Вызов DLL-функций | 234 |
| Создание процедур обратного вызова | 234 |
| Оператор AddrcssOf | 234 |
| Упражнение: создание процедуры обратного вызова | 235 |
| Резюме занятия | 237 |
| Резюме главы | 238 |
| Упрожнение: подключение к СОМ-компонентам | 239 |
| Подключение к Microsoft Word | 239 |
| Подключение к Microsoft Excel | 241 |
| Закрепление материала | 243 |
| Глава 10. Создание СОМ-компонентов | 245 |
| Занятие 1. Принципы создания СОМ-компонентов | 246 |
| Разработка СОМ-компонентов | 246 |
| Внутренние и внешние компоненты | 246 |
| Внутренние компоненты | 247 |
| Внешние компоненты | 247 |
| Шаблоны проектов компонентов | 247 |
| Резюме занятия | 248 |
| Задание 2. Создание ActiveX-элементов | 249 |
| Что такое ActiveX-элемент? | 249 |
| Классы элементов управления | 250 |
| Файлы, связанные с UserControl | 250 |
| Упражнение: создание ActiveX-элемента | 251 |
| Реализация ActiveX-элемента | 252 |
| Создание свойства | 252 |
| Создание страниц свойств | 253 |
| Сохранение значений свойств | 253 |
| Получение значений свойств | 254 |
| Значения свойств по умолчанию | 254 |
| Инициализация значений свойств через событие InitProperties | 254 |
| Упражнение: тестирование ActiveX-элемента | 256 |
| Создание ActiveX-элемента — источника данных | 257 |
| Упражнение: создание элемента — источника данных | 258 |
| Резюме занятия | 260 |
| Задание 3. Создание ActiveX-компонентов кода | 261 |
| Что такое компоненты кода | 261 |
| Создание ActiveX-компонента кода | 261 |
| Упражнение: создание DLL-сервера ActiveX | 263 |
| Свойство Instancing | 264 |
| Зависимые объекты (PublicNotCreatable) | 265 |
| Объекты создаваемые извне | 265 |
| MultiUse и SingleUse | 265 |
| Тестирование и отладка | 266 |
| Создание текстового приложения | 266 |
| Перехват ошибок в компонентах | 267 |
| Использование Start With Full | 268 |
| Выгрузка внутреннего компонента | 268 |
| Проверка компонента в Object Browser | 268 |
| Резюме занятия | 269 |
| Занятие 4. Использование Visual Component Manager | 270 |
| Visual Component Manager: обзор | 270 |
| Секция Folders | 271 |
| Секция Contens | 271 |
| Секция Properties | 272 |
| Visual Component Manager: установки и запуск | 272 |
| Публикация компонeнтов | 272 |
| Поиск компонентов | 274 |
| Повторное использование компонентов | 275 |
| Резюме занятия | 275 |
| Резюме главы | 276 |
| Упражнение: создание класса — источника данных | 277 |
| Преобразование класса CReservation в источник данных | 277 |
| Связывание элементов управления с классом CReservation | 278 |
| Создание кнопок перемещения по набору записей | 279 |
| Реализация функциональности для бронирования номеров и регистрации гостей | 281 |
| Закрепление материала | 286 |
| Глава 11. Создание приложений для Интернета | 287 |
| Занятие 1. Создание DHTML-приложений | 289 |
| Интернет и HTML | 289 |
| Разработка Интернет-приложений на Visual Basic | 289 |
| Введение в разработку DHTML-приложений | 290 |
| Преимущества DHTML-приложений | 290 |
| Работа с DHTML Page Designer | 290 |
| Некоторые отличия DHMTL от HTML | 291 |
| Упражнение: создание DHTML-приложения | 292 |
| Резюме занятия | 295 |
| Занятие 2. Создание ActiveX-документов | 296 |
| Базовые сведения об ActiveX-документах | 296 |
| Преимущества ActiveX-документов | 297 |
| Объект UserDocument | 297 |
| События объекта UserDocument | 297 |
| Файлы, относящиеся к объекту UserDocument | 298 |
| Разработка ActiveX-документа | 298 |
| Преобразование существующего проекта Standard EXE | 299 |
| Упражнение: создание ActiveX-документа | 299 |
| Запуск и отладка проекта ActiveX-документа | 301 |
| Резюме занятия | 302 |
| Занятие 3. Создание приложений IIS с использованием Web-классов | 303 |
| Приложения IIS: обзор | 303 |
| Структура приложений IIS | 304 |
| Обработка клиентских запросов с помощью Web-класса | 305 |
| Обработка событий | 305 |
| Web-классы и ASP-файлы | 306 |
| Конструктор Web-класса | 306 |
| Написание кода для Web-класса | 308 |
| Отладка и развертывание приложения IIS | 308 |
| Интеграция Visual Basic и других средств Web-разработки | 309 |
| Использование Web-классов для создания распределенных приложений | 309 |
| Резюме занятия | 309 |
| Резюме главы | 310 |
| Упражнение: разработка ActiveX-документов | 311 |
| Преобразование форм в ActiveX-документы | 311 |
| Закрепление материала | 313 |
| Глава 12. Упаковка и распространение приложений | 315 |
| Занятие 1. Создание справочной системы | 316 |
| Свойства справочных файлов | 316 |
| Свойство HelpFile | 316 |
| Свойство HelpContextID | 317 |
| Режим What's This Help | 317 |
| Создание всплывающих подсказок | 318 |
| Резюме занятия | 319 |
| Занятие 2. Создание исполняемого файла | 320 |
| Параметры компилятора | 320 |
| Optimize for Fast Code | 321 |
| Optimize for Small Code | 321 |
| No Optimizations | 321 |
| Favvor Pentium Pro | 321 |
| Create Symbolic Debug Info | 322 |
| Assume No Aliasing | 322 |
| Remove Array Bounds Checks | 322 |
| Remove Integer-Overflow Checks | 323 |
| Remove Floating-Point Error Checks | 323 |
| Remove Safe Pe ntium FDIV Checks | 323 |
| Allow Unrounded Floating-Point Operations | 323 |
| Условная компиляция | 324 |
| Объявление констант условной компиляции | 324 |
| Резюме занятия | 325 |
| Занятие 3. Использование Package and Deployment Wizard | 326 |
| Установка персонального приложения | 326 |
| Package and Deployment Wizard | 326 |
| Размещение приложения в Web | 327 |
| Setup Toolkil | 328 |
| Отмена установки | 328 |
| Резюме занятия | 329 |
| Резюме главы | 330 |
| Упражнение: использование справочных файлов и Package and Deployment Wizard | 330 |
| Использование справочных файлов | 331 |
| Настройка параметров компиляции приложения | 332 |
| Использование Package and Deployment Wizard | 333 |
| Закрепление материала | 335 |
| Приложение Вопросы и ответы | 337 |
| Словарь терминов | 349 |
| Предметный указатель | 361 |