Автор: Хальворсон Микаэл  

Теги: программирование  

ISBN: 1-57231-809-0

Год: 2005

Текст
                    Этот файл был взят с сайта
http://all-ebooks.com
Данный файл представлен исключительно в
ознакомительных целях. После ознакомления с
содержанием данного файла Вам следует его
незамедлительно удалить. Сохраняя данный файл
вы несете ответственность в соответствии с
законодательством.
Любое коммерческое и иное использование кроме
предварительного ознакомления запрещено.
Публикация данного документа не преследует за
собой никакой коммерческой выгоды.
Эта книга способствует профессиональному росту
читателей и является рекламой бумажных изданий.
Все авторские права принадлежат их уважаемым владельцам.
Если Вы являетесь автором данной книги и её распространение
ущемляет Ваши авторские права или если Вы хотите
внести изменения в данный документ или опубликовать
новую книгу свяжитесь с нами по email.

Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом Популярная серия «Шаг за шагом» предназначена для тех, кто осваивает новые программные продукты на курсах или самостоятельно. Изучив данную книгу, вы пройдете основной курс программирования на Microsoft Visual Basic 6.0. Секрет, как стать профессиональным разработчиком программ на Visual Basic, состоит в том, чтобы писать программы, требующие от вас применения самых разнообразных возможностей Visual Basic. Среди них: доскональное знание и способность на практике применять стандартные средства управления панели инструментов и компоненты ActiveX; умение правильно устанавливать и манипулировать свойствами, функциями и событиями объекта; способность писать ясный и четкий программный код с возможностью повторного использования некоторых сегментов программы в дальнейшем; умение создавать наглядный и эффективный интерфейс пользователя. В каждом из уроков данного курса внимание читателя акцентируется именно на этих принципах программирования. Вы обнаружите, что сможете немедленно применить полученные вами навыки и знания, изучив содержащихся в этой книге примеры, при создании более сложных приложений на Visual Basic для выполнения реальных практических задач. К книге прилагается компакт-диск со всеми примерами из уроков этой книги. Оглавление С чего начать С чего начать изучение Новые возможности Visual Basic 6.0 для профессионалов Исправления, комментарии, справки Установка и удаление учебных файлов Как установить учебные файлы на ваш компьютер Использование учебных файлов Деинсталляция файлов упражнений Условные обозначения Другие особенности этой книги Часть 1. Знакомство с Visual Basic Урок 1. Запуск программы на Visual Basic Среда программирования Visual Basic Запуск Visual Basic. Как открыть и выполнить 15 программный проект с 15 помощью строки меню 17 Изменение размеров и 34 расположения инструментов 17 программирования Форма интерфейса пользователя 35 18 Панель инструментов 36 программирования 18 Окно Properties (Свойства). 36 Изменение свойств 37 19 Размышления о свойствах 38 25 Окно Project (проект). 39 Просмотр окна проекта 39 25 Справочная система Visual Basic 40 26 Получение справки по 41 27 конкретному вопросу Шаг вперед: выход из Visual Basic. 42 29 Урок 2. Ваша первая программа 45 Счастливая семерка: ваша первая 46 30 программа на Visual Basic Последовательность 46 30 программирования 32 Разработка пользовательского 48
интерфейса Создайте пользовательский 48 интерфейс Перемещение и изменение 51 размеров командной кнопки Создание новой командной 51 кнопки Как добавить числовые метки 51 Как создать окно рисунка 54 Установка свойств объекта 54 Установка свойств командных 55 кнопок Установка свойств числовых 56 меток Установка свойств метки- 59 описания Свойства окна рисунка 59 Установка свойств окна 60 рисунка. Составление программного кода 61 Представление свойств в 62 табличном виде Работа в окне кода 63 Программный код для кнопки 64 Вращать Взгляд на процедуру 67 Command 1 Click Сохранение программы. 68 Сохраните программу 68 Счастливая семерка Запуск программы 69 Построение выполняемого файла. 70 Создайте выполняемый файл 71 Шаг вперед: дополнение к 72 программе Урок 3. Работа со средствами 77 управления. Знакомство со средствами 78 управления: программа «Здравствуй, Мир!» Создание программы 78 «Здравствуй, Мир!» Запустите программу 82 «Здравствуй, Мир!» Использование объектов файловой 83 системы Программа Browser 84 Постройте программу Browser 84 Запустите программу Browser 88 Почему эта программа 89 «рухнула»? Объекты для ввода смешанной 90 информации Программа Online Shopper 91 Запуск программы Online 91 Shopper Просмотр программного кода 94 «Online Shopper» Коды контрольного блока и 95 окна списка Немного о терминологии 97 Использование OLE-объектов для 99 запуска приложений Создайте программу 101 Примерная оценка Запустите программу 105 Примерная оценка Использование объектов данных 106 для просмотра базы данных Microsoft Access Поля и записи 107 Создайте объект данных. 107 Создайте объекты «текстовый 108 блок» и «метка» Установите свойства объектов 109 Запустите программу Му Data 110 Модификация базы данных 111 Измените имя в базе данных 111 Шаг вперед: инсталляция средств 112 управления Active X Урок 4. Работа с меню и 117 диалоговыми окнами Добавление меню с помощью 118 редактора меню Создайте меню 118 Добавление быстрых клавиш к 121
командам меню Соглашения меню 121 Добавьте быстрые клавиши 122 Измените порядок пунктов 123 меню Обработка выборов меню. 124 Добавьте объект «Метка» в 125 форму Отредактируйте процедуры 126 событий меню Сохраните программу MyMenu 128 Запустите программу МуМепи 128 Функции системных часов 130 Использование объектов общих 130 диалогов Сохраните файлы MyMenu как 131 MyDialog Добавление объекта общего 132 диалога Добавьте управление общими 132 диалогами в панель инструментов Добавьте объект общего 134 диалога Добавьте графический объект. 134 Добавьте меню Файл 135 Запрещение команды меню 136 Запретите команду Закрыть 136 Добавьте команду «Цвет 137 Текста» в меню «Часы» Процедуры событий, 137 управляющие окнами общих диалогов Отредактируйте процедуру 138 события команды Открыть Отредактируйте процедуру 140 события команды ЦветТекста Управление выбором цвета с 140 помощью флагов. Отредактируйте процедуру 141 события команды Закрыть Отредактируйте процедуру 142 события команды Выход Запустите программу 142 MyDialog Добавление к программам 145 нестандартных диалоговых окон Шаг вперед: назначение 145 «быстрых» клавиш для меню Часть 2. Основы 149 пр огр аммир ования Урок 5. Переменные и 151 операторы Visual Basic Анатомия программных 152 операторов Visual Basic Использование переменных для 153 хранения информации Резервирование переменных с 153 указанием размера Объявление переменных без 154 указания размерности Использование переменных в 155 программе Как изменить значение 155 переменной Соглашения для присвоения 158 имен переменным Использование переменных для 158 хранения входных данных Ввод данных с помощью 159 функции InputBox Что такое функция? 161 Использование переменных для 161 вывода данных Отобразим сообщение с 162 помощью функции MsgBox Работа с различными типами 164 данных Использование основных 166 типов данных в тексте программы Типы данных, определяемые 169 пользователем Константы: переменные, 17U которые не изменяются
Использование константы в 170 процедуре Работа с основными 171 математическими операторами Visual Basic Основные математические 172 операторы: * и / Работа с основными 172 операторами Рассмотрим текст программы 174 Basic Operators Математические функции 176 Visual Basic Использование 177 дополнительных операторов: \, Mod, Л и & Работа с дополнительными 177 операциями Приоритеты операций 180 Шаг вперед: использование скобок 181 в формуле Урок 6. Использование структур 185 с условиями Управление программой по 186 прерываниям События, поддерживаемые 187 объектами Visual Basic Использование выражений с 188 условиями Структура с условием If... Then 189 Проверка нескольких условий 189 в структуре с условием If... Then Идентификация пользователя 191 с помощью структуры If... Then Использование логических 195 операторов в условных выражениях Добавление защиты с 196 помощью пароля при использовании операции And Структуры с условием Select Case 197 Использование операций 200 сравнения в структуре Select Case Поиск и исправление ошибок 204 Три вида ошибок 205 Использование режима 206 останова при выполнении программы с помощью команды Break Отладка программы If Bug 207 Шаг вперед: использование 213 оператора Stop для перехода в пошаговый режим. Урок 7. Использование циклов и 215 таймеров Программирование циклов 216 For...Next Отображение содержимого 217 счетчика с помощью команды Print Отображение информации с 217 помощью цикла For...Next Изменение свойства в цикле 220 For...Next Создание сложных циклов 222 For...Next. Открытие файлов с помощью 223 цикла For...Next Использование ключевого 227 слова Step в программе MyCtlArray Модификация программы 227 MyCtlArray Оператор Exit For 230 Программирование циклов Do 230 Как избежать бесконечных 231 циклов Преобразование значений 232 температуры с помощью цикла Do Использование ключевого 235 слова Until в циклах Do Использование объектов типа 235
«таймер» графики Создание цифровых часов с помощью таймера 236 Обработка ошибочных ситуаций с помощью обработчиков 267 Создадим программу 236 ошибок Цифровые часы Использование обработчиков 268 Шаг вперед: использование 239 ошибок объектов типа «таймер» для установки ограничений по времени Настройка реакции на ошибку с помощью оператора On Error 268 Часть 3. Создание интерфейса 245 Операторы Resume 269 пользователя Обработчик ошибок привода 269 Урок 8. Работа с формами, 247 гибких дисков принтерами и обработчиками ошибок Создание обработчика ошибки привода гибких дисков 270 Добавление новых форм в программу 248 Шаг вперед: дополнительные приемы в использовании 273 Бланки или шаблоны форм 248 обработчика ошибок Как использовать формы 248 Урок 9. Добавление 277 Операторы управления формами 249 художественного Как скрыть и выгрузить форму 250 оформления и специальных Как свернуть форму 251 эффектов Добавление в программу имеющихся форм 251 Добавление графических элементов с помощью 278 Работа с несколькими формами: программа Italian 252 средств Line (Отрезок) и Shape (Фигура) Запустим программу Italian 252 Средство управления Line 278 Создадим вторую форму для 253 (Отрезок) программы Средство управления Shape 279 Доступ ко второй форме в 256 (Фигура). процедуре Использование средств 280 Вывод выходных данных программы на принтер 259 управления Line (Отрезок) и Shape (Фигура) Формы MDI: окна с 259 Запустим программу StartFrm 283 иерархическими связями Использование команд 284 Добавим в программу Myltalian2 возможность 261 рисования для создания фигур вывода на принтер Создание командных кнопок с 285 Запустим программу MyPrinFrm 263 графическими условными обозначениями Как распечатать форму целиком с помощью команды PrintForm 264 Контроль события «щелчок мыши» 285 Использование команды PrintForm для печати текста и 265 Переключение состояния кнопки 286
Создадим кнопки панели 287 инструментов. Запустим программу и 293 проверим действие кнопок Добавление в вашу программу 294 поддержки операции «перетащить-и-оставить» «Перетащить-и-оставить» шаг 295 за шагом Программа DragDrop 296 Использование метода 297 «перетащить-и-оставить» для создания горящей бочки Запустим программу 300 MyDragDrop Изменение вида указателя 302 мыши Добавление в вашу программу 303 эффектов анимации Использование системы 304 координат формы. Перемещение объектов в 304 системе координат Создание эффектов анимации 305 с помощью команды Move и объекта типа таймер Добавим в программу 306 DragDrop облако дыма Создание движущегося облака 306 дыма Увеличение и уменьшение 310 размеров объектов в процессе выполнения программы Как увеличить размер рисунка 310 в ходе выполнения программы Шаг вперед: присвоение имен 313 объектам в программе Часть 4. Управление 321 корпоративными данными Урок 10. Использование 323 модулей и процедур Работа со стандартными модулями 324 Создание стандартного модуля 325 Создадим и сохраним 325 стандартный модуль Работа с глобальными 328 переменными Откорректируем проект 329 Счастливая семерка Добавим стандартный модуль 330 Создание процедур общего 334 назначения Преимущества процедур 335 общего назначения Создание процедур типа Function 335 (Функция) Синтаксис процедуры типа 336 Function (Функция). Вызов процедуры типа 337 Function (Функция) Использование функции для 337 выполнения вычисления Создадим функцию расчета 338 вашего рейтинга в игре Запустим программу MyRate. 341 Создание процедур типа Sub 342 (Подпрограмма) Синтаксис описания 342 процедуры типа Sub (Подпрограмма) Вызов процедуры типа Sub 344 (Подпрограмма) Использование процедуры 345 типа Sub (Подпрограмма) для управления входными данными Создадим текстовое поле с 345 помощью процедуры типа Sub (Подпрограмма). Запустим программу MyTeams 349 Шаг вперед: передача аргументов 351 по значению Урок 11. Работа с наборами 355 элементов и массивами. Работа с наборами объектов 355
Описание наборов 356 Ссылка на объекте наборе 356 Использование циклов For 357 Each...Next. Перемещение набора 358 объектов. Используем цикл For Each...Next для обработки набора Controls (Средства 358 управления) Использование свойства Tag 360 (Тег) в цикле For Each...Next Используем тег для 361 индивидуальной трактовки объекта в наборе Другие наборы Visual Basic 363 Набор Visual Basic для 363 приложений Работа с массивами переменных 365 Создание массива 365 Объявление массивов с 367 фиксированными границами Работа с элементами массива 368 Оператор Option Base 370 Создание массива с 370 фиксированными границами для хранения значений температуры Использование массива с 370 фиксированными границами Создание динамических 374 массивов Использование динамического 376 массива для хранения значений температур Шаг вперед: использование 378 многомерных массивов Урок 12. Работа с текстовыми 385 файлами и строками Отображение текстовых файлов с 386 помощью объекта типа «текстовое поле» Открытие текстового файла 386 для чтения Оператор Open 387 Запустим программу 388 просмотра текстового файла Изучим текст программы 390 ShowText Создание нового текстового файла 392 на диске Запустим программу QNote 393 (Быстрый блокнот) Изучим текст программы 396 Быстрый блокнот Программное управление 398 символьными строками Сортировка текста 398 Операторы и функции для 399 управления строками Что такое ASCII? 400 Сортировка строк в текстовом 401 поле Запуск программы SortDemo 403 Исследование программы 405 SortDemo Шифрование текста 406 Шифровка текста изменением 407 кодов ASCII Исследуем программу Encrypt. 408 Шаг вперед: использование 409 оператора Хог Урок 13. Управление базами 415 данных Access Работа с базами данных в Visual 416 Basic Создание собственных 416 приложений для работы с базами данных Использование средств с 417 контролем границ значений для отображения информации базы данных Использование объектов типа 418 текстовое поле для отображения данных
Запустим программу Courses 418 Automation (Автоматизация) Использование объекта Recordset 421 в Visual Basic Поиск данных в базе Students.mdb 421 Средство Object Browser 452 (Просмотр объектов) Visual Запустим программу 423 Basic. MyFindRec Использование средства Object 453 Добавление записей в базу данных Students.mdb 425 Browser (Просмотр объектов) для просмотра объектов Разрешим пользователю 425 Word добавлять записи в базу данных Автоматизация: обращенние к 456 Word из Visual Basic Запустим программу MyAddRec 427 Создадим собственную 457 функцию проверки Удаление записей из базы данных 429 орфографии Students-mdb Запустим программу 460 Разрешим пользователю 429 MyUseWord удалять записи из базы данных Автоматизация: обращение к 462 Excel из Visual Basic Запустим программу 431 Запустите программу Mortgage 463 MyDelRec Автоматизация: обращение к 464 Шаг вперед: создание архивной 432 Outlook из Visual Basic копии файла Запустите программу SendMail 465 Урок 14. Взаимодействие с Microsoft Office 437 Шаг вперед: автоматизация - 467 обращение к PowerPoint из Создание информационной 438 Visual Basic системы предприятия Часть 5. Возможности и средства 471 Использование информационных систем 438 профессиональной версии Visual Basic 6.0 предприятий Урок 15. Обработка текстов с 473 Использование средств управления OLE 439 помощью средства управления Rich Textbox Создание приложения MusicEIS 440 (Форматированный текстовый блок) Вставим объекты приложения 443 Инсталляция средств управления 474 Скопируем и вставим диаграмму объемов продаж 446 ActiveX для профессиональной версии Запустим Информационную систему предприятия (EIS) 449 Как добавить средства 480 управления ActiveX Программирование объектов приложений с помощью 451 профессиональной версии в панель инструментов средства Automation (Автоматизация) Знакомство со средством 480 управления Rich Textbox Использование средства 451 Добавим в панель инструментов 481
средство управления Rich Textbox Запустим программу RTFEdit 482 Воспользуемся командами из 483 меню Format (Формат) Воспользуемся командами 484 меню Edit (Правка) Воспользуемся командами из 485 меню File (Файл) Процедуры обработки событий, 486 связанных с RTF- форматированием Команда All Caps (Все 487 прописные) Команда Font. (Шрифт) 487 Команды Bold (Полужирный), 488 Italic (Курсив), Underline (Подчеркнутый) Редактирование текста с 489 использованием буфера обмена Windows Команды Cut (Вырезать), Сору 489 (Копировать), Paste (Вставить) Команда Find (Найти) 490 Управление операциями с 491 файлами с помощью средства управления Rich Textbox Команда Open (Открыть) 491 Команда Close (Закрыть) 492 Команда Save As (Сохранить 494 как) Команда Print (Печать) 494 Команда Exit (Выход) 494 Шаг вперед: отображение кодов 495 RTF в документе Урок 16. Индикация хода 499 выполнения операции и отображение параметров состояния Отображение хода выполнения 500 задачи с помощью средства управления Progress Ваг (Индикатор хода выполнения) Инсталляция средства 502 управления Progress Ваг (Индикатор хода выполнения) Как добавить средства 502 управления общего назначения Windows в вашу панель инструментов Программа Прогресс 503 Запустим программу Прогресс 504 Рассмотрим исходный текст 505 программы Прогресс Управление графическим вводом с 508 помощью средства управления Slider (Скользящая шкала) Запустим программу RTFEdit2 508 Рассмотрим исходный текст 510 программы для средства управления Slider (Скользящая шкала) Отображение в приложении 513 информации с помощью средства управления Status Ваг (Панель состояния) Запустим программу RTFEdit2 514 Рассмотрим значения свойств 515 панели состояния Рассмотрим исходный текст 518 программы управления панелью состояния Шаг вперед: отображение статусов 520 Caps Eock и Num Lock состояния клавиатуры: Урок 17. Использование 523 музыкальных эффектов и видеоклипов с помощью средства управления Multimedia MCI Воспроизведение аудиоклипов из 524 файлов .wav
Свойство DeviceType 525 Свойство Command. 526 Программа PlayTune 527 Запустим программу PlayTune 527 Рассмотрим исходный текст 528 программы, воспроизводящей файлы .WAV Воспроизведение видеоклипов из 531 файлов .AVI Программа Run Video 531 Запустим программу RunVideo 532 Рассмотрим программный код 534 для воспроизведения файлов .AVI Шаг вперед - воспроизведение 536 музыки с аудио-CD Урок 18. Использование средств 541 Windows API Знакомство с функциями Windows 542 API средства Функция GlobalMemoryStatus 542 Использование утилиты API 547 Viewer Инсталляция утилиты API 547 Viewer Воспользуемся утилитой API 548 Viewer для вставки объявлений Управление использованием 552 памяти на вашем компьютере Запустим программу FreeMem 553 Рассмотрим исходный текст 555 программы FreeMem Шаг вперед: завершение программ 558 с помощью оператора Unload Часть 6. Основы 561 программирования приложений для работы с Internet Урок 19. Пересылка файлов с 563 помощью средства Internet Т ransfer Загрузка документов HTML из 564 сети World Wide Web Запустим программу GetHTML 566 Отобразим документ HTML с 569 помощью Internet Explorer Рассмотрим исходный текст 571 программы GetHTML Передача файлов в соответствии с 573 протоколом FTP Запустим программу FTP 574 Рассмотрим исходный текст 577 программы FTP Шаг вперед: контроль ошибок в 580 ходе Internet-транзакций Урок 20. Отображение 583 документов HTML с помощью Internet Explorer Основы работы с объектом Internet 584 Explorer Добавление ссылки Microsoft 585 Internet Controls в ваше приложение Как включить объект Internet 585 Explorer в ваш проект Исследование объектной 586 модели Internet Explorer Как использовать средство 587 просмотра объектов Object Browser Отображение документов HTML 589 Запустим программу 590 ShowHTML Рассмотрим исходный текст 594 программы ShowHTML, обеспечивающий работу Internet Explorer Шаг вперед: реакция на события 596 Internet Explorer Урок 21. Создание страниц с 601 динамическими гипертекстовыми связями Dynamic HTML Основные принципы языка 602
динамического построения гипертекста Dynamic HTML Новый принцип программирования Разработка DHTML-программ Знакомство с конструктором страниц DHTML Page Designer Откроем новое DHTML- приложение Добавление текста в HTML- страницу Форматирование текста в конструкторе страниц Page Designer Создание SPAN-тегов для разделения отдельных символов Назначение ID-атрибутов в окне Properties (Свойства) Создание связи с другой HTML-страницей Сохраним проект WebLucky. Запустим DHTML- приложение. Шаг вперед: создание документов HTML Microsoft Word Урок 22. Добавление элементов и средств управленияАсШ еХ на DHTML-страницы Знакомство с элементами панели инструментов DHTML Описание панели инструментов DHTML Button (Кнопка) SubmitButton (Кнопка передачи) PtesetButton (Кнопка сброса) TextField (Текстовое поле) TextArea (Текстовая область) PasswordField (Поле с паролем) 603 604 605 606 609 610 614 616 618 620 620 623 629 630 631 631 632 632 632 632 633 Option (Опция) 633 Checkbox (Поле с флажком) 634 Select (Выбор) 634 Image (Изображение) 634 Hyperlink (Гиперсвязь) 635 HorizontalRule 635 (Горизонтальная линейка) FileUpload (Пересылка файла в 635 сеть) HiddenField (Скрытое поле). 636 Inputimage (Ввод изображения) 636 List (Список) 636 Создание элементов и установка 637 их характеристик Добавление элементов в 638 приложение WebLucky Переименуем файлы в вашем 638 DHTML-приложении Как удалить элемент со 639 страницы Добавим на страницу элемент 640 Image (Изображение) Добавим на страницу элемент 642 Button (Кнопка) Добавление на DHTML-страницу 644 средств управления ActiveX Добавим средство управления 645 ActiveX в панель инструментов Создание на странице средства 646 управления Multimedia MCI Создание процедур обработки 647 событий для элементов DHTML Создадим процедуру 648 обработки события DHTMLPageLoad Рассмотрим исходный текст 649 процедуры обработки события DHTMLPage Load. Создадим процедуру 650 обработки события Buttonl onclick
Рассмотрим исходный текст 651 процедуры обработки события Buttoni onclick Запустим приложение 652 MyDHTML7 Шаг вперед: компилирование 655 D НТМ L- пр и ложе ния Часть 7. Дополнительные 661 возможности программирования операций с базами данных Урок 23. Управление данными с 663 помощью средства FlexGrid (Т абличная сетка) Использование средства 664 управления FlexGrid (Табличная сетка) для выполнения типичных операций обработки электронных таблиц Понятие столбцов и строк 665 Вставка графики в ячейки 666 Выделение ячеек 667 Форматирование ячеек 668 Добавление новых ячеек 669 Использование средства 670 управления FlexGrid (Табличная сетка) для представления данных по продажам Напишем программу для 672 объекта FlexGrid (Табличная сетка) Запустим программу 673 MySaleGrid Использование средства 674 управления FlexGrid (Табличная сетка) для отображения записей базы данных. Запустим программу Просмотр 675 данных Расширенные операции 679 сортировки и поиска Изучим исходный код 679 программы DataGrid (Таблица данных) Установка свойств объектов в 682 программе DataGrid (Таблица данных) Шаг вперед: операция поиска в 682 базе данных Biblio.mdb Урок 24. Исследование объектов 689 типа данные ActiveX (ADO) Знакомство с ADO 690 Три метода программирования 690 баз данных Использование средства 691 управления ADO ActiveX Установка средства 692 управления ADO Создание объекта ADO и 693 средств контроля границ Создание имени источника 694 данных Установим значение свойства 695 Connectionstring Поместим данные ADO в 699 объекты типа текстовое поле Запустим программу, 701 демонстрирующую работу средства управления ADO Написание программного кода для 702 ADO Создадим программу 703 MyAdoData Запустим программу AdoData 707 Создание объектов данных 709 ActiveX с помощью конструктора окружения данных Data Environment Designer. Создадим окружение данных 710 пользователя Обращение к командам ADO 713 из вашего приложения
Шаг вперед: дополнительные 713 ресурсы для программирования на Visual Basic
С чего начать Microsoft Visual Basic 6 Professional Edition - это мощная си- стема программирования, позволяющая быстро и эффектив- но создавать приложения для Microsoft Windows и Microsoft Windows NT. Я построил курс таким образом, чтобы нови- чок в программировании мог изучить основы программиро- вания в реальной среде приложений, а опытный програм- мист потренировался в создании необходимых служебных программ и в программировании процедур для Visual Basic 6. Материал этого курса может использоваться как для учеб- ной, так и для профессиональной и коммерческой версий Visual Basic. Важно! Microsoft Visual Basic 6.0 не поставляется с этой книгой - вы должны приобрести его отдельно и установить, преж- де чем приступать к изучению уроков. Для того чтобы уточнить, какой именно программный продукт вы ис- пользуете, прочтите информацию на упаковке или за- пустите программу и в меню Help? (Справка) щелкните на строке 0 программе (About Microsoft Visual Basic). С чего начать изучение Книга разрабатывалась с учетом интересов всех категорий читателей: как тех, кто впервые приступает к изучению про- граммирования, так и тех, кто переходит на Microsoft Visual Basic с других языков программирования или хочет позна-
16 Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом комиться с особенностями новой версии языка. Воспользуйтесь приводи- мой ниже таблицей, чтобы определить, с чего вам лучше начать изучение материала этой книги, исходя из уровня вашей подготовки. Если вы... Порядок действий Новичок в програм- мировании 1. Установите учебные файлы, следуя инструкци- ям раздела «Установка и удаление учебных фай- лов». 2. Последовательно проработайте материал уро- ков с 1 по 14. 3. Проработайте уроки из частей 5, 6 и 7 по жела- нию, как диктует вам ваш опыт и уровень знаний. Переходите от Microsoft С или других базовых языков программи- рования 1. Установите учебные файлы, следуя инструкци- ям раздела «Установка и удаление учебных фай- лов». 2. Изучите урок 1 и 2, просмотрите уроки 3~9, за- тем проработайте уроки в частях 4 и 5. 3. Обратитесь к частям 5 и 7 за информацией о про- граммировании операций с Internet и с базами дан- ных. Переходите от Microsoft Visual Basic 5 1. Установите учебные файлы, следуя инструкци- ям раздела «Установка и удаление учебных фай- лов». 2. Просмотрите уроки 1 — 13, чтобы повторить ма- териал о программировании событий, затем про- работайте уроки 13-24. 3. Обратитесь к урокам 21 и 22, чтобы получить ин- формацию о создании страниц с динамическими ги- перссылками Dynamic HTML. Чтобы узнать об объек- тах типа данные ActiveX (ADO), читайте урок 24. Используете книгу как справочник 1. Воспользуйтесь алфавитным указателем, под- робным оглавлением или кратким содержанием, чтобы найти нужную информацию. 2. В конце каждого урока приводится его краткое содержание, причем темы перечислены в порядке их изучения. Воспользуйтесь этой информацией.
С чего начать 17 Новые возможности Visual Basic 6.0 для профессионалов В приведенной ниже таблице перечислены новые возможности Visual Basic 6.0, о которых пойдет речь в этой книге, и номера соответствующих уроков. При необходимости воспользуйтесь алфавитным указателем. Тема Урок Использование новой оперативной справочной системы 1 Microsoft Developer Network (MSDN). Быстрый запуск проекта с одной или более предопределенной 8 формой. Использование наборов Visual Basic для приложений. 11 Работа со строками и шифровка текста. 12 Использование средства Automation (Автоматизация) для вза- 14 имодействия с Microsoft Word, Microsoft Excel, Microsoft Outlook и Microsoft PowerPoint. Использование средства управления Multimedia MCI для работы 17 с мультимедиа. Использование новых функций Windows API. 18 Использование Microsoft Internet Explorer для отображения 20 документов HTML. Создание страниц с динамическими гипертекстовыми связя- 21 ми Dynamic HTML. Использование элементов на панели инструментов DHTML и 22 средств управления ActiveX. Использование средства управления ADO ActiveX. 24 Создание командных объектов ADO с помощью Data 24 Environment Designer. Исправления, комментарии, справки Издатели (как оригинала, так и перевода на русский язык) предприняли максимум усилий для устранения ошибок как в самой книге, так и на диске с файлами упражнений. О последних исправлениях и дополнениях в кни- гах Microsoft Press вы можете узнать по адресу:
18 Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом http://mspress.microsoft.com/support/support.htm Адрес Web-узла Microsoft Press: http://mspress.microsoft.com/ Ваши замечания и предложения вы можете направлять по адресу: Microsoft Press Attn: Step by Step series editor One Microsoft Way Redmond, WA 98052-6399 или по электронной почте e-mail: mspinput@microsoft.com или в издательство ЭКОМ по адресу: Москва, ул. Бутлерова, д.17а, оф. 105 «Шаг за шагом» или по электронной почте e-mail: ecom@ecom.ru Обратите внимание, что поддержка самого программного продукта Visual Basic по указанным адресам не предоставляется. Если у вас возникли проблемы с использованием Visual Basic, вы можете позвонить в AnswerPoint Microsoft Visual Basic по номеру 1-206-646-5105 в будни от 6 утра до 6 вечера по мировому времени. Установка и удаление учебных файлов Диск, прилагаемый к книге, содержит файлы с учебным материалом для уроков. Вам не придется тратить время на создание примеров, использу- емых в уроках. Например, на диске находится учебная база данных уни- верситета. Соответствующий файл называется students.mdb. При изуче- нии подсоединения баз данных к Visual Basic мы ориентировались на работу именно с этой базой. Как установить учебные файлы на ваш компьютер Для инсталляции учебных файлов на жесткий диск вашего компьютера выполните следующие шаги. 1. Достаньте диск из конверта и вставьте его в ваше устройство чтения CD-ROM.
С чего начать 19 2. На панели задач в нижней части экрана щелкните на кнопке Пуск (Start), после чего щелкните на строке Выполнить (Run). Появится диалоговое окно Запуск программы (Run). 3. В поле ввода Открыть (Open) наберите d:setup. Не добавляйте пробелы при наборе. Если у вашего устройства чтения CD-ROM другое имя, например е, введите эту букву вместо d. 4. Щелкните на ОК и далее следуйте указаниям на экране. Мы советуем вам не изменять без необходимости опции, установ- ленные в окне программы установки. Например, если вы изме- ните место установки учебных файлов, то будете вынуждены вручную вводить пути в нескольких последующих упражне- ниях. 5. После завершения инсталляции выньте диск из дисковода. На вашем жестком диске будет создана папка с названием \Vb6Sbs, в которой содержатся все учебные файлы. Примечание. В дополнение к инсталляции файлов программа Setup создает ярлык Web-страницы Microsoft Press на рабочем столе вашего компьютера. Если ваш компьютер подсоединен к Internet, для входа на Web-стра- ницу достаточно дважды щелкнуть по этому ярлыку. Использование учебных файлов Каждый урок рассчитан на работу с определенными учебными файлами. Инструкции о том, как открыть конкретный файл, содержатся в соответ- ствующем месте каждого урока. Уроки построены вокруг сценариев, ими- тирующих реальные программные проекты. Ниже приводится перечень проектов, включенных в учебные файлы. Проект Описание Урок 1 StepUp Простейшая анимационная программа, приглашающая к кур- су программирования. Урок 2 Lucky Ваша первая программа - игровой автомат «Счастливая се- мерка».
20 Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом Проект Описание Урок 3 Hello Программа «Hello, World!», которая демонстрирует управле- ние командными кнопками и текстовыми блоками. Online Пользовательский интерфейс для программы «Электронный магазин» (Online Shopper), составленный с использованием различных средств управления вводом. Browser Программа просмотра bitmap-файлов, осуществляющая по- иск рисунков в этом формате на диске средствами управле- ния файловой системой. Data База данных, демонстрирующая некоторые способы управле- ния данными. OleBid Инструмент оценки, использующий OLE-контроль для запус- ка приложений в Microsoft Windows. Урок 4 Menu Показывает, как добавляются в форму меню и команды. Dialog Использует средство управления CommonDialog (Стандартный диалог) для изменения цвета текста в форме. Урок 5 VarTest Объявление и использование переменных для хранения ин- формации. MsgBox Вывод информации на экран с помощью функции MsgBox (Окно сообщения). InputBox Прием введенной информации с помощью функции InputBox (Окно ввода). Data Constant Демонстрация основных типов данных. Использование констант для хранения фиксированных мате- матических величин. BasicOp AdvOp Операторы сложения, вычитания, умножения и деления. Операторы деления нацело, вычисления остатка от деления нацело, возведения в степень, конкатенации (объединения) строк. Урок 6 Login Использование конструкции If...Then...Else для создания ветвей в программе. Pass Использование логического оператора And для проверки паро- ля пользователя.
С чего начать 21 Проект Описание Case Оператор выбора используется в программе для вывода на экран приглашения на соответствующем иностранном языке. IfBug Отладочные упражнения, в которых необходимо найти ло- гическую ошибку. Урок 7 ForLoop GrawFont CtrlArray Печать линий с использованием цикла For...Next. Изменение размера шрифта с использованием цикла. Открытие файлов с использованием цикла и управляюще- го массива. StepLoop Использование ключевого слова для вывода на экран пик- тограмм. Celeius DigClock TimePass Преобразование температур с помощью цикла DO. Цифровые часы. Установка задержки по времени при вводе пароля. Урок 8 Italian Итальянский словарь. Программа использует функцию MsgBox (Окно сообщений) для определений. Italian2 Итальянский словарь. Программа использует вторую фор- му определений. PrintFrm Образец кода, который посылает форматированный текст на присоединенный принтер. PrintWMF DriveErr Образец кода, печатающий Windows-метафайл. Программа, которая рушится при некорректном использо- вании дисковода (только для демонстрационных целей). FinalErr Программа обработки ошибок, которая надлежащим обра- зом реагирует на ошибки дисковода. Урок 9 Start Frm Запуск программы «экран вдребезги» для демонстрации управления линиями и формами. Buttons Программа, показывающая, как разрабатывать и исполь- зовать графические командные кнопки. DragDrop Программа, показывающая использование метода «перета- щить-и-вставить». Smoke Программа, использующая анимационную технику для со- здания и перемещения облаков дыма.
22 Microsoft Visual Basic 6.0 для профессионалов. Шаг за шагом Проект Описание Zoom Программа, имитирующая приближение к планете из кос- моса. NameConv Программа, демонстрирующая эффективное средство из- менения имен объектов. Урок 10 Wins Использование глобальных переменных для определения количества побед в игровом автомате «Счастливая семер- ка». Rate Функция для определения ставки побед в игровом автома- те «Счастливая семерка». Teams Подпрограмма общего применения, добавляющая пункты в окно перечня. Урок 11 Move Tag Программа перемещений объектов. Программа, позволяющая идентифицировать объекты, тре- бующие особой обработки в ходе выполнения цикла. FixArray Вычисление средней за неделю температуры с использо- ванием массива фиксированной длины. DynArray Вычисление средней температуры за любой период с ис- пользованием динамического массива. Baseball Ведение счета в игре в бейсбол с использованием двумер- ного массива. Урок 12 ShowText Показывает содержимое текстового файла в программе Visual Basic. Qnote SortDemo Простой текстовый редактор. Текстовый редактор, который демонстрирует работу под- программы пересортировки. Encrypt Encrypt2 Зашифровка текстового файла сдвигом кодов ASCII. Зашифровка текстового файла с использованием операто- ра Хог. Урок 13 Courses Приложение для работы с базой данных Students.mdb, рас- положенной в папке Lesson03. FindData Код для поиска информации в базе данных.
С чего начать 23 Проект Описание AddData DelData Backup Код для добавления записи в базу данных. Код для удаления записи из базы данных. Код, создающий резервную копию базы данных перед ее открытием. Урок 14 MusicEIS Образец информационной системы, использующей листы и диаграммы Excel, служебные фотосним- ки и базу данных Microsoft Access. UseWord Утилита, использующая орфографию и граммати- ку MS Word для проверки вводимого текста. Mortgage Программа, которая подсчитывает ежемесячные выплаты с использованием функции Pmt из Microsoft Excel. SendMail Программа, которая посылает почту через Microsoft Outlook RunSlide Программа на Visual Basic, которая открывает и запускает презентацию PowerPoint. Урок 15 RTFEdit Многофункциональный текстовый редактор, кото- рый демонстрирует средство управления Rich TextBox ActiveX. Урок 16 Progress Отслеживает процесс сортировки с помощью сред- ства управления ProgressBar ActiveX. RTFEdit 2 Демонстрирует работу средств управления Slider и StatusBar ActiveX. Урок 17 Play Tune Проигрывает .wav файлы с помощью средства уп- равления Multimedia MCI ActiveX. Run Video Проигрывает видео файлы с помощью средства управления Multimedia MCI ActiveX. PlayCD Проигрывает музыкальные CD файлы с помощью средства управления Multimedia MCI ActiveX.
24 Microsoft Visual Basic 6.0 для профессионалов. Шагза шагом Проект Описание Урок 18 FreeMem Использует функцию Windows API, чтобы отображать ин- формацию об объеме используемой памяти на вашем ком- пьютере. Урок 19 GetHTML FTP Загружает HTML-документы из Internet. Загружает файлы из Internet, используя FTP протоколы. Урок 20 ShowHTML Отображает HTML-документы, используя объект Internet Explorer. HtmlHits Создает список последних открывавшихся вами Web-уз- лов. Урок 21 WebLucky Версия игры «Счастливая семерка» с использованием Dynamic HTML. Урок 22 DHTML7 Dynamic HTML-приложение, которое использует элемен- ты панели инструментов D HTML и средства управления ActiveX. Урок 23 SaleGrid Учит отображать информацию с помощью средства FlexGrid (Табличная сетка). DataGrid Использует средство управления FlexGrid ActiveX для ото- бражения полей в базе данных Students.mdb. Урок 24 AdoCtrl Демонстрирует принцип использования средства управле- ния ActiveX Data Objects (ADO). AdoForm «Скелет» программы, который вы можете использовать для тренировки в написании кода с использованием ADO. AdoData Демонстрирует, как сортировать данные с помощью средств управления ADO и записи отдельных полей на диск. Extras Browser Программа для просмотра битовых изображений, которая обобщает навыки, приобретенные в части 1. Alarm Программа «Личный секретарь», которая обобщает навы- ки, приобретенные в части 1.
С чего начать 25 Проект Описание Magnify Расширенная программа для просмотра битовых изобра- жений с подключением метода Drag&Drop и функций пе- чати, которая обобщает навыки, приобретенные в части 3. Bookinfo Программа-интерфейс для просмотра базы данных Biblio.mdb, которая обобщает навыки, приобретенные в час- ти 4. Деинсталляция файлов упражнений Чтобы удалить файлы упражнений со своего жесткого диска, выполните следующие шаги: 1. Щелкните на кнопке Пуск (Start), укажите на строку Настройка (Settings), щелкните на строке Панель управления (Control Panel). 2. Дважды щелкните на значке Установка и удаление программ (Add/ Remove Programs). 3. Выберите в списке строку Microsoft Visual Basic 6 Step be Step и щелкните на кнопке Установка/удаление (Add/Remove). 4. В появившемся диалоговом окне щелкните на кнопке Да (Yes). Файлы упражнений будут удалены с вашего жесткого диска. 5. Щелкните на кнопке ОК, чтобы закрыть диалоговое окно Ус- тановка и удаление программ (Add/Remove Programs). 6. Закройте окно панели управления. Условные обозначения Последовательность шагов, которые вы должны выполнить при рабо- те с упражнениями, перечислена списком: 1., 2., и т.д. Если упражне- ние состоит из одного шага, оно обозначено стрелкой >-. Текст, который вы должны будете ввести с клавиатуры, выделен по- лужирным начертанием. Знак плюс (+) между названиями клавиш указывает на то, что данные клавиши следует нажимать одновременно, т.е. использовать комбина- ции клавиш. Например, выражение «Нажмите комбинацию клавиш I Al 11 + [~ТаЬ |» означает, что вы должны нажать клавишу [~А111, удер- живая нажатой клавишу | Tab |.
26 Microsoft Visual Basic 6.0. для профессионалов. Шагза шагом Знак запятая (,) между названиями клавиш указывает на то, что дан- ные клавиши следует нажимать последовательно. Например, выра- жение «Нажмите клавиши | Al 11, {~F~], Го~1» означает, что вначале вы нажимаете и отпускаете клавишу | Al 11, затем клавишу ГП и затем клавишу [~0~] • Другие особенности этой книги Каждый урок заканчивается необязательным упражнением «Шаг впе- ред». Эти упражнения, основанные на темах, излагаемых в уроке, ча- сто предлагают дополнительные варианты или другие способы реше- ния поставленных задач. Текст, набранный курсивом, содержит выводы, советы и дополнитель- ную полезную информацию. В конце каждого урока приводится его краткий конспект, который по- может вам вспомнить, как выполнить те или иные действия. Раздел «Чтобы повысить производительность» предлагает вам попрак- тиковаться в приобретенных навыках программирования, используя готовый программный код. Эти программы находятся в папке \Vb6Sbs\Extras.
чдсть Знакомство с Visual Basic

УРОК » 8 8 & Я Я 8 OSOOO8® ОЮ Я Я Я 8 Я Я Я Я Я Я Я Я Я Я Я Урок и я рассчитан ш на к 30 минут ® 8 я я я я я я 8 я я 8 я я я я я я 8 я я я я я я Запуск программы на Visual Basic Вы научитесь: запускать Visual Basic; использовать среду программирования Visual Basic; открывать и запускать программы на Visual Basic; изменять свойства установки; использовать Help и выходить из среды Visual Basic. Первая часть пособия посвящена основным принципам про- граммирования на этом языке. После нескольких уроков вы увидите, как просто написать мощную программу для Microsoft Windows с использованием языка Microsoft Visual Basic. Вы научитесь писать сложные программы, опираясь на опыт вашей повседневной работы на компьютере, даже если вы никогда раньше не занимались программировани- ем. В этом уроке вы узнаете, как запустить Visual Basic, как написать и запустить программу. Среда программирования Visual Basic содержит все необходимые инструменты для быстрого и эффективного создания мощных программ, ра- ботающих в среде Windows. Вы познакомитесь со средой Visual Basic, основными командами меню и программными процедурами.
30 Часть 1. Знакомство с Visual Basic Среда программирования Visual Basic Если вы еще не установили файлы упражнений, обратитесь к разделам «С чего начать» и «Установка и работа с файлами упражнений» в нача- ле книги, затем вернитесь к этому уроку. Запуск Visual Basic 1. В Microsoft Windows щелкните на кнопке Start (Пуск), выбери- те пункт Programs (Программы) и укажите на папку Microsoft Visual Basic 6.0. Появятся значки, соответствующие содержимому пап- ки. (Совет. Если вы устанавливали Visual Basic в составе пакета Microsoft Visual Studio, укажите на папку Microsoft Visual Studio и найдите значок программы Visual Basic 6.0. Инструкции и рекомендации, приводимые и в частях 1-4 этой книги, соответствуют всем версиям Visual Basic 6.0: I обучающей, для профессионалов и промышленной. 2. Щелкните на значке программы Visual Basic 6.0. Появится диалоговое окно нового проекта (New Project). В нем указан тип про- граммного проекта, установленный по умолчанию. 3. Щелкните на команде Open (Открыть), чтобы выбрать проект, установленный по умолчанию - стандартное 32-битное прило- жение Visual Basic. Новый проект откроется в среде программирования Visual Basic вместе с некоторыми окнами и инструментами, как показано на рисунке на следующей странице. Инструменты, имеющиеся в среде программирования Visual Basic, помо- гут вам при конструировании Basic-программ. Строка меню обеспечивает доступ к большинству команд, управляющих средой программирования. Меню и команды работают в соответствии со стандартными соглашениями, общими для всех приложений Windows. Запустить команду меню можно с помощью мыши или клавиатуры. Под строкой меню расположена панель инструментов - набор кнопок, являющихся ярлыками для команд, с помощью которых осуществляется работа в среде Visual Basic.
Урок 1. Запуск программы на Visual Basic 31 Панель Панель Строка Окно содержания Окно Окно инструментов инструментов меню проекта формы проекта Окно непосредственного выполнения Панель задач Окно свойств Окно макета Windows формы Чтобы получить подсказку о функции конкретной кнопки, помести- те на эту кнопку указатель мыши и не перемещайте его некоторое время. В нижней части экрана расположена панель задач Windows. Ее можно использовать для переключения между компонентами Visual Basic или для активации других приложений Windows. Если вы работали с такими программами, как Microsoft Word или Microsoft Excel, то понятие панели задач вам уже знакомо. Для активации кнопки на панели задач щелкни- те на кнопке, поместив на нее указатель мыши. На панели задач может также находиться значок программы Microsoft Internet Explorer или дру- гого Internet-броузера. В среде Visual Basic имеются также Окно инструментов (Toolbox), Окно содержания проекта (Project Container), Окно формы (Form), Окно проекта
32 Часть 1. Знакомство с Visual Basic (Project), Окно непосредственного выполнения (Immediate), Окно свойств (Properties) и Окно макета формы (Form Layout). Размер и форма этих окон определяются конфигурацией вашей системы. В Visual Basic версий 5 и 6 вы можете изменять расположение и форму окон, а также сворачивать их, чтобы сделать доступными и видимыми на экране все необходимые элементы системы программирования. О том, как настраивать среду про- граммирования, вы узнаете в ходе этого урока. Как открыть и выполнить программный проект с помощью строки меню 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project (Открыть про- ект). Это окно позволяет открыть любую существующую про- грамму Visual Basic на жестком диске, присоединенном сете- вом диске, CD-ROMe или гибком диске. Файлы проектов Visual Basic имеют расширения .vbp, .так, .vbg в име- ни файла. 2. Перейдите в директорию C:\Wb6Sbs\LessO1. Для этого щелкни- те на кнопке Up One Level (Переход на один уровень вверх) три раза. Затем дважды щелкните на папке Vb6Sbs в корневой ди- ректории и дважды щелкните на папке Less01.
Урок 1. Запуск программы на Visual Basic 33 Папка Vb6Sbs - это папка, созданная программой установки файлов упражнений по умолчанию. Она содержит все файлы упражнений и примеров, необходимые для работы с этой кни- гой. Каждому уроку соответствует папка LessN°№, где №№ - номер урока. 3. В папке LessOI выберите проект StepUp.vbp, затем щелкните на кнопке Open. Файл проекта StepUp загрузит форму пользова- тельского интерфейса, свойства, программный код, а также стандартный модуль программы StepUp. 4. Если форма StepUp невидима, дважды щелкните на папке Forms (Формы) в окне Project, после чего щелкните на строке Forml (StepUp.frm). Чтобы начать работу с компонентом проекта, вы должны сначала выбрать этот компонент в окне проекта. 5. Щелкните на кнопке View Object (Показать объект) в окне про- екта, чтобы увидеть программный пользовательский интер- фейс. Появится форма программы, как показано на следующем рисунке. ^Project! - Microsoft Visual Basic (design] ЯВЕ
34 Часть 1. Знакомство с Visual Basic Если вы видите только форму и не видите содержимого проек- та, значит окно формы максимизировано. Щелкните на кнопке Restore Window (Восстановить окно) на панели инструментов, чтобы увидеть содержимое проекта, как показано на предыду- щем рисунке. StepUp _ это простая программа на Visual Basic, которая позна- комит вас с основными элементами любой программы на Visual Basic. После запуска программа StepUp продемонстрирует вам анимированную картинку и приглашение к работе над этой книгой. > 6. Щелкните на кнопке Start (Пуск) на панели инструментов Visual Basic для запуска программы StepUp в среде Visual Basic. Окна инструментов и свойств исчезнут, и начнется выполне- ние программы StepUp. 7. Щелкните на кнопке Начало. Ваш экран будет выглядеть как показано на следующем рисунке. Step Up Добро пожаловать в Microsoft Visual Basic 6 Шаг за шагом 8. Щелкните на кнопке Конец, чтобы выйти из программы и вер- нуться в среду программирования. Вот и все — вы только что запустили вашу первую программу на Visual Basic! Изменение размеров и расположения инструментов программирования В среде программирования Visual Basic имеется семь инструментов. Вы можете размещать их в любом месте рабочего стола и изменять их раз-
Урок 1. Запуск программы на Visual Basic 35 меры так, чтобы вам было удобно работать. Visual Basic 6 позволяет пере- мещать любые инструменты программирования, прикреплять их или изменять их размеры. В Visual Basic 6 появилась новая возможность работы с окнами — при- крепление (docking). Чтобы переместить окно или панель инструментов, поместите указатель мыши на строку заголовка, нажмите клавишу мыши и, не отпуская ее, «перетащите» объект в новое положение. Если вы поместите окно так, что его граница совпадет с границей другого окна, то оно присоединится (прикрепится) к этому окну. Прикрепленные окна удобны тем, что они всегда находятся поверх других окон и поэтому всегда видны на экране. Если вам нужно увеличить рабочее поле прикрепленного окна, перета- щите одну из его границ. Если вы устали от прикреплений и хотите, что- бы эти окна перекрывались другими окнами, щелкните на команде Options (Настройка) в меню Tools (Инструменты), щелкните на вкладке Docking (Прикрепления) и удалите контрольные маркеры от тех инструментов, которые вы хотите сделать неприкрепленными. В следующих упражнениях вы будете перемещать, прикреплять и изме- нять размеры разных инструментов в среде программирования Visual Basic. Форма интерфейса пользователя Форма в Visual Basic - это окно, которое вы настраиваете для создания пользовательского интерфейса вашей программы. В программе StepUp формой является окно, которое появляется при работе программы. Фор- ма может содержать меню, кнопки, окна списков, полосы прокрутки и другие элементы, существующие в Windows-программах. Форма — это окно в интерфейсе пользователя. При запуске среды программирования Visual Basic по умолчанию появ- ляется форма, которая называется Forml, со стандартной сеткой (груп- па регулярно расположенных точек). Вы можете использовать эту сетку для создания пользовательского интерфейса вашей программы. Вы мо- жете изменить размеры формы с помощью мыши; форма может зани- мать часть экрана или весь экран. Если вы хотите добавить новые фор- мы, щелкните на команде Add Form (Добавить форму) в меню Project (Проект).
36 Часть 1. Знакомство с Visual Basic Если часть формы скрыта инструментами программирования, то вы мо- жете либо закрыть часть инструментов, ибо изменить их размеры, либо перетащить их так, чтобы они занимали меньше места. Перемещение формы по экрану не влияет на то, где появится эта форма при реальном запуске программы. Характеристики запуска управляются из окна Form Layout (Макет формы). Для установки расположения формы при запуске программы поместите уменьшенное изображение этой формы в нужное место в окне Form Layout. Панель инструментов программирования Инструменты и средства управления на панели инструментов служат для того, чтобы добавлять новые элементы пользователь- ского интерфейса. Чтобы открыть панель инструментов, щелк- ните на кнопке Панель инструментов. Панель инструментов обычно располагается вдоль левой стороны экрана. После того, как сред- ства управления внесены в форму, они становятся объектами, или программируемыми элементами пользовательского интер- фейса. Средства управления, находящиеся на панели инстру- ментов, можно использовать для добавления в форму рисунков, этикеток, кнопок, списков, полос прокрутки, меню и геометри- ческих фигур. После того, как пользователь запустит програм- му, эти элементы появятся на экране и будут работать так же, как любой объект в стандартном Windows-приложении. Панель инструментов содержит также средства управления для созда- ния объектов, выполняющих специальные «заэкранные» операции, та- кие как управление информацией в базах данных, контроль временных интервалов и т.д. Если вы поместите указатель мыши на тот или иной инструмент, то через некоторое время рядом с этим инструментом появится его название-подсказка. Окно Properties (Свойства) Окно Properties (Свойства) позволяет изменять характеристики (установ- ки) элементов пользовательского интерфейса в форме. Например, вы мо- жете изменить шрифт, кегль или выравнивание в приглашающем сооб- щении, которое выводится программой StepUp. (С помощью Visual Basic вы можете выводить текст любым шрифтом, инсталлированным в вашей системе - так же, как в программах Excel или Word.) Изменять установ- ки свойств в окне Properties можно как при создании пользовательского
Урок 1. Запуск программы на Visual Basic 37 интерфейса, так и тогда, когда программа уже запущена - через про- граммный код. Окно свойств содержит список всех объектов, использующихся в данном пользовательском интерфейсе (форме). В окне свойств также могут пе- речисляться изменяемые установки свойств для каждого объекта. Свой- ства можно просматривать в алфавитном порядке или по категориям. В следующем упражнении вы измените свойство Caption (Надпись) у кноп- ки Конец в программе StepUp. Изменение свойств 1. Убедитесь, что программа StepUp прекратила работу (вы уви- дите слово design в заголовке, когда программа остановится), и щелкните на объекте End в форме. Когда объект End (командная кнопка) обведен прямоугольником, значит, он выбран. Прежде чем работать с объектом в форме Visual Basic, вы должны сна- чала выбрать объект. 2. Щелкните на кнопке Properties Windows (Окно свойств) на па- нели инструментов. Окно свойств буден подсвечено (выбрано). Если окно свойств не было открыто, оно появится на экране. 3. Дважды щелкните на заголовке окна Properties (Свойства). Теперь это окно будет показано как плавающее (не прикреп- ленное). Ваш экран будет выглядеть так, как показано на сле- дующем рисунке. Properties - Сеттргй1- ^Command!rCommandButtoi (Name) Appearance BackColor Cancel : Caption iCommandl i 1 - 3D 1 □ &Н800СЮС iFalse t икимля ~ CausesValidatit True Default iFalse ? DisabledPicture(None) DownPicture Dragicon DragMode Enabled Font Hrijnt HelpContextlDiO Свойство Caption (Надпись) i(None) i(None) | jO - Manual | iTrue if MS Sans Serf 495 Caption Rrturhs/seb the text displayed И1 оЛ ObjeuCv IMF VnuA-dtt
38 Часть 1. Знакомство с Visual Basic В окне свойств перечислены все установки свойств для второй командной кнопки в форме (всего для командных кнопок дос- тупны 33 свойства). Имена свойств указаны в левой колонке окна, а текущие установки для каждого свойства - в правой. На вклад- ке Alphabetic свойства перечисляются в алфавитном порядке. 4. Прокручивайте список свойств, пока не появится свойство Caption (Надпись). Окно свойств прокручивается так же, как любой список. 5. Дважды щелкните на свойстве Caption (Надпись) в левой ко- лонке. Текущая надпись Конец в правой колонке будет выделе- на, и справа от нее замигает курсор. 6. Нажмите клавишу | Del |, наберите Выход, затем нажмите клавишу | Enter |. Установка свойства Caption изменена с Конец на Выход. Обратите внимание, что надпись на форме измени- лась. При следующем запуске программы на командной кноп- ке появится надпись Выход. 7. Прикрепите окно Properties над окном Project. Размышления о свойствах В Visual Basic каждый элемент пользовательского интерфейса в про- I грамме (включая его форму) имеет ряд определяемых свойств. Свой- I ства могут устанавливаться в процессе разработки в окне Properties, | кроме того, свойства могут изменяться в программном коде после за- I пуска программы, чтобы сделать ее работу осмысленной. Например, I элементы пользовательского интерфейса, принимающие вводимые | значения, часто используют свойства для передачи информации. Что- I бы помочь разобраться с таким непростым для начинающего поняти- | ем, как свойства, обратимся к аналогии. | Возьмем велосипед. Велосипед - это объект, который вы используете I для перемещения из одного места в другое. Велосипед является физи- I ческим объектом и имеет определенные характеристики, такие как м марку, цвет, модель, тип (туристический, горный, тандем). В термино- I логии Visual Basic эти характеристики являются свойствами объекта I «велосипед». Шаблон, по которому создавалась велосипедная рама, мы | могли бы назвать управлением свойствами. Большинство характерис- I тик велосипеда должны быть определены при его создании, но некото- I рые (шины, скорость езды, износ) будут меняться при его использова- | нии. Visual Basic позволяет работать со свойствами обоих типов. I
Урок 1. Запуск программы на Visual Basic 39 Рассмотрим подробнее способы прикрепления. Самый быстрый — дваж- ды щелкнуть на заголовке окна и подтащить окно к границе другого окна. Конечно, этот прием требует некоторого навыка, особенно когда окон много и несколько границ смыкаются друг с другом; но мы надеемся, что когда вы начнете программировать по-настоящему, то быстро поймете, насколь- ко важно иметь хорошо организованное рабочее пространство. Окно Project (проект) Visual Basic-программа состоит из нескольких файлов, которые собира- ются вместе (компилируются), когда программа готова. Чтобы помочь вам переключаться между отдельными компонентами программы при рабо- те над проектом, разработчики Visual Basic включили в среду програм- мирования окно проекта (Project). В окне Project перечисляются все файлы, используемые при программировании, и осуществляется доступ к ним при помощи двух кнопок: View Code (Просмотр кода) и View Object (Просмотр объекта). Команды в меню File (Файл) в окне Project (Проект) позволяют вам добавлять, удалять или сохранять ваши файлы. Изменения отобра- жаются в окне Project сразу после их внесения в проект. Файл проекта содержит список всех поддерживаемых файлов в про- граммном проекте и имеет расширение .vbp (Visual Basic Project). В Visual Basic 5 в окно проекта можно одновременно загрузить несколько файлов проектов. Для переключения между ними достаточно щелкнуть мышью на имени проекта. Под именем проекта в окне Project показаны компо- ненты каждого проекта и связь между ними. «Дерево» проектов похоже на структуру папок в окне Проводника в Windows. Вы можете разворачи- вать и сворачивать эти «ветви», щелкая на значках (+) и (-) рядом с пап- ками. В следующем упражнении вы познакомитесь с окном проекта для про- граммы StepUp. Просмотр окна проекта 1. Щелкните на кнопке Project Explorer (Проводник проекта) на панели инструментов. Окно Project теперь выделено. Если это окно было закрыто, сейчас оно появилось. 2. Дважды щелкните на строке заголовка окна Project (Проект), чтобы отобразить его на экране как плавающее (не прикреп- ленное). Ваш экран будет выглядеть так, как показано на сле- дующем рисунке.
40 Часть 1. Знакомство с Visual Basic Щелкните на кнопке View Code для просмотра программного кода в активной форме Щелкните на кнопке View Object для просмотра активной формы Активная форма 3. Щелкните на значках (+) около папок Forms (Формы) и Modules (Модули), если эти папки еще не развернуты. Файл проекта в этом программном проекте называется StepUp. В проекте StepUp перечислены файлы StepUp.frm и StepUp.bas. StepUp.bas содержит код, разделяемый всеми частями програм- мы. StepUp.frm содержит форму пользовательского интерфейса и программный код, связанный с объектами в форме. Когда программа компилируется в выполняемый файл, эти файлы будут скомбинированы в единственный .ехе-файл. 4. Дважды щелкните на заголовке окна Project, чтобы прикре- пить его. Справочная система Visual Basic В Visual Basic предусмотрена оперативная справочная система, включа- ющая информацию о среде программирования, инструментах и языке программирования Visual Basic. Мы советуем вам уделить немного вре- мени знакомству со справочной системой перед тем, как приступать не- посредственно к составлению программ. Совет. I Интерактивная помощь по Visual Basic поставляется на двух компакт- I дисках из библиотеки Microsoft Developer Network (MSDN). Если у I вас на диске свободно около 95 Мбайт, вы можете скопировать всю I документацию по Visual Basic на свой жесткий диск. Если вы не хоти- ll те этого делать, то можете каждый раз вставлять запрашиваемый I диск в CD-дисковод.
Урок 1. Запуск программы на Visual Basic 41 Получить доступ к справочной информации можно несколькими спосо- бами. Для получения справки Сделайте следующее По конкретной теме или дей- ствию В меню Help (Справка) Visual Basic щелк- ните на вкладке Contents (Содержание), чтобы открыть библиотеку MSDN. При работе в окне кодов Щелкните на ключе или операторе, по которому хотите получить справку, и на- жмите клавишу Гп~]. При работе в диалоговом окне Щелкните на кнопке Help (Справка) в этом диалоговом окне. По конкретному термину В меню Help (Справка) щелкните на пун- кте Search (Поиск) и в поле ввода системы поиска MSDN введите этот термин. При соединении с Web-стра- ницей, содержащей информа- цию о Visual Basic или про- граммировании В меню Help (Справка) укажите на пункт Microsoft On The Web (Microsoft на Web), за- тем щелкните на интересующей вас теме. О получении технической под- держки В меню Help (Справка) щелкните на пун- кте Technical Support (Техническая поддер- жка). В следующем упражнении вы получите справочную информацию об окне проекта (или о любом другом элементе среды программирования Visual Basic). Получение справки по конкретному вопросу 1. Щелкните на меню Help в строке меню. Появится содержимое меню Help. 2. В меню Help щелкните на Contents. После этого будет запуще- на библиотека Visual Basic MSDN. 3. Увеличьте окно библиотеки MSDN. Библиотека MSDN отображает справочную информацию в формате HTML. При первом открытии библиотеки MSDN в правом окне отображаются названия несколько вводных тем для разработчиков программного обеспечения. Левое окно по-
42 Часть 1. Знакомство с Visual Basic зволяет вам перемещаться по справочной системе. Когда в ле- вом окне вы найдете интересующую вас тему, в правом появит- ся содержимое соответствующего файла. 4. Щелкните на вкладке Index библиотеки MSDN. 5. Наберите в поле ввода project explorer (или любую другую тему для поиска). Как только вы начинаете вводить название темы, в поле списка последовательно появляются пункты справки, начинающиеся сначала на первую букву вводимого слова, потом на две первых буквы, и т.д. 6. Дважды щелкните на теме project explorer в поле списка. Библиотека MSDN найдет все ссылки на словосочетание Project Explorer, имеющиеся в справочной системе, и выдаст резуль- таты поиска в диалоговом окне. 7. Дважды щелкните на теме «project Explorer (Visual Basic References)». Библиотека MSDN выведет справочную информацию по этой теме в правом окне. Полосы прокрутки позволяют вам переме- щаться по всему файлу. Потратьте несколько минут, чтобы про- честь статью и научиться работать со справочной системой. 8. Щелкните на команде Exit (Выход) в меню File для выхода из справочной системы. Шаг вперед: выход из Visual Basic Если вы решили закончить работу в Visual Basic сегодня, то сохраните все открытые проекты и закройте программную среду. Сделайте следу- ющие шаги. Если вы хотите продолжить работу в следующем уроке: >- не выходя из Visual Basic, приступайте к уроку 3. Если вы хотите выйти из Visual Basic: > в меню File (Файл) щелкните на Exit (Выход). Если вы увиди- те диалоговое окно Save (Сохранить), укажите Yes (Да).
Урок 1. Запуск программы на Visual Basic 43 Краткое содержание урока Чтобы Сделайте следующее Кнопка Запустить Visual Basic Щелкните на кнопке Start (Пуск) на пане- ли задач. Затем укажите на Programs (Программы), укажите на папку Visual Basic 6.0 и щелкните по значку програм- мы Visual Basic 6.0. gQ Start Показать функ- Поместите указатель мыши поверх кноп- цию кнопок ки. Открыть суще- ствующий проект Запустить новый проект Запустить про- грамму Прикрепить инструмент про- граммирования В меню File (Файл) щелкните на команде Open Project. В меню File (Файл) щелкните на команде New Project. Щелкните на кнопке Start на панели ин- струментов или нажмите клавишу | F5 |. Щелкните на заголовке и тащите инст- румент к границе другого инструмента, пока он не привяжется к месту. Чтобы увидеть больше в прикрепленном инст- рументе, дважды щелкните на его заго- ловке или расширьте его мышью. Переместить па- нель инструментов Установить свой- ства Перетащите панель инструментов с по- мощью мыши. Щелкните по кнопке Properties Window (Окно свойств) на панели инструментов для показа окна Properties (если оно не от- крыто) и затем дважды щелкните на за- головке окна Properties. Откройте ниспада- ющий список объектов для показа элементов пользовательского интерфей- са из вашей формы, щелкните на объек- те, в котором вы хотите установить свой- ства, а затем щелкните на установках свойств, которые вы хотите установить. ►
44 Часть 1. Знакомство с Visual Basic Чтобы Сделайте следующее Кнопка Показать окно про- екта Щелкните на кнопке Project Explorer (Про- водник проекта) на панели инструментов Я® (если окно проекта не открыто). Затем дважды щелкните на заголовке окна Project. Выйти из Visual Basic В меню File щелкните на Exit.
УРОК . м 8 » : Ваша первая gg I программа & 8 & и 88 —- ss Вы научитесь: , Ч'“ч,д « •i\-Vv 88 создавать интерфейс пользователя для новой програм- « мы; Урок устанавливать свойства для каждого объекта в вашем рассчитан » , „ „ пользовательском интерфейсе; на 35 минут писать программные коды; ж и сохранять и запускать программы; я « строить выполняемые файлы. ___________________________________________ я В уроке 1 вы узнали, что среда программирования Visual Basic содержит мощные средства для управления вашими я программами. Visual Basic также имеет все необходимое для создания приложений под Windows «с нуля». В этом уроке в вы научитесь создавать простой, но удобный пользователь- ский интерфейс со средствами управления. Затем вы научи- м тесь настраивать этот интерфейс с помощью специальных характеристик, называющихся свойствами. В заключение я вы научитесь соотносить действия вашей программы с про- граммными кодами, сохранять и запускать программу, а я также создавать выполняемый файл.
46 Часть 1. Знакомство с Visual Basic Счастливая семерка: ваша первая программа на Visual Basic Теперь, когда у вас есть некоторый опыт работы в среде программирова- ния Visual Basic, настало время создать вашу первую Visual Basic-програм- му. Вы сконструируете приложение под названием Счастливая семерка - про- грамму, имитирующую игровой автомат «однорукий бандит». Программа Счастливая семерка обладает простым пользовательским интерфейсом и может быть создана и скомпилирована всего за несколько минут. (Если вы хотите запустить эту игру перед тем, как создавать программу, дваж- ды щелкните на файле Lucky.exe в папке \Vb6Sbs\LessO2 на вашем жестком диске.) После того как программа закончит работу, ваш экран будет выг- лядеть так, как показано на следующем рисунке. Последовательность программирования Пользовательский интерфейс Счастливая семерка содержит две командных кнопки, три окна, в которых выводятся числа, графическую картинку со столбиками монет и метку Счастливая семерка. Эти элементы были созданы
Урок 2. Ваша первая программа 47 как семь объектов в форме Счастливая семерка с последующим изменением свойств каждого объекта. После разработки интерфейса был добавлен программный код для командных кнопок Вращать и Конец, который обра- батывал нажатия на кнопки и генерировал случайные числа. При пере- создании Счастливой семерки вы используете определенную последователь- ность действий, состоящую из трех этапов. Итак, первый этап - создание пользовательского интерфейса, второй этап - установка свойств, третий - составление программного кода. Процесс программирования игры «Счастливая семерка» представлен в следующей таблице. Этап программирования Число пунктов 1. Создание пользовательского интерфейса 7 объектов. 2. Установка свойств .10 свойств. 3. Составление программного кода 2 объекта. Можно действовать и по-другому: сначала составить алгоритм, или пе- речень шагов будущей программы. Задача — программа «Счастливая семерка» должна выполнять следующие действия: Обеспечивать пользовательский интерфейс, имеющий кнопки «вращать» и «Конец», три окна с изменяющимися цифрами, метку-описание игры и окно, показывающее приз при выигрыше пользователя. выбирать три случайных числа и показывать их, когда пользо- ватель щелкнет на кнопке «вращать». Показывать столбик монет и выдавать звуковой сигнал, когда в одном из окно появится число 7. Закрывать программу после щелчка на кнопке «Конец».
48 Часть 1. Знакомство с Visual Basic Разработка пользовательского интерфейса Работу над программой Счастливая семерка начнем с создания нового про- екта. Затем мы создадим пользовательский интерфейс с помощью средств управления из панели инструментов. Создайте пользовательский интерфейс 1. В меню File (Файл) щелкните на команде New Project (Новый проект). Если на экране появится вопрос, сохранять ли изменения в программе первого урока Step Up, щелкните на кнопке No. Про- грамма Step Up будет удалена из памяти. 2. Щелкните на кнопке ОК, чтобы перейти к созданию нового 32- битного приложения Visual Basic. Visual Basic выделяет место для создания нового программного проекта и показывает чис- тую форму в центре экрана, которая будет использоваться для создания пользовательского интерфейса вашей программы. Далее вы увеличите размеры формы и создадите две кнопки. 3. Поместите указатель мыши в правый нижний угол окна Фор- мы (Form) (но не окна Project (Проект)). Указатель примет вид двунаправленной стрелки. Перемещайте указатель, увеличивая размеры формы так, чтобы на нем мог- ли разместиться все объекты вашей программы. После увеличения размеров формы в окне проекта появляют- ся полосы прокрутки, как показано на следующем рисунке.
Урок 2. Ваша первая программа 49 Перемещайте указатель для изменения размеров формы VimmI Rd к Efe Edit $ew Project RfJFt Tools ArfcMns Wbtfow Help JI® iReturns/sets the text displayed ir jan objects ttlt bar or below an Forms CL Fermi (Form!) Properties * Fortfti 2 [Fiiim! 7" _l Alphabetic ] categorized | BackColor □ &H800000*. Borderstyle 2 - Sizable ng Чтобы увидеть всю форму целиком, увеличивайте размер окна Project (Проект), пока полосы прокрутки не исчезнут, а также переместите или закройте окно свойств, окно проекта и окно макета формы. 4. Чтобы создать на форме объект «Командная кнопка», щелк- ните на кнопке Command Button (Командная кнопка) на панели инструментов. Переместите указатель мыши на форму. Теперь, когда выбрана опция управления командной кнопкой, указатель мыши принимает крестообразную форму. Такая форма облегчает работу по вычерчиванию прямоугольных объектов.
50 Часть 1. Знакомство с Visual Basic Удерживая левую кнопку мыши нажатой, перетащите указа- тель. Объект «командная кнопка» при этом приобретает опре- деленные очертания и привязывается к сетке, сформирован- ной равномерно расположенными на форме точками. 5. Создадим первую командную кнопку. Переместите указатель мыши ближе к левому верхнему углу формы, затем, удерживая нажатой левую кнопку мыши, пере- местите указатель вниз и вправо. Когда командная кнопка ста- нет похожа на показанную на рисунке ниже, остановите пере- мещение указателя и отпустите левую кнопку мыши. Ваш экран будет выглядеть так, как показано на следующем рисунке. На форме появилась командная кнопка с набором команд уп- равления. По умолчанию первая командная кнопка в програм- ме называется Commandl. К этому названию вы можете доба- вить комментарий - вы увидите его снова позднее, когда будете писать программный код. Вы можете перемещать командные кнопки по форме с помо- щью мыши и изменять их размеры с помощью элементов уп- равления всякий раз, когда Visual Basic находится в режиме разработки (когда среда программирования Visual Basic актив- на). Однако после запуска программы на выполнение пользо- ватель сможет изменить положение элементов интерфейса, только изменив специальные свойства (если программа это позволяет).
Урок 2. Ваша первая программа 51 Перемещение и изменение размеров командной кнопки 1. С помощью мыши перетащите командную кнопку вправо. Командная кнопка привяжется к сетке, когда вы отпустите кнопку мыши. Сетка формы призвана помочь вам редактиро- вать и выравнивать различные элементы пользовательского интерфейса. Вы можете изменить шаг сетки, щелкнув в меню Tools (Сервис) на команде Options (Настройка), а затем - на вклад- ке General (Общие). 2. Поместите указатель мыши в правый нижний угол команд- ной кнопки. Если указатель находится на углу или стороне выб- ранного объекта и некоторое время неподвижен, то он прини- мает вид указателя размеров. Теперь, перетащив край объекта, вы измените его размеры. 3. Увеличьте размеры объекта, перетаскивая указатель вниз и вправо и удерживая нажатой левую кнопку мыши. Когда вы отпустите кнопку мыши, командная кнопка с новыми разме- рами привяжется к сетке. 4. С помощью указателя размеров верните кнопку к первоначаль- ному виду и переместите ее в прежнее положение на форме. Создание новой командной кнопки 1. Щелкните на кнопке Command Button (Командная кнопка) на панели инструментов. 2. Вычертите новую командную кнопку. Расположите ее под первой кнопкой и сделайте ее такого же размера. 3. При необходимости измените размеры или расположение кнопки. Если вы ошиблись, вы можете удалить кнопку и создать ее заново. Вы можете удалить объект, выделив его на форме и нажав клавишу | Del |. Как добавить числовые метки Добавим метки для показа чисел. Метка - это специальный элемент пользовательского интерфейса, предназначенный для показа тек- ста, чисел и символов при работе программы. Когда пользователь щелка-
52 Часть 1. Знакомство с Visual Basic ет на кнопке Вращать, в окнах меток появляются три случайных числа. Если одно из чисел - семерка, пользователь выигрывает. 1. Щелкните на кнопке Label (Метка) на панели инструментов, затем поместите указатель мыши на форму. Теперь, когда выбрана опция управления метками, указатель мыши принимает крестообразную форму. 2. Создайте маленькое прямоугольное окно, как показано на следующем рисунке. Объект «метка», который вы создали, называется Labell - это первая метка в программе. Создайте на форме еще две метки с названиями Label2 и Label3. 3. Щелкните на кнопке управления метками и вычертите окно второй метки справа от первой. Создайте метку такого же раз- мера, как и первая. На метке появится надпись Label2. 4. Щелкните на кнопке управления метками и вычертите окно третьей метки справа от второй.
Урок 2. Ваша первая программа 53 Примечание. Когда вы будете создавать метки, обратите внимание на всплываю- щее окно, которое появляется, как только вы вычертили метку. Это окно называется окном размеров (sizing box). Оно показывает верти- кальные и горизонтальные размеры вашей метки. Размеры в этом окне I приводятся в специальных единицах измерения, называемых twip и I равных 1/20 пункта (point). Пункт равен 1/72 дюйма, так что twip ра- вен 1/1440 дюйма (около 0,0176 мм). С помощью окна размеров удобно | размещать объекты на форме, а также сравнивать относительные раз- | меры созданных вами объектов. I Создайте метку такого же размера, как и предыдущие. На метке появится надпись Label3. 5. Добавим метку описания игры в вашу форму. Это будет чет- вертая и последняя метка в программе. Щелкните на кнопке Label (Метка) на панели инструментов. 6. Создайте большой прямоугольник под двумя командными кнопками. Ваш экран будет выглядеть примерно так, как пока- зано на следующем рисунке. Если ваши метки видны на экра- не не полностью, вы можете изменить их размеры.
54 Часть 1. Знакомство с Visual Basic Как создать окно рисунка Теперь создадим окно рисунка, в котором при выигрыше пользователя будет появляться столбик монет. Окно рисунка предназначено для выво- да на экран иллюстраций, значков и других изображений. В Visual Basic имеется собственная галерея картинок, которые тоже могут быть пока- заны в этом окне. 1. Щелкните на кнопке Image (Рисунок) на панели инструмен- тов. 2. Создайте прямоугольное окно под тремя числовыми метка- ми. Ваш экран будет выглядеть так, как показано на следую- щем рисунке. Созданный объект будет назван Imagel. Вы используете это имя при составлении программного кода. Теперь интерфейс создан, и вы можете перейти к установке его свойств. Установка свойств объекта При работе с программой StepUp вы узнали, что свойства объекта можно изменять. Для этого нужно выбрать объект на форме и изменить уста- новки в окне свойств. В программе Счастливая семерка мы начнем установку свойств с изменения названий командных кнопок.
Урок 2. Ваша первая программа 55 Установка свойств командных кнопок 1. Щелкните на первой командной кнопке (Command!) на форме. Вокруг командной кнопки появится рамка, показывающая, что кнопка выделена. 2. Дважды щелкните на заголовке окна Properties (Свойства). Появится окно свойств. Ваш экран будет выглядеть так, как показано на следующем рисунке. Properties - Imagel | Command! ComrnandButton '' AWtetk'll ’ I Appearance § BackColor * Cancel ? Caption ? Default j DtsabledPicture s DownPicture \ Dragicon $ DragMode 1 Enabled |Font.__ I Height.. I HelpContextID | Index I Left И-3D I @ &неооооос| .False I; (Commandl О < False :5 (None) ; ((None) i(None)^ _____I (0- Manual I (True I MS Sans Serif I 375 1 o ...........I I’" В окне свойств перечислены установки для первой командной кнопки. Сюда включены установки цвета фона, названия, раз- мера шрифта (кегля) и ширины командной кнопки. 3. Дважды щелкните на свойстве Caption (Название) в левой ко- лонке окна свойств. Будет выделена текущая установка назва- ния (Commandl). 4. Наберите новое название Вращать и нажмите клавишу | Enter |. Название кнопки изменится на Вращать в окне свойств и на форме. Теперь изменим название второй кнопки на Конец. Сделать это можно и другим способом. 5. Откройте ниспадающее окно Object List (Список объектов) в верхней части окна свойств. В списке перечислены объекты вашей программы.
56 Часть 1. Знакомство с Visual Basic CommandButton ж ifcommandiCommandButton i Commands CommandButton Forml Form Imagel Image Labell Label Label? Label Label3 Label Label4 Label DisabledPicture i(None) DownPicture ;(None) L'raglcon -(None) DragPlode ,0-Manual 9 ii Enabled Jrue 9 Font -MS Sans Serif 9 Height -375 '9 <v HelpContextID =0 9 Index 9 Left ^20Z”. ..I... l aplicin Reb.imsfsets.tfie text, displayed in • an object's title barer below an Свойства объектов, находящихся на форме, и самой формы можно установить с помощью ниспадающего окна списка 6. Щелкните на кнопке Command? в окне списка. Установки свойств для второй командной кнопки появятся в окне свойств. 7. Дважды щелкните на текущем свойстве названия («Com- mand?»), наберите Конец и затем нажмите клавишу | Enter |. Название второй командной кнопки изменится на Конец. Примечание. I С помощью ниспадающего списка объектов удобно переключаться I между объектами программы. Конечно, вы можете просто щелкать I на каждом объекте, находящемся на форме. Установка свойств числовых меток Теперь установим в программе свойства для меток. Первые три метки будут выводить на экран случайные числа, и свойства этих меток будут одинаковы (мы установим их как группу). Затем мы перейдем к установ- ке свойств метки-описания. 1. Щелкните на первой числовой метке, затем, удерживая на- жатой клавишу | Shi ft |, щелкните на второй и третьей число- вых метках. (Если метки закрыты окном свойств, передвиньте его в другое место.)
Урок 2. Ваша первая программа 57 Для выделения на форме нескольких объектов удерживайте нажатой клавишу | Shi ft | и поочередно щелкайте на выделяемых объектах. Вокруг каждой метки, по которой вы щелкнули, появятся пря- моугольники выделения. Когда все три метки будут выделены, отпустите клавишу | Shi ft |. Примечание. При выделении нескольких объектов в окне свойств отображаются I только те свойства объектов, которые могут быть изменены как труп- повые. 1 Сейчас вы измените такие свойства, как выравнивание, стиль рамки и шрифт, так чтобы числа, которые появляются в мет- ках, были выровнены по центру, обрамлены и имели одинако- вый шрифт. 2. Щелкните на свойстве Alignment (Выравнивание), а затем - на стрелке окна ниспадающего списка, который появится справа. 3. Щелкните на цифре 2 - это опция Center (Выравнивание по центру). Теперь во всех трех кнопках установлено выравнива- ние по центру. 4. Изменим стиль рамки. Щелкните на свойстве Border Style (Стиль рамки), а затем - на стрелке окна ниспадающего спис- ка, который появится справа. В окне списка появится перечень доступных установок свойств (0 - None, 1 - Fixed Single). 5. Щелкните на свойстве 1 - Fixed Single в окне списка, чтобы до- бавить тонкую рамку вокруг каждой метки. 6. Изменим шрифт, которым будут выведены цифры в окнах меток. Дважды щелкните на свойстве Font (Шрифт) в окне свойств. Появится диалоговое окно Font (Шрифт). Ваш экран будет выглядеть так, как показано на следующем рисунке.
58 Часть 1. Знакомство с Visual Basic I ont 7. Измените шрифт (Font) на TimesNewRoman, начертание - на полужирное (Bold), кегль (Size) - на 24, и затем щелкните на кноп- ке ОК. Теперь названия меток отображаются выбранным вами шриф- том, кеглем и начертанием. Удалим названия меток, чтобы при запуске программы окна были пустыми. Установки шрифта при этом сохранятся, так как они хранятся как отдельные свойства. Для выполнения этой операции вам придется выбирать каж- дую кнопку отдельно. 8. Щелкните на форме, чтобы снять выделение с трех меток, затем щелкните на правой метке. 9. Дважды щелкните на свойстве Caption, затем нажмите клави- шу | Del |. Название объекта Labе11 исчезнет. Позже в этом уроке мы рас- скажем, как с помощью программного кода поместить в это свойство случайное число (игровой автомат). 10. Сотрите названия второй и третьей меток на форме. Вы подготовили три первых метки. Теперь изменим название, шрифт и цвет последней метки.
Урок 2. Ваша первая программа 59 Установка свойств метки-описания 1. Щелкните на четвертом объекте «метка» на форме. 2. Измените свойство Caption (Надпись) на Счастливая семерка. 3. Дважды щелкните на свойстве Font (Шрифт), в диалоговом окне измените шрифт на Arial, начертание — на полужирное, кегль - на 20 и щелкните на ОК. Шрифт в окне метки обновил- ся. Обратите внимание, что теперь название метки располага- ется на двух строках (длина кнопки недостаточна для того, что- бы название поместилось на строке целиком). Это очень важно: содержимое объекта должно всегда умещаться внутри объек- та. Содержимое может либо переноситься на следующую стро- ку, либо сжиматься. 4. Изменим цвет текста. Для этого дважды щелкните на свой- стве ForeColor в окне свойств. В поле списка появились вкладки System (Системные) и Palette (Палитра), позволяющие изменить цвет объекта. Вкладка System (Системные) показывает текущие цвета, применяемые для элементов пользовательского интерфейса в системе. (Ус- тановки на этой вкладке соответствуют вкладке Appearance (Оформление) в окне свойств Рабочего стола.) Вкладка Palette (Палитра) содержит все цвета, доступные в вашей системе. 5. Щелкните на вкладке Palette (Палитра), а затем - на квадра- тике вишневого цвета. Текст в окне метки стал вишневым. Выб- ранный вами цвет представляется в окне свойств как шестнад- цатиричное число. Программисты обычно имеют дело с таким представлением различных величин, и интересно посмотреть, как Visual Basic записывает подобную информацию в програм- ме. Теперь вы готовы изменить свойства последнего объекта. Свойства окна рисунка Объект «окно рисунка» будет содержать изображения столбиков монет. Оно появляется, когда пользователь выигрывает (т.е. в числовых метках появилась хотя бы одна семерка). Вам понадобятся три свойства: Stretch (Вытягивание) для установления точного размера картинки; Picture (Ри- сунок) для указания имени графического файла, который загружается в метку, и свойство Visible (Видимость), которое определяет состояние ри- сунка в начале работы программы.
60 Часть 1. Знакомство с Visual Basic Установка свойств окна рисунка 1. Щелкните на объекте «окно рисунка» на форме. 2. Щелкните на свойстве Stretch (Вытягивание) в окне свойств, затем щелкните на стрелке, чтобы вызвать список, и в списке щелкните на опции True (Верно). При установке опции True (Верно) Visual Basic точно «впишет» картинку в окно рисунка. (Обычно это свойство устанавлива- ется перед установкой свойства Picture (Рисунок).) 3. Дважды щелкните на свойстве Picture (Рисунок) в окне свойств. Появится диалоговое окно Load Picture (Загрузить рисунок). Ваш экран будет выглядеть так, как показано на следующем ри- сунке. _| Template Wizards File name; | 11 Files of type; | All Picture Files j»] 4. В диалоговом окне Load Picture (Загрузить рисунок) найдите папку \Vb6Sbs. Вы увидите содержимое папки \Vb6Sbs. 5. Дважды щелкните на значке папки Less02. В диалоговом окне Load Picture (Загрузить рисунок) появится рисунок Coins.wmf (.wmf - это формат, называемый Windows- метафайл). Windows-метафайлы содержат графические объекты, которые могут масштабироваться без искажений и хорошо выглядят при любом увеличении или уменьшении.
Урок 2. Ваша первая программа 61 6. Выделите файл Coins.wmf и щелкните на кнопке Open. Windows-метафайл Coins (Монеты) будет загружен в окно ри- сунка на форме. 7. Изменим свойство Visible (Видимость) на False (Ложно). Теперь при запуске программы монеты будут невидимы. (Позднее мы составим программный код, который будет делать их видимы- ми при определенных условиях.) Щелкните на свойстве Visible (Видимость) в окне свойств, затем щелкните на стрелке, чтобы вызвать список. 8. В списке щелкните на опции False (Ложно). Свойство Видимость установлено в положение «Ложно». Это свойство будет приме- нено к программе после ее запуска, но не в процессе разработ- ки. Законченная форма будет выглядеть так, как показано на следующем рисунке. 9. Дважды щелкните на заголовке окна свойств, чтобы вернуть его в прикрепленное положение. Составление программного кода Теперь вы можете перейти к составлению кода для программы Счастливая семерка. Большинство объектов, которые вы создали, уже «знают», как работать после запуска программы, и готовы к приему данных от пользо- вателя и их обработке. Внутренняя функциональность создаваемых
62 Часть 1. Знакомство с Visual Basic объектов - одна из мощнейших особенностей Visual Basic! Если объекты однажды созданы и помещены на форму, то они готовы к работе без вся- кого дополнительного программирования. В нашей программе недостает только «начинки» - кода, который будет вычислять случайные числа, показывать их в окнах и сообщать о выигрыше. Вычислительная логика может быть встроена в приложение только с по- мощью программного кода, который четко расписывает, что именно про- грамма должна делать на каждом этапе работы. Программа управляется кнопками Вращать и Конец, поэтому и код будет связан с информацией, по- ступающей от этих кнопок. Окно Code (Код) — это специальное окно в среде программирования, ко- торое используется для ввода и редактирования программных утверж- дений Visual Basic. Представление свойств в табличном виде В этом уроке мы подробно рассказываем об установке каждого из свойств программы и устанавливаем их поочередно, шаг за шагом. В следующих уроках инструкции по установке простых свойств будут представлены в виде таблицы. Например, свойства, которые мы уже установили для программы Счастливая семерка, можно представить сле- дующей таблицей. Объект Свойство Установка Command 1 Caption Вращать Command2 Caption Конец Labell, Label2, Label3 Border Style Alignment Font Caption 1 - Fixed Single 2 - Center TimesNewRoman, Bold, 24 (Empty) Label4 Caption Font ForeColor Счастливая семерка Arial, Bold, 20 Dark Purple (&H008000808) Image 1 Picture Stretch Visible \Vb6SBS\Less02\coins.wmf True False
Урок 2. Ваша первая программа 63 Работа в окне кода 1. Дважды щелкните на командной кнопке Конец на форме. По- явится окно Code (Код), как показано на следующем рисунке. Если окно меньше, чем показано выше, измените его размеры с помощью мыши. Точные размеры не очень важны, поскольку для просмотра данных вы можете пользоваться полосами про- крутки. Блок кода, связанный с частным объектом интерфейса, мы бу- дем называть процедурой события Visual Basic. Тело процеду- ры заключено между операторами, указывающими на начало и конец подпрограммы. Private Sub Command2_Click() End Sub Тело процедуры всегда располагается между этими строками и выполняется всякий раз, когда пользователь активизирует элемент интерфейса, ассоциированный с процедурой. В дан- ном случае событием является щелчок мышью, но, как вы уви- дите далее в этой книге, оно может быть событием и другого типа. 2. Наберите End и нажмите клавишу [Ф]. Когда вы набираете утверждение, в окне Code (Код) появляются черные буквы. Ког- да вы нажмете клавишу Щ (или клавишу | Enter |, или просто щелкнете на следующей строке), цвет программного утверж- дения изменится на синий, показывая, что Visual Basic распоз- нал его как допустимое в программе, или как ключевое слово End — это программное утверждение, которое используется для остановки программы и удаления ее с экрана.
64 Часть 1. Знакомство с Visual Basic Система программирования Visual Basic содержит несколько сотен уникальных ключевых слов, дополненных ключевыми операторами и символами. Правила их написания и расстанов- ки пробелов должны строго соблюдаться, иначе Visual Basic не распознает их. Примечание. Правила написания и расстановки пробелов в ключевых словах на- зываются синтаксисом утверждений. 3. Переместите курсор в начало строки с утверждением End и четыре раза нажмите клавишу | SpaceBar |. Утверждение End пе- реместится на четыре пробела вправо. Так в Visual Basic при- нято отмечать ключевые слова начала и конца подпрограммы, чтобы сделать тексты программ более понятными и легко чи- таемыми. Группа соглашений относительно того, как органи- зован программный код, обычно называется стилем програм- мирования. Итак, вы написали код, ассоциированный с кнопкой End. Теперь напишем код для кнопки Вращать. Эти программные утверждения будут более про- странными. Вы начнете знакомиться с синтаксисом и стилем программи- рования. Обратите внимание на структуру программного кода и на осо- бенности их написания. Программный код для кнопки Вращать 1. Откройте список объектов в окне Code (Код). Объекты интер- фейса Счастливая семерка появятся в списке, как показано на сле- дующем рисунке. Кнопка просмотра всего модуля Кнопка просмотра процедуры
Урок 2. Ваша первая программа 65 2. Щелкните на строке Commandl в списке. Появится процедура, связанная с кнопкой Commandl. По умол- чанию Visual Basic показывает все процедуры событий для формы в одном окне, так что вы можете легко переключаться между ними. Если вы щелкнете на кнопке просмотра процеду- ры в левом нижнем углу окна кода, то будете просматривать в одном окне только одну процедуру. Чтобы снова увидеть все процедуры в одном окне, щелкните на кнопке просмотра всего модуля. Несмотря на то, что вы поменяли название этой кнопки на Вра- щать, в программе ее имя осталось прежним (Commandl). Имя программы может не совпадать с ее названием. У каждого объекта может быть несколько ассоциированных с ним проце- дур, по одной для каждого связанного с этим объектом собы- тия. В данный момент нас интересует только событие «щелчок мышью», так как это единственное действие, доступное пользо- вателю при работе нашей программы. 3. Наберите приведенные ниже программные строки между ут- верждениями Private Sub и End Sub. После ввода каждой строки нажимайте клавишу Г Enter ]. Обратите внимание, что про- граммные утверждения должны быть набраны в точности так, как они приведены в тексте. Когда вы будете вводить длинные строки, окно кода будет автоматически прокручиваться влево. Если вы ошиблись, удалите некорректное утверждение (оно обычно выделено красным цветом) и повторите попытку. Примечание. Когда вы вводите программный код, Visual Basic форматирует текст и показывает различные элементы программы в цвете, чтобы помочь вам идентифицировать их. Когда вы начинаете набирать свойство, Visual Basic также показывает доступные свойства для объекта в спис- ке. Вы можете дважды щелкнуть на свойстве или набрать его вруч- ную. Если Visual Basic показывает сообщение об ошибке, возможно, программное утверждение набрано неверно. Сверьте строку с текстом в этой книге, внесите исправления и продолжайте набор. (Вы можете также удалить строку и набрать ее заново.) Для читателей предыду- щего издания это первое упражнение по набору кода программы ока- залось едва ли не самым сложным. Пожалуйста, будьте внимательны при наборе! Автор гарантирует, что программа работает!
66 Часть 1. Знакомство с Visual Basic Imagel .Visible = False ‘скрыть монеты Labell.Caption = lnt(Rnd * 10) ‘показать числа Label2.Caption = lnt(Rnd * 10) Label3.Caption = lnt(Rnd * 10) ' Если любое число равно 7, показать столбик монет и дать сигнал If (Labell.Caption = 7) Or (Label2.Caption = 7) Or (Label3.Caption = 7) Then Imagel .Visible = True Beep End If Когда вы закончите ввод, ваш экран будет выглядеть так, как показано на следующей иллюстрации. •й. Project! - Microsoft Visual Basic {design} - [Form! (CodeJJ Cornninnl I • J E3 "T * ' H & Project 1 (Project 1) S Forms BUI Query Bagram loots Add-Ins Window Fje'p > . » W Л Private Sub Conanandl_Click/) Imagel.Visible e Labell.Caption e Label2.Caption B Label3.Caption e ’ Если любое хдасло If (Labell.Caption False ’скрыть mohsik! Int(Rnd * 10) ‘показ* Int(Rnd * 10) ' Int(Rnd * 10) । равно 7„показать о тс 7) Or (Labe 12. С»! Imagel.Visible = True Beep End If End Sub Private Sub Command2_Click() End End Sub Private Sub Imagel_Click() End Sub Private Sub Forin_Load() ;-jcominand2 CommandButtor ;i3 Alphabetic jcatorjorceO | ^Oruhiai iu^. Т-'зЬ...... Appearance BackColor QaHSOOOOOvj rfRetuins/sets a <aiue that jderwmnes whether v cbje •. t pfg dt I I Взгляд на процедуру Command1_Click Процедура Command1_Click выполняется после щелчка пользователя на кнопке Вращать на форме. Процедура использует несколько достаточно сложных утверждений, которые формально еще не были введены. Одна- ко, присмотревшись внимательнее, вы, возможно, увидите кое-что зна- комое. Позже в этой книге мы вернемся к составлению программ, так что
Урок 2. Ваша первая программа 67 если сейчас вы не хотите в этом разбираться, переходите к разделу «Со- хранение программы». Процедура Command1_Click выполняет три задачи: скрывает столбик мо- нет, создает три случайных числа для вывода в окнах меток, показывает столбик монет при появлении числа. Рассмотрим каждый из этих шагов. Первая задача в процедуре выполняется строкой: I mage 1 .Visible = False 'скрыть монеты Эта строка состоит из двух частей: программного утверждения и коммен- тария. Программное утверждение (Imagel.Visible = False) устанавливает свойство Visible первого объекта «окно образа» (Imagel) ложным (False). Вы можете вспомнить, что уже устанавливали это свойство с помощью окна свойств. Сейчас вам приходится снова делать это в программном коде, так как первым выполняется вращение, и вы должны удалить рисунок, который мог остаться от предыдущей игры. Так как свойство будет ме- няться во время работы программы, а не во время ее разработки, оно дол- жно устанавливаться с помощью программного кода. Это удобная особен- ность Visual Basic, мы вернемся к ней в следующем уроке. Вторая часть первой строки (показанная на экране зеленым цветом) на- зывается комментарием. Комментарии - это пояснительные заметки, включенные в программный код после апострофа (“)• Программисты ис- пользуют комментарий для сообщения о роли утверждения в программе. Эти примечания Visual Basic не обрабатывает; они используются только как документация, сообщающая, что именно делает программа. Следующие три строки управляют вычислением случайных чисел. Фун- кция Rod в каждой строке создает случайное число между 0 и 1 (число с десятичной точкой), а функция lot умножает число на 10 и округляет его до ближайшего целого. Этими вычислениями создается случайное число от 0 до 9. Затем три случайных числа присваиваются названиям первых трех меток на форме, и после такого присвоения они появляются на экра- не шрифтом TimesNewRoman, кеглем 24. Последняя группа утверждений в программе проверяет, нет ли семерки среди данных случайных чисел. Если хоть одна семерка обнаруживает- ся, столбик монет делается видимым, и звуковой сигнал сообщает пользо- вателю о выигрыше. Каждый раз после щелчка на кнопке Вращать вызы- вается процедура Command1_Click и выполняются программные утверждения этой процедуры.
68 Часть 1. Знакомство с Visual Basic Сохранение программы Вы завершили работу над программой Счастливая семерка. Теперь нужно сохранить ее на диске. Visual Basic сохраняет код вашей формы и объек- тов в одном файле, а «список упаковки» компонентов проекта - в другом. Вы можете использовать эти файлы компонентов в других программных проектах с помощью команды Add File (Добавить файл) в меню проекта. Для сохранения программы в Visual Basic щелкните на команде Save Project As (Сохранить проект как) в меню File (Файл) или на кнопке Save Project (Со- хранить проект) на панели инструментов. Сохраните программу Счастливая семерка 1. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Появится диалоговое окно Save File As (Сохра- нение файла), подсказывающее имя и место для сохранения вашей формы. 2. В этом диалоговом окне выберите папку Less02, если она не выбрана. Файлы проекта вы будете сохранять в папке упраж- нений, созданной на вашем диске программой инсталляции файлов упражнений Visual Basic 6 Step By Step. (Если хотите, вы можете указать и другую папку.) 3. Наберите MyLucky в поле ввода File Name (Имя файла) и на- жмите клавишу | Enter |. Форма Счастливая семерка будет сохра- нена под именем MyLucky.frm. Затем появится диалоговое окно Save Project As (Сохранение проекта).
Урок 2. Ваша первая программа 69 Примечание. Мы советуем вам сохранять все проекты, которые вы будете созда- вать при работе с этой книгой, с именем, начинающимся буквами Му. Тем самым вы сохраните исходные файлы и в любой момент сможете обратиться к ним за справкой. 4. Наберите MyLucky и нажмите клавишу | Enter |. Проект Сча- стливая семерка будет записан под именем MyLucky.vbp. Чтобы загрузить зтот проект, щелкните на команде Open Project (Открыть проект) в меню File (Файл) и затем щелкните на име- ни файла MyLucky в диалоговом окне открытия проекта. Вы мо- жете также загрузить проект, с которым недавно работали, щелкнув на имени проекта в нижней части меню File (Файл). Программа Lucky располагается в папке \Vb6Sbs\LessO2. Поздравляем! Вы готовы запустить вашу первую самостоятельно состав- ленную программу. Для ее запуска щелкните на команде Start (Пуск) в меню Run (Выполнение) или на кнопке Start (Пуск) на панели инструмен- тов. Запустите программу MyLucky. Если Visual Basic выдаст сообщение об ошибке, возможно, вы допустили опечатку при наборе текста програм- мы. Запуск программы 1. Щелкните на кнопке Start (Пуск) на панели инструментов. . ► Программа MyLucky запустится в среде программирования Visual Basic. На экране появится разработанный вами про- граммный интерфейс. 2. Щелкните на кнопке Вращать. Программа выберет три слу- чайных числа и покажет их в метках на форме, как представ- лено на следующем рисунке.
70 Часть 1. Знакомство с Visual Basic Семерка появилась в первой метке, поэтому на экране возник столбик монет и вы услышали звуковой сигнал. Его характе- ристики определяются установками в панели управления. 3, Щелкайте на кнопке Вращать и следите за числами, появляю- щимися в числовых окнах. Ваши шансы на победу довольно высоки - 3 из 10. Позже мы покажем, как сделать игру более жесткой - так, чтобы выиг- рыш появлялся только при одновременном выпадении двух или трех семерок. (Для этого нам придется познакомиться с моду- лями и глобальными переменными, см. урок 10.) 4. Когда вам надоест экспериментировать с программой, щелк- ните на кнопке Конец. Программа завершит работу, и среда программирования Visual Basic вновь появится на вашем экране. Построение выполняемого файла В конце этого урока вы завершите разработку приложения для Windows, - создадите выполняемый файл. .ехе-файл может работать под Windows 95, Windows 98 или под WindowsNT Приложения для Windows, созданные с помощью Visual Basic, имеют рас- ширение имени файла .ехе и могут быть запущены на любой системе, если
Урок 2. Ваша первая программа 71 в ней установлены Windows 95, Windows 98, Windows NT 3.51 (или более поздней версии), а также необходимые файлы поддержки. (Visual Basic инсталлирует эти файлы поддержки - включающие динамически свя- занные библиотеки и настраиваемые элементы управления - автомати- чески). Для получения более подробной информации о распространении ваших приложений см. «Руководство программиста Visual Basic». Попробуйте создать файл MyLucky. ехе. Создайте выполняемый файл 1. В меню File щелкните на команде Маке MyLucky.exe. (Visual Basic добавляет имя вашей программы к команде автоматически.) Появится диалоговое окно Make Project, показанное на рисунке. Используйте кнопку Options для расширенных установок компилятора Диалоговое окно содержит текстовые окна и окна списков, ко- торые вы можете использовать для спецификации имени и местонахождения вашего выполняемого файла на диске. Оно также содержит кнопку Options, на которой вы щелкаете для открытия окна Project Properties (Свойства проекта). Это окно мож- но использовать для управления значком (пиктограммой) про- граммы и информацией о версии, связанной с файлом. По умол- чанию Visual Basic предлагает папку Less02 для размещения файла.
72 Часть 1. Знакомство с Visual Basic Совет. Диалоговое окно Project Properties (доступное из меню Project) содержит закладку Compile, которую вы можете использовать для управления расширенными возможностями, относящимися к компиляции вашей программы. Сюда включены методы оптимизации по быстродействию, эффективности кода, компактный код отладки и т.д. С добавлением этих мудрёных возможностей в процесс компиляции Visual Basic ста- новится профессиональным инструментом, таким же как Microsoft Visual C++. 2. Щелкните на ОК для подтверждения имени файла и его ме- стонахождения по умолчанию. Visual Basic создаст выполняе- мый файл на диске в указанном месте. Для запуска этой программы позже под Windows используйте команду Run (Выполнить) в главном меню или дважды щелк- ните на имени файла в Проводнике (Windows Explorer). Вы може- те также создать значок ярлыка для программы Счастливая се- мерка на рабочем столе Windows, щелкнув правой кнопкой на рабочем столе Windows, указав в контекстном меню на строку New. (Создать) и затем щелкнув на строке Shortcut (Ярлык). Когда Windows спросит вас о местонахождении вашего файла приложения, щелкните на кнопке Browse (Обзор) и выберите выполняемый файл Му Lucky в папке \Vb6Sbs\LessO2. Щелкните на кнопках Open (Открыть), Next (Дальше) и Finish (Закончить), и тогда Windows поместит на рабочий стол пиктограмму, по ко- торой вы можете дважды щелкнуть для запуска вашей про- граммы. Значок ярлыка будет выглядеть так, как изображено на рисунке. 3. В меню File (Файл) щелкните на команде Exit (Выход). Файл Му Lucky и программа Visual Basic будут закрыты. Шаг вперед: дополнение к программе Вы можете перезапустить Visual Basic в любое время и работать в про- граммном проекте, который вы сохранили на диске.
Урок 2. Ваша первая программа 73 Перезапустите Visual Basic и добавьте специальное утверждение, назы- ваемое Randomize (Фактор случайности), в программу Счастливая семерка. Перезагрузите Счастливую семерку. 1. Щелкните на кнопке Start (Пуск) на панели задач Windows, укажите на Programs (Программы), далее укажите на Visual Basic 6.0. 2. Щелкните на закладке Recent (Последний) в диалоговом окне Project (Проект). Появится перечень последних проектов, с ко- торыми вы работали. Поскольку вы только что закончили ра- боту с проектом Счастливая семерка, первым проектом в списке должен быть MyLucky. 3. Дважды щелкните на MyLucky для загрузки программы Счас- тливая семерка с диска. Программа Счастливая семерка загрузится с диска, и форма MyLucky появится в окне. (Если вы не видите ее, щелкните на MyLucky form (форме MyLucky) в окне Project и затем щелкните на кнопке View Object (Просмотр объекта). Теперь добавим утверждение Randomize в процедуру Form_Load (Загрузка формы), специальную процедуру, ассоциированную с формой и выполняющуюся каждый раз при запуске программы. 4. Дважды щелкните на форме (только не на одном из объек- тов) для показа процедуры Form_Load. Процедура Form_Load по- явится в окне кода, как показано на следующем рисунке.
74 Часть 1. Знакомство с Visual Basic 5. Нажмите пробел четыре раза, наберите Randomize и нажми- те клавишу Щ. Утверждение Randomize добавлено к программе и будет выпол- няться каждый раз при ее запуске. Randomize использует сис- темные часы для создания истинно случайной стартовой точ- ки, или «зерна» («семени») для утверждения Rnd, используемого в процедуре Commandl - Click. Вы, может быть, не обратили вни- мание, но без Randomize программа Счастливая семерка произво- дит одинаковые строки случайных чисел каждый раз при перезапуске программы. С правильно поставленным утверж- дением Randomize программа будет прокручивать числа случай- ным образом при каждом запуске. Числа уже не будут следо- вать по какой-либо схеме. 6. Запустите новую версию Счастливой семерки и затем сохрани- те проект на диске. Если вы планируете использовать новую версию в дальнейшем, вы можете также захотеть создать но- вый .ехе-файл. Visual Basic не обновляет выполняемый файл автоматически, когда вы меняете исходный код. Если вы хотите продолжить работу в следующем уроке: > не выходя из Visual Basic, перейдите к уроку 3. Если вы хотите выйти из Visual Basic: > в меню File (Файл) щелкните на Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Создать пользова- тельский интерфейс Используйте средства управления из панели инст- рументов для помещения объектов на вашу форму, и затем установите необходимые свойства. Измени- те размеры формы и объектов. Переместить объект Перетаскивайте объект по форме с помощью мыши. Изменить размеры объекта Выделите объект и затем тащите элемент выделе- ния, присоединенный к той части объекта, размеры которой вы хотите изменить.
Урок 2. Ваша первая программа 75 Чтобы Сделайте следующее Кнопка Удалить объект Выделите объект и затем нажмите [ Del |. Открыть окно кода Дважды щелкните на объекте из формы ая (или на самом объекте) или щелкните на ИМ) кнопке View Code (Просмотр кода) в окне Project, когда форма или имя модуля вы- делится в окне Project. Записать программный код Наберите программные утверждения Visual Basic, ассоциированные с объек- том, который вы хотите запрограммиро- вать, в окне Code. Сохранить программу В меню File щелкните на команде Save 'шя Project As... (Сохранить проект как...) или ЯМ щелкните кнопкой Save Project на панели инструментов. Создать .ехе-файл В меню File щелкните на Маке filename.exe Перезагрузить проект В меню File щелкните на команде Open Project (Открыть проект) или дважды щелкните на имени файла в закладке Recent (Последние) в диалоговом окне Project (Проект).

УРОК » _ я 3 ! я я я Работа со средствами управления я ж Я к ж ж я к ж я Вы научитесь: работать с объектами «текстовый блок» и «командная кнопка» и создадите программу «Здравствуй, Мир»; с помощью системных и графических объектов просмат- ривать графические изображения на диске; использовать объекты «кнопка опций», «окно сверки» и «список» для обработки пользовательского ввода; использовать OLE-объекты для запуска Windows-при- ложений; с помощью объектов данных просматривать записи в базе данных Microsoft Access; инсталлировать средства управления ActiveX. м Средства управления Visual Basic - это графические инст- " рументы для построения пользовательского интерфейса « программы. Средства управления находятся на панели ин- * струментов программирования. С их помощью вы в преды- * дущем уроке создавали объекты на форме. В этом уроке вы " научитесь выводить информацию в текстовом блоке, про- * сматривать диски и папки в системе, обрабатывать данные, м
78 Часть 1. Знакомство с Visual Basic вводимые пользователем, запускать Windows-приложения и просматри- вать записи баз данных. Вы начнете разрабатывать свои собственные при- ложения на Visual Basic, продолжите знакомство с программным кодом, объектами и их свойствами. Вы научитесь добавлять к инструментам средства управления ActiveX (известные также как управление OLE), что позволит вам существенно расширить функциональные возможности Visual Basic. Знакомство со средствами управления: программа «Здравствуй, Мир!» В книгах по программированию существует давняя традиция: начинать изучение языка с простейшей программы, выводящей на экран сообще- ние «Здравствуй, Мир!». На примере этой программы демонстрируются основы построения и запуска программ в данном языке программирова- ния. Во времена символьного программирования «Здравствуй, Мир!» представляла собой программу в две-три строки, которая набиралась в программном редакторе и затем переводилась в машинные коды отдель- ным компилятором. С приходом графического программирования «Здрав- ствуй, Мир!» разрослась в сложную программу с десятками строк, тре- бующую различных инструментов для ее конструирования. Теперь вместе с выводом сообщения «Здравствуй, Мир!» вы сконструируете в Visual Basic полный пользовательский интерфейс, создав два объекта, устано- вив для них два свойства и введя одну строку программного кода. Создание программы «Здравствуй, Мир!» 1. Запустите Visual Basic и создайте новое стандартное 32-би- товое приложение. Появится среда программирования Visual Basic. Ваш экран будет выглядеть так, как показано на следующем рисунке. В этом уроке вам понадобятся два средства управления: Text Box (Текстовый блок) и Command Button (Командная кнопка), поме- ченные на рисунке.
Урок 3. Работа со средствами управления 79 2. Щелкните на кнопке Text Box (Текстовый блок) на панели ин- струментов. 3. Переместите указатель мыши в центр формы. Указатель ста- нет крестообразным. Вычертите на форме текстовый блок, как показано на следующем рисунке.
80 Часть 1. Знакомство с Visual Basic Объект «текстовый блок» используется для вывода текста в форму или для приема вводимой пользователем информации при работе программы. То, как именно будет работать тексто- вый блок, зависит от установленных вами свойств этого блока и от способа обращения к нему в программном коде. В нашей программе объект «текстовый блок» будет использоваться для вывода сообщения «Здравствуй, Мир!» после щелчка на коман- дной кнопке или на форме. 4. Добавим командную кнопку. Щелкните на кнопке Command Button (Командная кнопка) на панели инструментов. 5. Поместите указатель мыши ниже текстового блока на форме и начертите командную кнопку. Ваш экран будет выглядеть так, как показано на следующем рисунке. Щелкая на командной кнопке, пользователь указывает, что определенное действие, связанное с этой кнопкой, должно быть совершено немедленно. В терминах Visual Basic пользователь, щелкая на кнопке, создает событие, которое нуждается в обра- ботке программой. Типичными командными кнопками являются кнопка ОК, подтверждающая выбор пользователем определен- ных опций или действий, кнопка Cancel (Отмена), отменяющая выбор пользователя, кнопка Quit (Выход), позволяющая прекра- тить работу программы. Характеристики командных кнопок можно изменять установ- кой свойств или обращением к объекту в программном коде. 6. Установите свойства для объектов «текстовый блок» и «ко- мандная кнопка» так, как показано в приведенной ниже табли-
Урок 3. Работа со средствами управления 81 це. Установка Empty (Пусто) означает, что вы должны удалить текущую установку и оставить свойство пустым. Более подробно об установке свойств см. в разделе урока 1 ((Установка свойств». Средство управления Свойство Установка Text 1 Text (Empty) Command 1 Caption OK Готовая программа Hello.vbp расположенана диске в папке \Vb6Sbs\ Less03. 7. Дважды щелкните по командной кнопке ОК и наберите сле- дующее программное утверждение между строками Private SuB и End Sub в окне Code: Textl.Text = "Здравствуй, Мир!" Совет. После того как вы ввели строку, Visual Basic покажет список, содер- жащий все допустимые свойства объектов «текстовый блок» на тот случай, если вы забыли полный перечень. Вы можете выбрать свой- ство из списка, дважды щелкнув по нему, или можете продолжать набор и ввести его самостоятельно. Утверждение, которое вы ввели, изменяет свойство Text тек- стового блока на «Здравствуй, Мир!», когда пользователь щел- кает на командной кнопке при работе программы. (Знак равен- ства присваивает все, что расположено между кавычками, свойству Text объекта Textl.) Этот пример изменения свойства при работе программы - одно из наиболее частых использова- ний программного кода в программе на Visual Basic. Так как утверждение есть процедура события, которая выполняется, когда щелкают по командной кнопке Command 1, установка свой- ства (и, следовательно, содержимое текстового блока) будет меняться непосредственно после пользовательского щелчка по командной кнопке. Используйте окно Form Layout (Формат формы) для установки позиции формы, когда программа работает. (Если окно Form Layout невидимо, щелкните на команде Form Layout Window в меню View.)
82 Часть 1. Знакомство с Visual Basic Воспользуйтесь окном формата формы (Form Layout) для управления по- ложением вашей формы при работе программы. По умолчанию окно формата формы помещает форму в верх- ний левый угол экрана, но вы можете настроить эту установку перетаскиванием крошечного значка формы внутри окна Form Layout (Формат формы). Эта возможность особенно полезна в программах, которые показывают более одного окна. Теперь вы готовы к запуску программы «Здравствуй, Мир!» и сохране- нию ее на диске. Запустите программу «Здравствуй, Мир!» 1. Щелкните по кнопке Start на панели инструментов. Программа «Здравствуй, Мир!» запустится в среде программиро- вания Visual Basic. 2. Щелкните по командной кнопке ОК. Программа выведет при- ветствие «Здравствуй, Мир!» в текстовом блоке, как показано на рисунке. После щелчка на командной кнопке ОК программный код из- менил свойство Text на «Здравствуй, Мир!», и текст «Здрав- ствуй, Мир!» был показан в блоке. Если вы не пришли к этому результату, повторите шаги предыдущего раздела «Создайте программу "Здравствуй, Мир!"» и постройте программу зано- во. Вы могли некорректно установить свойства или сделать ошибку в наборе программного кода. (Синтаксическая ошибка появляется на вашем экране текстом красного цвета.)
Урок 3. Работа со средствами управления 83 3. Щелкните на кнопке End (Конец) на панели инструментов для остановки программы. Для остановки программы вы также можете щелкнуть на кноп- ке Close (Закрыть) в форме. 4. В меню File щелкните на команде Save Project As. 5. Выберите папку \Vb6Sbs\ Less03, наберите Му Hello и щелкни- те Save (Сохранить). Visual Basic сохранит вашу форму на дис- ке под именем Му Hello.frm. Visual Basic хранит форму отдельно от файла проекта, так что вы сможете использовать форму и процедуры в будущих про- граммных проектах без построения их заново. После того как вы ввели имя формы, появится имя файла про- екта (это файл, который Visual Basic использует для построе- ния вашей программы). Файл проекта имеет расширение .vbp. 6. Наберите Му Hello снова и щелкните Save (Сохранить). Visual Basic сохранит ваш проект на диске под именем Му Hello.vbp. Чтобы открыть программу, вы щелкнете на команде Open Project в меню File (Файл) и выберете этот файл. Тогда Visual Basic заг- рузит файлы из списка проекта. Поздравляем! Вы вступили в ряды программистов, которые имеют напи- санную программу «Здравствуй, Мир!». Теперь приступим к другим объектам. Использование объектов файловой системы Visual Basic предлагает три очень полезных объекта для предоставления доступа к файловой системе. Это списки дисковых накопителей, которые позволяют вам пролистывать доступные диски в системе; списки дирек- торий, которые позволяют вам ориентироваться в папках на выбранном диске, и списки файлов, позволяющие вам выбрать нужный файл в пап- ке. В следующем упражнении вы используете три объекта файловой си- стемы для построения программы, называемой Browser (Просмотр), кото- рая обнаруживает и показывает файлы, содержащие картинки.
84 Часть 1. Знакомство с Visual Basic Примечание. В этой программе вы также используете графический объект. Гра- фический объект может работать с шестью графическими формата- ми: битовыми (.bmp-файлы), метафайлами Windows (.wmf-файлы, яв- ляющиеся файлами электронных картинок, размеры которых вы можете менять), пиктограммами (.ico-файлы), курсорами (.сиг-фай- лы), форматом JPEG (.jpg-файлы) и форматом GIF (.gif-файлы). Программа Browser Программа Browser использует три объекта файловой системы, графичес- кий объект и несколько строк программного кода для создания програм- мы просмотра картинок. Эту программу вы сможете использовать в сво- ей повседневной работе для просмотра картинок на любых гибких и жестких дисках, сетевых дисках или CD-ROM. Объекты файловой сис- темы поддерживают все типы дисководов. Постройте программу Browser 1. В меню File (Файл) щелкните на строке New Project (Новый про- ект), затем щелкните на ОК для создания нового стандартного выполняемого файла. Программа «Здравствуй, Мир!» пропадет, и на экране появится чистая форма. Вы можете сохранить все несохраненные изме- нения в программе «Здравствуй, Мир!» перед ее закрытием. 2. В меню Tools (Инструменты) щелкните на команде Options (На- стройка) и затем щелкните на вкладке Editor (Редактор). Если в окне Require Variable Declaration (Объявление требуемых перемен- ных) появится галочка, щелкните на окне, чтобы убрать ее (эта опция будет обсуждаться в уроке 4). Щелкните на ОК. 3. Увеличьте размер вашей формы так, чтобы в нем помести- лись средства управления файловой системой и окно для ото- бражения картинок. Вокруг вашей формы появятся полосы прокрутки. __ 4. Щелкните на кнопке DriveListBox (Список дисководов) в пане- G3 | ли инструментов. 5. Поместите указатель мыши в левый верхний угол формы и начертите окно списка дисководов, как показано на следующем рисунке.
Урок 3. Работа со средствами управления 85 Visual Basic включает текущий диск и метку тома в объект, ког- да вы создаете его. Эта информация выводится, чтобы помочь пользователю идентифицировать выбранный дисковод, а так- же позволяет видеть информацию во время разработки, чтобы вы могли корректно установить размер объекта. Если вы не видите всю информацию о диске и метке тома, измените раз- мер вашего окна списка дисководов. 6. Щелкните на кнопке Di г ListBox (Список директорий) в панели инструментов и затем добавьте окно списка директорий в фор- му под списком дисководов. Оставьте место примерно для че- тырех-пяти папок в окне списка. Объект «Список директорий» обеспечивает доступ к папкам файловой системы. Когда вы поместите объект на форму Visual Basic, папки будут располагаться в том же порядке, что и при запуске программы. Теперь есть соблазн начать щелкать на папках, но, так как окно списка не активно, ничего не произой- дет. Папки появились сейчас только для того, чтобы вы могли выставить нужный размер объекта. 7. Щелкните на кнопке FileListBox (Список файлов) в панели ин- струментов и добавьте окно списка файлов в форму под спис- ком директорий. Отведите место для отображения четырех- пяти имен файлов. Объект «Список файлов» позволяет пользователю выбирать файл в файловой системе. Когда пользователь выбирает файл, Visual Basic помещает имя файла в свойство Filename (Имя фай- ла) объекта «Список файлов». Аналогичным образом свойство Drive (Диск) объекта «Список дисководов» и свойство Path (Путь)
86 Часть 1. Знакомство с Visual Basic объекта «Список директорий» принимают имена диска и пап- ки, выбранных пользователем в окнах списков дисководов и директорий. Вы используете эти три свойства вместе с програм- мой Browser для открытия файла картинки, выбранного пользователем. Это типичное использование объектов и свойств в программе. Пользователь изменяет установку в объекте при работе программы; изменение отражается в свойстве, а свой- ство обрабатывается программным кодом. Примечание. Свойства Drive, Path и Filename доступны только при работе программы. (Они содержат величины, которые присваиваются при использова- нии окон списков файловой системы.) Вы не можете устанавливать их с помощью окна свойств (Properties). 8. Щелкните на кнопке Image (Рисунок) на панели инструмен- тов. Добавьте окно рисунка справа от окон списков дисководов, директорий и файлов. Ваш экран будет выглядеть так, как по- казано на рисунке. 9. Теперь в окне Properties установите следующие свойства. Объект Свойство Установка Filel Pattern Imagel Stretch Imagel BorderStyle *.bmp; *.wmf; *.ico True 1 - Fixed Single Установка «pattern» в списке файлов в данном случае особен- но важна. Она перечисляет допустимые графические форма- ты, которые Visual Basic может отображать в программе в окне
Урок 3. Работа со средствами управления 87 рисунка. Если это свойство оставить пустым, в окне списка файлов будут перечислены все типы файлов, имеющиеся в пап- ке. Если затем пользователь выберет графический формат, ко- торый Visual Basic не поддерживает (например, TIFF), то это приведет к сбою системы или ошибке в работе программы. Та- кие проблемы по возможности следует исключать до их воз- никновения. Теперь добавим несколько строк программного кода к проце- дурам, связанным с объектами файловой системы. Эти проце- дуры называются процедурами событий, поскольку они запус- каются после того, как в объекте происходит некое событие (например, щелчок мышью). 10. Дважды щелкните на объекте «список дисководов» в фор- ме, а затем в процедуре события Drivel_Change наберите между строками Private Sub и End Sub следующее программное утверж- дение: Dir1 .Path = Drivel.Drive Дважды щелкните на объекте, чтобы увидеть его процедуру события по умолчанию. Это утверждение обновляет свойство Path в списке директорий после того, как пользователь выберет диск в списке дисково- дов. Утверждение сцепляет два объекта вместе, так что список директорий перечисляет папки для нужного диска. 11. Закройте окно программного кода (щелкните на кнопке Close в правом верхнем углу), затем дважды щелкните на списке директорий в форме и добавьте следующее программное ут- верждение к процедуре события Dir1 _Change: Filel .Path = Dir1 .Path Это утверждение связывает список файлов со списком дирек- торий, так что файлы в списке соответствуют выбранной пап- ке. 12. Закройте окно программного кода, затем дважды щелкните на списке файлов на форме и добавьте следующий код к про- цедуре события Filel _Click: SelectedFile = Filel .Path & 'V & Filel .Filename Imagel.Picture = LoadPicture(SelectedFile)
88 Часть 1. Знакомство с Visual Basic Эти две строки - сердце программы. Первая строка использу- ет оператор & для комбинирования свойств Path объекта Filel с символом \и свойством Filename и затем сохраняет результиру- ющее имя пути в переменной SelectedFile. Переменная — это про- странство для временного хранения информации в программе. В данном случае переменная SelectedFile хранит полное имя фай- ла, выбранное пользователем (включая имена диска и папки). Следующее утверждение в процедуре события использует пе- ременную SelectedFile при загрузке файла в окно рисунка (Imagel) в форме с помощью функции LoadPicture и свойства Picture. После того, как вы ввели код для процедуры события Filel _Click, окно кода должно выглядеть так, как показано на рисунке. Ж Pioject! - Form! (Code) Filel Private Sub Dirl_Change() Filel.Path = Dirl.Path End Sub Private Sub Drivel_Change() Dirl.Path = Drivel.Drive End Sub Private Sub Filel_Click() SelectedFile = Filel.Path £ " £ Filel.Fi Imagel.Picture = LoadPicture(SelectedFile) End Sub <п Готовая программа Browser.vbp находится на диске в папке \Vb6Sbs\LessO3. Теперь можно запустить программу Browser и записать ее на диск. Запустите программу Browser ► 1. Щелкните на кнопке Start на панели инструментов. Программа Browser начнет работать в среде программирования Visual Basic.
Урок 3. Работа со средствами управления 89 2. Откройте папку \Vb6Sbs\LessO3 с помощью списка директорий. В окне списка файлов появятся Windows-метафайлы из выб- ранной папки. 3. Щелкните на имени файла answmach.wmf. Выбранный файл (изображение переговорного устройства) появится в графичес- ком окне. Ваш экран будет выглядеть так, как показано на ри- сунке. 4. Прокрутите список и щелкните на имени файла poundbag.wmf. В окне появится изображение мешка с английскими монетами. 5. Используйте окна списков дисков, директорий и файлов для просмотра других битовых карт, метафайлов Windows и пик- тограмм в вашей системе. Вы можете найти несколько любопытных битовых изображе- ний в папке \Windows. Когда вы закончите экспериментировать с программой Browser, остановите ее работу и сохраните эту программу на диске. 6. Щелкните на кнопке Close на форме. 7. В меню File (Файл) щелкните на команде Project As (Сохранить проект как...). Сохраните форму и проект под именем Му Browser. Почему эта программа «рухнула»? Если вы успели поработать с программой Browser, то могли заметить, что она вызывает ошибку во время работы или вообще «рушится» в двух спе- цифических ситуациях. Мы создавали программу для демонстрационных целей и не добавили код, позволяющий защитить программу при некор-
90 Часть 1. Знакомство с Visual Basic ректных обращениях. Когда вы начнете писать настоящие программы, то, конечно, будете тестировать их, пока не убедитесь, что они работают корректно во всех возможных ситуациях. Первая причина, по которой может «рухнуть» программа Browser - обра- щение пользователя к дисководу, в котором нет диска, или к устройству, которое не готово к работе. (Например, не готовы к работе дисковод с не- отформатированным флоппи-диском или сетевой диск в режиме offline.) Убедитесь, что в дисководе А нет дискеты, и в списке дисководов в про- грамме Browser выберите А:. Программа тотчас же остановится, и Visual Basic выдаст сообщение «Run-time error ‘68’: device unavailable» (Ошибка фун- кционирования «68»: устройство недоступно). Это утверждение означа- ет, что Visual Basic не смог найти гибкий диск и прекратил работу про- граммы. Программа Browser полагает, что пользователь не будет ошибаться при обращении к дискам - видимо, это не самое мудрое предположение. Вторая проблема возникает при просмотре папок, расположенных в кор- невой папке. Полные имена файлов в корневой папке начинаются с об- ратного слэша "\", поэтому программное утверждение SelectedFile = Filel.Path & 'V Filel.Filename вызовет сообщение об ошибке, т.к. создаст путь, начинающийся с двух обратных слэшей "\\". Например, файл с именем Truck.wmf будет описан как WTruck.wmf. Попытка загрузить файл с таким именем вызовет ошибку функционирования и приведет к остановке программы. Для решения этих проблем надо составлять программные утверждения так, чтобы предотвращать условия возникновения ошибок, или специаль- ной подпрограммой вызвать обработчик ошибок. Обработка ошибок вы- ходит за рамки нашей книги, а здесь заметим только, что фантазия пользо- вателей воистину безгранична, и ни в одной программе пока не удалось предусмотреть все возможные случаи. Отслеживанию ошибок в програм- мах посвящены уроки 6 и 8. Объекты для ввода смешанной информации В Visual Basic существует несколько объектов для ввода информации. Текстовые блоки позволяют вводить набираемые символы, меню предос-
Урок 3. Работа со средствами управления 91 тавляют списки команд, на которых можно щелкать мышью, в диалого- вых окнах содержатся элементы, которые можно выбирать поодиночке или группой. В этом упражнении вы научитесь использовать четыре объекта, позво- ляющие вам организовать ввод практически во всех ситуациях. Вы по- знакомитесь с такими объектами, как командные кнопки, контрольные блоки, списки, смешанные блоки. Вы познакомитесь с этими объектами на примере программы Online Shopper. Это пользовательский интерфейс для Internet-приложения, который позволит вам заказывать компьютеры и офисное оборудование по Internet. Программа Online Shopper Программа Online Shopper имитирует ситуацию заказа электронного обо- рудования. Если вы занимаетесь бизнесом, то можете попробовать расширить эту программу, создав комплексную графическую оболочку для ввода зака- зов. (Подобные графические инструменты очень популярны в WWW.) После запуска программы Online Shopper обратите внимание на то, как ра- ботают кнопки, команды, списки и т.д. Они легко и просто создаются с помощью Visual Basic. Запуск программы Online Shopper 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project (Открытие про- екта). 2. Откройте файл Online.vbp в папке \Vb6Sbs\LessO3. 3. В окне проекта выберите форму Online и щелкните на кнопке View Object (Просмотр объекта). 4. Закройте окна Properties, Project, Form Layout и Immediate (данные инструменты в этом уроке вам не потребуются), чтобы видеть на экране большую часть формы Online Shopper (Покупатель). Ваш экран будет выглядеть так, как показано на рисунке.
92 Часть 1. Знакомство с Visual Basic >ii Online Shopper Покупатель • • Выберите товары для вашего офиса с пвглощью кнопок. ; : еыбооа, контрольных блокое и списка. Компьютеры Г PC Mac Ноутбук - Офисное оборудование (D-3J- Г" Автоответчик < Г" Калькулятор т- Копировальная ; 1 машина 1 Периферийное еборзаоеание Listl |Способ платежа Выход J г- । Форма Online Shopper (Покупатель) содержит кнопку опций, кон- трольный блок, список, смешанный блок, графические окна, командную кнопку и объекты меток. На примере этой програм- мы мы покажем, как работают объекты ввода в Visual Basic. После запуска программа форма Online Shopper загружает мета- файлы Windows из папки/Vb6Sbs/LessO3 и показывает их в шес- ти окнах на форме. (Примечание. Если файлы упражнений на вашей машине инсталлированы не в пап- ку, установленную по умолчанию (это папка C:/Vb6Sbs), то программ- ное утверждение, загружающее рисунки с диска, обнаружит некор- ректное имя пути файлов. (Это утверждение начинается с пути C:/Vb6Sbs/LessO3, как вы увидите позже.) Чтобы справиться с этой про- блемой, измените название папки упражнений на Vb6Sbs или изме- ните пути в окне программного кода. 5. Щелкните на кнопке Start на панели инструментов. Програм- ма запустится. 6. Щелкните на кнопке опции Ноутбук в окне Компьютеры. В обла- сти Заказанные продукты в правой части формы появится изобра- жение портативного компьютера. В окне Компьютеры группа кно-
Урок 3. Работа со средствами управления 93 пок выбора используется для смешанного ввода информации. Кнопки выбора требуют от пользователя указать один, и толь- ко один пункт из списка возможных. Пользователь может щел- кать по кнопкам выбора повторно, изменяя свое решение. Пос- ле каждого щелчка текущий выбор графически отображается в области заказа (справа на форме). Кнопки выбора позволяют указать один, и только один пункт из спис- ка возможных. 7. Щелкните на контрольных блоках Автоответчик, Калькулятор и Копировальная машина в окне Офисное оборудование. Контрольные блоки позволяют выбрать любое количество пунктов. Контрольные блоки используются в программе в том случае, если из списка можно выбрать несколько возможностей одно- временно. Щелкните на контрольном блоке Калькулятор. Обрати- те внимание, что изображение калькулятора пропало из облас- ти заказа. Каждый элемент пользовательского интерфейса реагирует на события немедленно после их совершения, поэто- му выбранные заказы сразу же отображаются в области заказа. 8. Щелкните на контрольном блоке Спутниковая антенна в списке Периферийное оборудование. В области заказа появится изобра- жение антенны. Список используют для получения единствен- ного ответа от пользователя из списка выбора. Окна списков могут отображать много пунктов выбора (если список длиннее, чем окно списка, появляются полосы прокрутки) и, в отличие от кнопок выбора, выбор по умолчанию в них не требуется. В Visual Basic-программе пункты могут быть добавлены в окне списка, удалены из него или отсортированы при работе про- граммы. Список используют для получения единственного ответа от пользова- теля из списка выбора. 9. Теперь выберите Доллары U.S. из платежного списка в сме- шанном блоке Способ платежа. Смешанные блоки занимают меньше места в окне списка. Смешанный блок, или ниспадающий список - такой же, как и обычный список. Он занимает меньше места. Visual Basic авто- матически управляет открытием, закрытием и прокруткой окна такого списка. Все, что требуется от вас как от программиста —
94 Часть 1. Знакомство с Visual Basic создать программный код для добавления пунктов в список перед запуском программы и для обработки пользовательско- го выбора. После того, как вы сделали заказ, ваш экран должен выгля- деть так, как показано на рисунке. 10. Внесите изменения в список заказа в программе (попытай- тесь выбрать различные компьютеры, периферию и способы платежа), а затем щелкните на кнопке Выход для завершения работы программы. Программа закроется, и вы окажетесь в среде программирова- ния. Просмотр программного кода «Online Shopper» Возможно, ваш опыт программирования еще недостаточен. Мы настоя- тельно рекомендуем вам обратить внимание на некоторые процедуры событий в программе Online Shopper, чтобы понять, как происходит обра- ботка информации, введенной пользователем. Вы познакомитесь с про- граммными утверждениями If...Then и Select Case. Эти и другие структуры более подробно будут анализироваться в уроке 6. А сейчас обратите осо- бое внимание на свойство Value, которое изменяется при выборе конт- рольного блока, и свойство Index, изменяющееся при выборе окна списка.
Урок 3. Работа со средствами управления 95 Коды контрольного блока и окна списка 1. Убедитесь, что программа остановлена, и дважды щелкните на контрольном блоке Автоответчик в окне Офисное оборудование. Процедура события Check1_Click будет показана в окне кода. 2. Измените размеры окна кода. Вы увидите следующий про- граммный код. Private Sub Check1_Click() If Checkl .Value = 1 Then Image2.Picture = _ Load Picture("C:\Vb6SBS\LessO3\answmach.wmf") lmage2.Visible = True Else Image2.Visible = False End If End Sub В программном коде символ подчеркивания (_) в конце строки означа- ет, что утверждение продолжается на следующей строке. Процедура события Check1_Click содержит программный код, ко- торый запускается, когда пользователь щелкает на контрольном блоке Автоответчик в программе. Важное ключевое слово здесь — Checkl .Value, которое должно быть прочитано как «свойство Value (величина) первого объекта "контрольный блок"». Checkl - это имя первого контрольного блока, созданного на форме. Последующие контрольные блоки будут называться Check2, Check3, Check4. Свой- ство Value — это свойство, которое изменяется после того, как пользователь щелкает по контрольному блоку. Когда в конт- рольном блоке появляется контрольный значок (х), свойство Value устанавливается равным 1; если контрольный блок пустой, свой- ство Value устанавливается равным 0. Свойство Value может быть установлено либо с помощью окна свойств при разработке контрольного блока (в этом случае кон- трольный блок будет содержать установку по умолчанию), либо будет изменяться пользователем после запуска программы. В приведенном выше коде свойство Value оценивается структу- рой принятия решения If.Jhen...Else. Если свойство установле- но в 1, программа загружает изображение во второе окно ри- сунка на форме и делает его видимым. В противном случае изображение остается скрытым. О структуре принятия реше- ния говорится в уроке 6.
96 Часть 1. Знакомство с Visual Basic 3. Закройте окно File (Файл) и дважды щелкните на окне списка Периферийное оборудование на форме. В окне кода появится процедура события List1_Click. Она содер- жит следующие утверждения. Private Sub List1_Click() Select Case Listl.Listindex Case 0 Image3.Picture = _ Load Picture("C:\Vb6SBS\LessO3\harddisk.wmf") Case 1 Image3.Picture = _ Load Picture("C:\Vb6SBS\LessO3\printer.wmf") lmage2.Visible = True Case 2 Image3.Picture = _ Load Picture("C:\Vb6SBS\LessO3\satedish.wmf") End Select ImageS.Visible = True End Sub Этот код выполняется после того, как пользователь щелкнет на пункте списка Периферийное оборудование в программе. В дан- ном случае важным ключевым словом является Listl.Listindex, которое читается как «свойство Listl .Listindex объекта "первое окно списка"». После того как пользователь щелкнет на пункте списка, свойство Listl.Listindex возвращает число, которое соот- ветствует позиции пункта в списке. (Первый пункт имеет но- мер 0, второй - 1 и т.д.) Когда пользователь щелкает на пункте в списке, Visual Basic возвраща- ет имя пункта в программу, в свойство Listl .Text. Актуальный текст выбранного пункта (имя пункта в списке) также возвращается в свойство Listl .Тext, и программисты Visual Basic часто используют это значение в своих программах. В приведенном выше коде Listl .Listindex оценивается структурой принятия решений SelectCase и, в зависимости от значений свой- ства Listindex, загружаются различные метафайлы Windows. Если значение равно 0, загружается изображение жесткого диска, если значение равно 1, загружается изображение прин- тера, если значение равно 2, загружается изображение спут-
Урок 3. Работа со средствами управления 97 никовой антенны. О структуре принятия решений Select Case мы будем говорить в уроке 6. Немного о терминологии Средство управления — это инструмент, который используется для создания объектов на форме. Средства управления вы выбираете на панели инструментов, а затем с помощью мыши вычерчиваете объек- ты на форме. Средства управления позволяют создавать такие эле- менты пользовательского интерфейса, как командные кнопки, окна рисунков и списки. Объект. Объектом мы будем называть элемент пользовательского ин- терфейса, который создается на форме Visual Basic с помощью средств управления. Вы можете перемещать объекты, изменять их размеры и настраивать их, используя установки свойств. Объектам присуща функциональность - они действуют определенным образом и могут откликнуться на определенные ситуации. (Окно списка, например, «знает», как прокручиваться.) Вы можете программировать объекты Visual Basic с помощью процедур событий, которые настраиваются для различных ситуаций в программе. В Visual Basic сама форма так- же является объектом. Свойство — это величина или характеристика, присущая объекту Visual Basic, например, название или цвет текста. Средства могут ус- танавливаться как во время работы программы, так и с помощью про- граммного кода. В коде существует определенный формат для уста- новки свойства. Объект.Свойство = Значение Здесь Объект - это имя настраиваемого объекта, Свойство - это харак- теристика, которую вы собираетесь изменить, Значение - это новая ус- тановка свойства. Например, строка Commandl.Caption = “Привет" используется в программе для установки свойства Caption объекта Commandl в «Привет». Процедура события — это часть кода, которая выполняется при ма- нипуляции объектом в программе. Например, после щелчка на пер- вой командной кнопке в программе выполняется процедура события Command1_Click. Процедура события обычно оценивает и устанавлива-
98 Часть 1. Знакомство с Visual Basic ет свойства, а также использует другие программные элементы для выполнения работы программы. Программное утверждение - это ключевое слово в коде, благодаря которому осуществляется работа программы. Программные утверж- дения Visual Basic создают пространство для хранения данных, от; крывают файлы, выполняют вычисления и решают другие важные задачи. Переменная ~ это специальное хранилище для временного содержа- ния данных в программе. Программист создает переменные для хра- нения результатов вычислений, создания имен файлов, обработки ввода и т.д. Имена, числа и значения свойств могут храниться в пере- менных. I Метод - это специальное утверждение, которое выполняет действие I или обслуживает отдельный объект в программе. В программном коде нотация (шаблон) для использования метода выглядит так: Объект.Метод=Значение Объект — это имя объекта, который вы хотите изменить; метод - команда, которую вы хотите использовать для изменения объекта; значение — это необязательный аргумент, используемый методом. Например, утверждение Listl .Additem "Чек" использует метод Additem для вывода слова «Чек» в окно списка Listl. 4. Закройте окно кода и дважды щелкните на форме (обязатель- но на объекте), чтобы увидеть код, ассоциированный с самой формой. Утверждение в процедуре события Form_Load запускается в момент за- пуска программы. В окне кода появится процедура события Form_Load. Это проце- дура, которая выполняется каждый раз при запуске или заг- рузке программы Online Shopper. Программисты помещают ут- верждения в этой специальной процедуре, когда хотят, чтобы утверждения выполнялись каждый раз при запуске програм- мы.
Урок 3, Работа со средствами управления 99 Часто, как в случае программы Online Shopper, утверждения оп- ределяют те стороны пользовательского интерфейса, которые не могут быть созданы с помощью средств управления панели инструментов или окна свойств. Код Form_Load следующий. Imagel.Picture = LoadPicture("c:\vb6sbs\less03\pcomputr.wmf") Listl .Additem "Системный блок" Listl .Additem “Принтер” Listl .Additem "Спутниковая антенна" Combol .Additem "Доллары U.S.1' Combol .Additem "Чек" Combol .Additem "Английские фунты” Первая строка загружает метафайл Windows с изображением персонального компьютера в первое окно абзаца. Это установ- ка по умолчанию, отражающая значение кнопки опций Компь- ютеры. Следующие три строки добавляют пункты в список Пе- риферийное оборудование (Listl) в программе. Слова в кавычках появятся в списке, когда этот список появится в форме. Под программными утверждениями для списка находятся пункты для смешанного блока Payment Method (Combol). Важное ключе- вое слово в обеих группах - это Additem, которое является спе- циальной функцией или методом для объектов «окно списка» и «смешанный блок». Методы - это специальные утверждения, которые выполня- ют действие или обслуживание для отдельного объекта, такое как добавление пункта в список. Методы отличаются от свойств, которые содержат значения, и от процедур событий, которые выполняются, когда пользователь манипулирует объектом. Методы могут также разделяться между объектами, так что, когда вы научитесь использовать один метод, то можете при- менять его и в других обстоятельствах. В этой книге вы освоите работу с несколькими важными методами. Итак, вы закончили работу с программой Online Shopper. Уделите несколь- ко минут знакомству с другими частями программы и переходите к сле- дующему упражнению. Использование OLE-объектов Для запуска приложений OLE-объект позволяет запускать приложения для Windows из прило- жения Visual Basic.
100 Часть 1. Знакомство с Visual Basic Одна из наиболее волнующих особенностей Visual Basic - это его способ- ность работать с другими приложениями, пока ваша программа работает. Вы можете использовать OLE-объект для запуска отдельных компонен- тов других приложений (таких как проверка орфографии в Microsoft Word) с помощью специальной технологии, называемой Automation (прежде она называлась OLE-автоматикой). Мы детально обсудим OLE-объекты и Автоматику в уроке 14. В следую- щем упражнении мы рассмотрим, как работает OLE-объект и как он мо- жет быть использован (без программного кода) для создания приложе- ния Примерная оценка, который запускает документы Microsoft Word, Microsoft Excel и Microsoft Paint, так что пользователь может вводить и сравнивать информацию и размещать рисунки для своего проекта. Для запуска приложения Примерная оценка вам понадобятся Word, Excel и Paint, установленные на жестком диске (Paint входит в состав Microsoft Windows). Когда вы впервые создаете OLE-объект, появляется диалого- вое окно Insert Object (Вставка объекта), перечисляющее доступные объек- ты-приложения, которые вы можете использовать в вашей программе. Если у вас на жестком диске нет Word, Excel или Paint, диалоговое окно не будет их перечислять, но вместо них вы можете выбрать другие объек- ты. В этом упражнении вы попрактикуетесь в запуске приложений из программы Visual Basic. Завершенная утилита, когда вы ее запустите, будет выглядеть следующим образом: Примерная оценка Эта конструкция позволяет использовать любые возможности Word. Excel или Смета Вычисления Рисунки Document Wotksheet Bitmap Inage Выход
Урок 3. Работа со средствами управления 101 Создайте программу Примерная оценка 1. В меню File щелкните на строке New Project и затем щелкните на кнопке ОК для создания стандартного .ехе-файла. Програм- ма Online Shopper закроется, и в среде программирования по- явится новая форма. 2. В левом верхнем углу формы создайте метку с названием «Примерная оценка». Под меткой создайте вторую метку с на- званием «Эта конструкция позволяет использовать любые воз- можности Word, Excel или Paint». Оставьте дополнительное свободное место в первой метке — позже, при установке свойств, вы увеличите кегль названия. 3. Под второй меткой, размещенной по всей ширине формы (см. рис. на предыдущей странице) создайте три дополнительные мет- ки с названиями «Смета», «Вычисления» и «Рисунки». Эти метки будут использоваться для идентификации OLE-объектов, исполь- зуемых для запуска Word, Excel и Paint-приложений соответ- ственно. Теперь добавьте объекты на форму. 4. Щелкните на кнопке OLE в панели инструментов. 5. Под меткой Смета создайте прямоугольник размером пример- но со спичечный коробок с помощью кнопки управления OLE. Когда вы отпустите кнопку мыши, Visual Basic откроет диало- говое окно Insert Object (Вставка объекта), содержащее список объектов-приложений, которые вы можете использовать в ва- шей программе. Точный перечень будет изменяться от систе- мы к системе. In erf Object OK Cancel <! CreateMew Г Create from Fife Bitmap Image Object Lipe. . jAVSources Class BoxEdit Class Calendar Control 8.0 merit Kodak Image Scan Ltd Runtime Control Media Clip Щелкните здесь для показа OLE-объекта в виде пиктограммы '' ___ Inserts a new Bitmap Image object into vour .doa»**-
102 Часть 1. Знакомство с Visual Basic 6. Прокрутите вниз список объектов и щелкните на объекте Microsoft Word Document, если на вашем компьютере установлен Word для Windows. Если у вас нет Word для Windows, выберите в диалоговом окне более раннюю версию Word, другой текстовый процессор для Windows или аналогичное приложение. 7. Щелкните на контрольном блоке Display As Icon (Показать в виде пиктограммы) в диалоговом окне Insert Object так, чтобы приложение появилось в вашей Visual Basic-программе в виде значка. Если вы не щелкнете на этом контрольном блоке, объект-при- ложение (обычно - документ) будет показан в вашем прило- жении в окне. Позже вы еще оцените удобство этой возможно- сти, а теперь все же щелкните на Display As icon. 8. Щелкните на ОК, чтобы закрыть диалоговое окно Insert Object и открыть Word. Word откроет в окне чистую форму текстового документа. Этот документ станет шаблоном в программе Примерная оценка. Он должен содержать полезную информацию, например, сведе- ния о компании, имена, адреса, цены, материалы и пр. 9. Теперь наберите Оценка затрат. Затем используйте команду Date and time (Дата и время) в меню Insert (Вставка) для добавле- ния сегодняшней даты и времени в шаблон. Текст в документе Word после запуска программы будет выг- лядеть именно так, как вы указали в шаблоне. 10. В меню File программы Word щелкните на команде Exit. Если возникнет диалоговое окно с запросом, не хотите ли вы обновить исходный документ, щелкните на кнопке Yes (Да). Вы будете получать эту подсказку при закрытии каждого объек- та-приложения. Когда вы закончите работу с первым объектом, ваша форма должна выглядеть так, как изображено на рисунке. Измените размеры объекта или метки, если какой-либо текст скрыт от просмотра.
Урок 3. Работа со средствами управления 103 * Form1 Примерная оценки Эта конструкция позволяет использовать любые во знойности Word. Excel или Смета Вычисления Рисунки Document Примечание. Трехмерность OLE-объекта управляется свойством Appearance (Вид), имеющим установки 3D и Flat (Плоский). В шаге 13 вы установите свой- ство Appearance каждого OLE-объекта как Flat, а свойство BackColor (Цвет фона) каждого OLE-объекта в ligt gray (светло-серый), чтобы сделать объект более подходящим форме по цвету. 11. Повторите шаги с 4 по 10, чтобы добавить на форму объект Microsoft Excel Worksheet (или его эквивалент) под меткой Вычисле- ния, а также битовый рисунок под меткой Рисунки. Убедитесь, что вы оба раза щелкнули по контрольному блоку Display As Icon в диалоговом окне Insert Object и добавьте какую- нибудь шаблонную информацию (такую, как примечания или инструкции) на рабочий лист Excel и на «холст» Paint, если вы привыкли пользоваться этими программами. На рабочем лис- те Excel легко представить несколько строк и столбцов инфор- мации, например, о ценах материала, краски и работы. Красо- та использования других Windows-приложений в вашей программе состоит в том, что у вас автоматически есть доступ ко всем возможностям этих приложений - вам нет нужды за- ново изобретать колесо!
104 Часть 1. Знакомство с Visual Basic 12. Поместите командную кнопку в нижней части формы. Пос- ле того, как вы добавили кнопку, дважды щелкните на этом объекте и наберите утверждение End в процедуре события Command1_Click. Программное утверждение End закроет програм- му, когда пользователь закончит ее использование. 13. Установите следующее свойство для объектов на форме с помощью окна Properties (Свойства): Объект Свойство Установка Command 1 Caption Выход Label 1 Font Times New Roman, Bold, 18-point OLE 1 Border Style Appearance Black Color O-None O-Flat Light gray (Светло-серый) OLE 2 Border Style Appearance Black Color O-None O-Flat Light gray (Светло-серый) OLE 3 Border Style Appearance Black Color O-None O-Flat Light gray (Светло-серый) 14. В меню File щелкните на пункте Save Project As и сохраните форму на диске под именем Му OieBid. Проект также сохраните на диске цод именем Му OieBid. Когда вы закончите, ваша форма Му OieBid будет выглядеть так же, как на следующем рисунке.
Урок 3. Работа со средствами управления 105 Полная программа OleBid находится на диске в папке \Vb6Sbs\LessO3. Теперь попробуйте запустить программу, чтобы увидеть, как работают OLE-объекты. Запустите программу Примерная оценка 1. Щелкните на кнопке Start на панели инструментов. Программа запустится в среде программирования. Объект 0LE1 (значок Document) будет обведен пунктирной линией, показы- вая, что в данный момент он является фокусом программы. Примечание. Фокус весьма важен для клавиатурных операций. Когда пользователь нажимает клавишу | Enter |, объект, находящийся в фокусе, выбира- ется или активизируется в программе. Пользователь может переклю- чить фокус на другой объект программы, нажав клавишу | Tab | или щелкнув на объекте мышью. Вы можете поменять порядок, в котором объекты берутся в фокус в программе, изменив свойство Tabindex каж- дого объекта. 2. Дважды щелкните на значке Document в программе. Будет запущен текстовый процессор, и в окне появится шаб- лон документа Word. 3. Наберите несколько строк текста (претендующих на роль договора о поставках) и затем в меню File (Файл) щелкните на команде Exit (Выход) для возврата в программу Му OleBid. 4. Дважды щелкните на значке Worksheet в программе. Шаблон Excel появится в окне. 5. Введите несколько строк и столбцов информации на лист (ис- пользуйте любые функции Excel и возможности форматиро- вания) и затем в меню File (Файл) щелкните на команде Exit, что- бы вернуться в программу Му OleBid. 6. Дважды щелкните на значке Bitmap Image. Запустится и по- явится в окне стандартная программа Paint. Paint - это простая программа для иллюстраций, содержащая инструменты для рисования и цветовые палитры для создания элементарных картинок.
106 Часть 1. Знакомство с Visual Basic 7. Создайте набросок с помощью инструментов Paint, а затем в меню File (Файл) щелкните на пункте Exit & Return То (Выход). 8. Щелкните по кнопке Выход для завершения работы програм- мы. Поздравляем! Вы создали вашу первую программу, которая использует объекты приложений Microsoft Office. Вы можете использовать эту тех- нику для включения в программу любых объектов-приложений, установ- ленных в вашей системе. Теперь попробуйте поработать с другим типом файлов в среде Windows - существующей базой данных, содержащей имена и адреса покупателей. Использование объектов данных для просмотра базы данных Microsoft Access Если вы работаете в сети, вы можете использовать базы данных для от- слеживания информации о клиентах, служащих или текущих проектах. База данных - это организованное собрание информации, хранящейся электронным способом в файлах. Приложения баз данных, такие как Microsoft Access, dBASE и Paradox, - это специальные программы, кото- рые создают и обрабатывают информацию, сохраняемую в базах данных. Они обеспечивают инструменты для разработки базы данных, управле- ния информацией в ней и поиска специфических пунктов. Для работы с базами данных Visual Basic предоставляет три объекта, которые позво- лят вам показывать и изменять информацию в файлах баз данных. Пер- вый объект - данные - дает вам доступ к полям и записям файла базы данных непосредственно на вашей форме. Поупражняйтесь в использо- вании объекта данных для показа информации в базе данных Access, име- нуемой Shops.mdb. Примечание. Файл Access, используемый в этом упражнении, находится на диске в папке LessO3, так что вы сможете выполнить это упражнение, даже если у вас не установлена программа Access. Вы можете также заме- нить Access-файл на свой собственный файл базы данных.
Урок 3. Работа со средствами управления 107 Поля и записи I Существуют два важных понятия, используемых для описания ин- I формации в базах данных - это поля и записи. Поля являются катего- I риями информации, хранимой в базе данных. Типичные поля в базе I данных покупателей могут включать имена покупателей, адреса, I номера телефонов и комментарии. Вся информация об отдельном I пользователе или деле называется записью. В базе данных по кадрам I каждая карточка, содержащая информацию об отдельном служащем - I это запись. При создании базы данных информация вводится в таб- I лицы, состоящие из полей и записей. Часто записи соответствуют I строкам в таблице, а поля соответствуют столбцам. Записи * Instructor ID i Поля ctor Phom Number В Давыдова Мария =3105551 2]Макаров Вадим 3| Марцев Николай =3105556 i3105554 i 4! Васильев Петр 3105550 5: Барке Александр =3105554 6i Золотова Марина 7\Елкин Леонид I2065557 i 3605551 j 8; Карцев Михаил 2065554 9: Карцева Екатерина 12065552 (Счетчик) Создайте объект данных 1. В меню Файл щелкните на пункте New Project и затем щелкни- те на кнопке ОК для создания стандартного .ехе-файла. Программа Му OleBid закроется, и в среде программирования появится новая форма. Сохраните все изменения в программе Му OleBid, если получите такую подсказку. 2. Щелкните на кнопкке Data (Данные) на панели инструментов. 3. Переместите указатель мыши в центр формы и начертите прямоугольное окно с помощью кнопки управления данными. Объект данных Datal появится на форме, как показано на ри- сунке.
108 Часть 1. Знакомство с Visual Basic < Гогш1 Объект содержит стрелки, которые позволят вам прокручивать записи в вашей базе данных, когда программа будет работать. Объект также содержит текущее название (Datal), которое вы можете использовать для описания базы данных, к которой вы получили доступ с помощью объекта. Обычно в качестве назва- ния устанавливается имя базы данных. Стрелки у внешних гра- ниц объекта используются для перемещения к началу или к концу базы данных. В Visual Basic можно выполнять множество сложных операций с базами данных. В этом упражнении вы покажете поле Instructor (Преподаватель) базы данных Students.mdb (вы будете способны прокручивать базу данных и просматривать каждое имя в файле). Для показа данных из поля Instructor (Преподаватель) в форме необходим дополнительный объект. Поскольку данные, которые вы хотите показать - это текст, добавьте в форму объект «текстовый блок», а также поместите объект «метка» для идентифика- ции поля базы данных. Затем вы установите связь между объектом дан- ных и текстовым блоком. Создайте объекты «текстовый блок» и «метка» ___ 1. Щелкните на кнопке TextBox (Текстовый блок) на панели ин- jabl струментов. 2. Создайте текстовый блок на форме над объектом данных. Текстовый блок должен быть примерно того же размера, что и объект данных. Блок должен быть достаточно широким для показа имен преподавателей длиной до 20 символов. . ' 3. Щелкните на кнопке Label (Метки) на панели инструментов.
Урок 3. Работа со средствами управления 109 4. Создайте в форме метку над текстовым блоком. Когда вы закончите создание объектов, ваш экран должен будет выгля- деть так, как на следующем рисунке. Теперь установите свойства объектов. Установите свойства объектов 1. Щелкните на объекте данных и затем щелкните на кнопке Properties Window (Свойства окна) на панели инструментов. 2. В окне Properties (Свойства) убедитесь, что свойство Connect (Соединить) установлено для Access, Excel, Lotus 1-2-3, dBASE, FoxPro и Paradox. 3. В окне Properties установите свойство DataBase Name (Имя базы данных) в C:\Vb6Sbs\LessO3\students.mdb выбором файла в диало- говом окне DataBase Name. Students.mdb — это база данных Access, которую вы будете от- крывать в этом упражнении. Она содержит номера используе- мых таблиц, полей, имена студентов, учителей, а также раз- ные данные для преподователей и администраторов, номера аудиторий и информацию о расписании экзаменов. Вы можете продолжить эксперимент сами, если хотите. 4. В окне Properties щелкните на свойстве RecordSource (Источник записей) и затем щелкните на стрелке ниспадающего списка. Когда появится перечень таблиц базы данных, щелкните на строке Instructor в окне списка. Свойство RecordSource позволяет вам специфицировать таблицу (коллекцию данных), которую вы хотите открыть в базе данных.
110 Часть 1. Знакомство с Visual Basic 5. В окне Properties установите свойство Caption (Название) объек- та данных в «Students.mdb». Название в средстве управления изменится на Students.mdb. Те- перь измените свойство DataSource (Источник данных) тексто- вого блока для связи его с объектом данных. 6. Щелкните на объекте «текстовый блок» и затем щелкните на кнопке Properties Window (Свойства окна) на панели инструмен- тов. 7. В окне Properties щелкните на свойстве DataSource (Источник данных), щелкните на стрелке ниспадающего списка и затем щелкните на строке Datal (Первый объект данных) в списке. 8. В окне свойств щелкните на свойстве DataField (Поле данных), щелкните на стрелке ниспадающего списка и затем в списке щелкните на Instructor (поле, которое вы хотите показывать). 9. Щелкните на объекте Labell, затем на кнопке Properties на па- нели инструментов и измените свойство Caption на Instructor. Это свойство будет идентифицировать поле базы данных в тексто- вом блоке, после запуска программы. Полезно добавить на вашу форму метки для объяснений, какие именно объекты содержат- ся на форме. Особенно это удобно, когда вы работаете с полями баз данных. 10. Сохраните вашу форму под именем Му Data, а проект — под именем Му Data. Готово! Теперь запустите вашу программу. Запустите программу Му Data Полная программа Data.vbр находится на диске, в папке \Vb6Sbs\LessO3. 1. Щелкните на кнопке Start на панели инструментов. Программа запустится в среде программирования, как пока- зано на рисунке.
Урок 3. Работа со средствами управления 111 Visual Basic загрузит базу данных Students.mdb и поместит пра- вое поле Instructor в текстовый блок. Теперь исследуйте другие записи поля, щелкая на кнопках в объекте данных. 2. Щелкните на внутренней правой кнопке объекта данных. В текстовом окне появится следующее имя базы данных. 3. Щелкните на внешней правой кнопке объекта данных. 4. Щелкните на внешней левой кнопке объекта данных. Visual Basic покажет первое имя в базе данных. 5. Щелкните на кнопке Close на форме для остановки програм- мы. Модификация базы данных Объект данных позволяет вам также менять информацию в базах дан- ных. Для изменения имени в базе данных Students.mdb запустите програм- му Му Data и прокрутите базу данных до имени, которое вы хотите изме- нить. Затем щелкните мышью в текстовом блоке Instructor (Преподователь) и отредактируйте имя. Внесенные вами изменения копируются непосред- ственно в оригинальную базу данных. Давайте попробуем сделать это. Измените имя в базе данных 1. Щелкните на кнопке Start на панели инструментов, чтобы за- пустить программу Му Data. В текстовом блоке появится первое имя из базы данных.
112 Часть! Знакомство с Visual Basic 2. Выделите первое имя с помощью мыши, нажмите клавишу | Del | и затем наберите Екатерина Семенова. 3. Щелкните на внутренней правой стрелке в объекте данных, чтобы перейти к следующей записи. Первое имя в базе данных изменится на Екатерина Семенова. 4. Щелкните на внутренней левой стрелке в объекте данных для перехода к первой записи. Теперь первым именем будет Екатерина Семенова. 5. Щелкните на кнопке Close на форме для остановки програм- мы. Как вы можете видеть, объект данных дает вам быстрый дос- туп к существующим базам данных. Вы можете вывести на эк- ран любое поле в базе данных и обработать информацию, как вы сочтете нужным. Подробнее объекты данных и процесс уп- равления файлами будут рассматриваться далее. Шаг вперед: инсталляция средств управления ActiveX Вы можете расширить возможности Visual Basic с помощью средств уп- равления ActiveX. Вы можете добавить средства ActiveX к панели инстру- ментов с помощью команды Components в меню Project. Новые средства уп- равления ActiveX, использующие 32-битную ActiveX-технологию, стандарт Microsoft для программируемых объектов в программах приложений, операционных системах и инструментах Internet, имеют расширение име- ни файла .осх и могут быть использованы для добавления новых возмож- ностей к программам для Windows. Visual Basic добавляет средства уп- равления автоматически, когда вы инсталлируете новые средства управления. Установите средства управления ActiveX-контроля Сетка (Grid) и Общий диалог (Common Dialog) Каждая версия Visual Basic включает дополнительные средства управ- ления ActiveX. Например, если вы написали программу для вывода дан- ных в таблице, вы можете инсталлировать управление сетками (FlexGrid control) и использовать их для создания сетки ячеек на форме. (Объект «сет- ка» весьма напоминает рабочий лист Excel.) Это средство управления ActiveX предназначено для создания стандартных диалоговых окон, подоб-
Урок 3. Работа со средствами управления 113 ных Open и Save As, оно управляет общими диалогами (Common Dialog control) и расположено в файле Comdlg32.ocx. При инсталляции средств управления ActiveX рекомендуются следующие шаги. 1. В меню File щелкните на пункте New Project и затем щелкните ОК для создания стандартного .ехе-файла. Сохраните все из- менения в программе Му Data, если будет такая подсказка. 2. В меню Project щелкните на команде Components, затем щелк- ните на закладке Controls. Появится диалоговое окно Components (Компоненты). Закладка Controls (Средства управления) представляет алфа- витный список средств управления ActiveX в вашей системе. Эти средства могут быть добавлены в панель инструментов вашего проекта. Для удобства программирования каждый проект пре- доставляет свою собственную панель инструментов, содержа- щую средства управления Visual Basic по умолчанию и любые средства управления ActiveX по вашему выбору. Поэтому лю- бые средства управления, добавленные вами сейчас к данному проекту, будут появляться только на панели инструментов это- го проекта. В следующих шагах вы добавите средства FlexGrid control (Msflxgrd.ocx) и Common Dialog control (Comdlg32.ocx) в вашу панель инструментов. I Совет. Диалоговое окно Components также содержит закладку Insertable Objects (Встраиваемые объекты), которую вы можете использовать для до- бавления объектов-приложений в панель инструментов вашего про- екта. Встраиваемые объекты — это программные компоненты, постав- ляемые другими приложениями для Windows, такие как документ Word или рабочий лист Excel. Эти инструменты являются весьма по- лезными средствами управления ActiveX. 3. Щелкните на контрольном блоке рядом со средством управ- ления, именуемым Microsoft Common Dialog Control 6.0. Средство ActiveX выбрано, и местонахождение .осх-файла по- явится в нижней части диалогового окна. 4. Щелкните на контрольном блоке рядом со средством управ- ления, именуемым Microsoft FlexGrid control.
114 Часть 1. Знакомство с Visual Basic Components Control* | Designers | Insertable Objects | | M Microsoft Common Dialog Control 6.0 I □ Microsoft Data Bound Grid Control 5.0 (5PC i □ Microsoft Data Bound List Controls 6.0 J □ Microsoft DataGrid Control 6.0 (OLEDB) I □ Microsoft DataList Controls 6.0 (OLEDB) | L J Microsoft DataRepeater Control 6.0 (OLEDB) i Q OirectAnimation Media Controls I □ Microsoft Forms 2.0 Object Library | □ Microsoft Hierarchical FlexGrid Control 6.0 (OLE I □ Microsoft Internet Controls | □ Microsoft Internet Transfer Control 6.0 I □ Microsoft MAPI Controls 6.0 jd_______________________________________I Microsoft Fie*Gnd Cnnhnl 6 0 Location. C.\WM5/STEM\M5FLXGRD.OCX Browse,.. I ) Г Selected Items Cn'y j -------------------------------j OK I Cancel | Appl/ 5. Щелкните OK, чтобы добавить выбранные средства ActiveX в панель инструментов вашего проекта. Панель инструментов покажет два новых средства управления, представленных на следующем рисунке. Common Dialog Control \ FlexGrid control Средства управления FlexGrid и Common Dialog рабо- тают точно так же, как и остальные средства управ- ления Visual Basic в панели инструментов. Вы выбираете средства ActiveX, щелкнув по ним, и ис- пользуете их для создания объектов на форме тем же путем, что и при использовании других средств управления. Средства ActiveX имеют также настраи- ваемые (гибкие) установки свойств и могут быть ис- пользованы в программном коде подобно остальным средствам управления, которыми вам уже пришлось пользоваться в данном уроке.
Урок 3. Работа со средствами управления 115 Если вы хотите перейти к следующему уроку: >• не выходя из Visual Basic, перейдите к уроку 4. Если вы хотите выйти из Visual Basic: >• в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Кнопка Создать текстовый блок Щелкните на кнопке TextBox и вычертите с labB блок. МБш Создать команд- ную кнопку Изменить свойство во время работы программы Щелкните на кнопке CommandButton и вы- чертите кнопку. Измените значение свойства с помощью программного кода, например, Textl .Text = "Здравствуйте!" Создать список дисководов Щелкните на кнопке DriveListBox и вычерти- те окно списка. I—1 Создать список директорий Щелкните на кнопке DirListBox и вычертите — окно списка. —- Создать список файлов Щелкните на кнопке FileListBox и вычертите окно списка. ® Предотвратить программный крах Загрузить картинку во время работы программы Пишите программный код для обработки ошибок (см. урок 8). Вызовите функцию LoadPictUre и присвойте результат свойству Picture объекта image или объекта Picture box. Синтаксис для это- го утверждения должен быть Object.Picture = LoadPicture (SelectedFile), где Object - имя объекта, a SelectedFile - переменная, которая содержит имя файла картинки. Например: SelectedFile = "c:\truck.bmp" Imagel.Picture = LoadPicture (SelectedFile)
116 Часть 1. Знакомство с Visual Basic Чтобы Создать кнопку оп- ций Создать контрольный блок Создать список Создать ниспада- ющий список Добавить пункты к списку Запустить прило- жение для Windows в вашей программе Просмотреть суще- ствующие базы данных внутри ва- шей программы Модифицировать записи в базе дан- ных Инсталлировать средства ActiveX Сделайте следующее Кнопка Используйте кнопку Option Button. Для со- здания нескольких кнопок опций помес- ,S* ; тите нужное количество объектов кнопок опций в окно, созданное вами с помощью кнопки Frame. Щелкните на кнопке CheckBox и вычерти- те контрольный блок. Щелкните на кнопке ListBox и вычертите окно списка. Щелкните на кнопке СотЬоВох и вычер- тите окно ниспадающего списка. Включите утверждение с использовани- ем метода Additem в процедуру Form_Load вашей программы. Например: Listl. Additem "Принтер" Используйте OLE для вычерчивания блока для приложения в вашей форме и выберите требуемый объект-приложе- ние в диалоговом окне InsertObject. Используйте кнопку Data, чтобы создать объект для перемещения по базе данных, а затем свяжите объект данных с объек- том, который может выводить на зкран записи базы данных (обычно зто объект «текстовый блок»). Выведите на экран базу данных в про- грамме. Отредактируйте запись в объек- те «текстовый блок» при запущенной программе и затем щелкните на стрелке средства управления данными, чтобы записать изменения на диск. В меню Project щелкните на команде Components и затем щелкните на закладке Controls. Выберите средства управления Active X, которые вы хотите добавить в па- нель инструментов вашего проекта, и за- тем щелкните на ОК.
УРОК * & & ж I Работа с меню : и диалоговыми :окнами и » TKvV * \Ш » ---------------------------------- * Вы научитесь: Ур°к • и д05авлять меню в ваши программы с помощью редакто- рассчитан в меню Menu Editor; на в 45 минут “ обрабатывать выборы меню с помощью программного > кода; • использовать объекты общих диалогов для показа стан- gg я дартных диалоговых окон. & ---------------------------------- * В уроке 3 вы использовали различные объекты Visual Basic • для сбора вводимых пользователем данных. В этом уроке вы * научитесь предоставлять выбор пользователю с помощью • профессионально выглядящих меню и диалоговых окон. Меню располагается в строке меню и содержит список свя- к занных команд. Когда вы щелкаете на заголовке меню, по- “ является список с командами меню. Большинство команд меню выполняется непосредственно после того, как по ним щелкнули; например, когда пользователь щелкает по коман- ж де Сору в меню Edit, информация копируется непосредствен- “ но в буфер обмена. Однако, если за командой меню следует • многоточие (...), Visual Basic показывает диалоговое окно, зап- рашивающее дополнительную информацию перед выполне- • нием команды. В этом уроке вы научитесь пользоваться ре-
118 Часть 1. Знакомство с Visual Basic дактором меню и управлением общими диалогами для добавления меню и стандартных диалоговых окон в вашу программу. Добавление меню с помощью редактора меню Menu Editor (Редактор меню) - это графический инструмент, управляю- щий меню в вашей программе. Он позволяет добавлять новые меню, мо- дифицировать и переупорядочивать существующие меню, а также уда- лять старые меню. Он также позволяет вам добавлять специальные эффекты в ваши меню, такие как ключи доступа, контрольные значки и быстрые клавиши. После того как вы добавили меню в вашу форму, вы можете воспользоваться процедурами событий для обработки команд меню. В следующем упражнении вы будете использовать редактор меню для создания меню Часы (Clock) с командами, которые показывают теку- щие дату и время. Создайте меню че 1. Запустите Visual Basic. Если среда программирования уже запущена, в меню File щелкните на команде New Project для за- пуска проекта нового стандартного .ехе-файла. 2. Щелкните на кнопке Menu Editor на панели инструментов. По- явится редактор меню, изображенный на следующем рисунке. Menu Editor ' ...... <* J J I ' ....... СапИ I . Inde& | , - [(None) HelpCortextlD ft HecabstePositicr.' [[ - None ***[ ' IndeKi | , - [(None) HelpCortextID ft HecabstePositicr.' [[ None ***[' Г Checled P Enabled P Viable Г WrdowUt
Урок 4. Работа с меню и диалоговыми окнами 119 Редактор меню поможет вам создавать и модифицировать меню. Редактор меню показывает команды построения меню и опции в диалоговом окне. Вы определяете название для меню (имя меню на экране) в текстовом блоке Caption (Надпись), а имя меню в программе — в текстовом блоке Name (Имя). Это две наиболее важных установки для меню. Дополнительные установки, та- кие как Index, HelpContextID, Shortcut и Checked, необязательны. Вы узнаете об установке Shortcut в конце этого урока. Когда вы щелкнете на кнопке Next в диалоговом окне редактора меню, редактор очистит диалоговое окно для следующего пун- кта меню. Окно списка меню в нижней части диалогового окна выводит пункты меню по мере их создания и показывает об- щую структуру меню. Воспользуйтесь редактором меню для создания меню Часы. 3. Наберите Часы в текстовом блоке Caption (Надпись) и затем нажмите клавишу | Tab |. Слово «Часы» введется как название вашего первого меню, и курсор переместится в текстовый блок Name (Имя). Как только вы набрали название меню, это назва- ние также появится в окне списка меню в нижней части диало- гового окна. 4. Наберите mnuClock в текстовом блоке Name (Имя). Слово «mnuClock» введется в качестве имени вашего меню в програм- ме. По соглашению префикс mnu используется для идентифи- кации пункта меню в программном коде. Префиксные элемен- ты пользовательского интерфейса с трехсимвольной меткой помогут вам различать процедуры событий, а также иденти- фицировать элементы интерфейса. Примечание. Раздел «Шаг вперед» в уроке 9 перечисляет соглашения наименова- ний для объектов Visual Basic. 5. Щелкните по кнопке Next (Далее) для добавления заголовка меню Часы в вашу программу. Меню Часы добавится к строке меню, и редактор меню очистит диалоговое окно для следую- щего пункта меню. Заголовок меню по-прежнему находится в списке меню в нижней части диалогового окна. По мере того как вы строите ваше меню, каждый пункт меню будет добавляться в окно списка меню, так что вы можете видеть структуру меню.
120 Часть 1. Знакомство с Visual Basic 6. Наберите Дата в текстовом блоке Caption (Надпись), нажмите клавишу | Tab | и затем наберите mnuDateltem. Команда Дата появится в списке меню. Поскольку вы хотите сделать Дата командой, а не заголовком меню, используйте дру- гое соглашение о наименовании - добавьте слово Item в конец имени в текстовом блоке Name. Это поможет вам отличать ко- манды меню от заголовков меню в окне Code. 7. При выделенном пункте Дата в списке меню щелкните по кноп- ке со стрелкой вправо в редакторе меню. Команда Дата переместится на один отступ (четыре пробела) вправо в списке меню, показывая этим, что данный пункт — ко- манда меню. Позиция пункта в окне списка определяется тем, является ли он заголовком меню (один отступ), заголовком суб- меню (два отступа) или командой субменю (три отступа). Вы щелкаете по кнопке «стрелка вправо» в диалоговом окне Menu Editor для перемещения пунктов вправо, а щелкнув на кнопке «стрелка влево», перемещаете пункты влево. Теперь добавьте команду меню Время в меню Часы. 8. Щелкните по кнопке Next, наберите Время, нажмите | Tab | и затем наберите mnuTimeltem. Команда Время появится в спис- ке меню, как показано на следующем рисунке. Кнопка «стрелка вправо» Окно списка меню
Урок 4. Работа с меню и диалоговыми окнами 121 Заметим, что редактор меню предполагает, что следующий пункт меню должен быть командой меню, и делает отступ для команды Время на один уровень. Вы закончили добавление ко- манд в меню Часы и теперь можете закрыть редактор меню. 9. Щелкните на кнопке ОК, чтобы закрыть окно редактора меню. Редактор меню закроется, и в строке программирования по- явится ваша форма со строкой меню и меню Часы. Теперь от- кройте меню Часы, чтобы увидеть его содержимое. 10. Щелкните на меню Часы. Появятся команды Дата и Время. Щелчок по команде меню в среде программирования выведет на зкран процедуру события, которая выполняется при выбо- ре меню. Вы создадите процедуры событий для команд Дата и Время немного позже. Сначала вы добавите к меню поддержку клавиатуры. 11. Щелкните на форме (или дважды нажмите | Esc |), чтобы зак- рыть меню Часы. Добавление быстрых клавиш к командам меню Вы определяете быструю клавишу помещением амперсанда (&) перед буквой. Visual Basic легко обеспечивает поддержку быстрых клавиш для меню и команд меню. Быстрая клавиша для команды — это клавиша на клавиа- туре, которую пользователь может нажать для выполнения команды. Когда пользователь открывает меню при работе программы, быстрая кла- виша для команды обозначена подчеркнутой буквой в имени команды. Для добавления быстрой клавиши в пункт меню все, что вам нужно сделать — это запустить редактор меню (Menu Editor) и поставить перед буквой быст- рой клавиши в названии пункта меню амперсанд (&). С этого момента ваша программа будет поддерживать быструю клавишу. Соглашения меню По соглашению, каждый заголовок меню и команда меню в приложе- нии для Windows пишется с заглавной буквы. File (Файл) и Edit (Прав- ка) обычно являются первыми двумя именами в строке меню, a Help (Справка) — последним. Другие общеупотребительные имена меню - это View (Вид), Format (Формат) и Window (Окно). Неважно, какие имена и команды вы используете в вашем приложении, позаботьтесь об их
122 Часть 1. Знакомство с Visual Basic ясности и последовательности. Меню и команды должны быть про- стыми в использовании, а также должны иметь как можно больше общего с аналогичными в других Windows-приложениях. При созда- нии пунктов меню руководствуйтесь приведенными ниже соображе- ниями. Используйте короткие названия, состоящие максимум из одного или двух слов. Присвойте каждому пункту меню в программе уникальную быст- рую клавишу. По возможности используйте первую букву имени. Если команда используется как выключатель, поместите конт- рольный значок рядом с пунктом, когда он активен. Вы можете до- бавить контрольный значок, щелкнув на контрольном блоке Checked в редакторе меню или установив свойство Checked пункта меню в True. Поместите многоточие (...) после команды меню, которая требует от пользователя ввода дополнительной информации перед выпол- нением команды. Используйте соглашения о наименованиях меню, такие как пре- фикс mnu и суффикс Item при назначении имени меню. Добавьте быстрые клавиши 1. Щелкните на кнопке Menu Editor на панели инструментов. По- явится редактор меню, и окно списка меню покажет пункты меню, которые есть в вашей программе. В диалоговом окне по- явится название и имя для меню Часы. 2. Щелкните на начале слова «Часы» в текстовом блоке Caption (Надпись). 3. Наберите & для определения буквы «Ч» как быстрой клави- ши для меню Часы. В текстовом блоке появится амперсанд. 4, Щелкните на команде Дата в списке меню. Название и имя для команды Дата появятся в диалоговом окне. 5. Поместите амперсанд перед буквой «Д» в текстовом блоке Caption. Буква «Д» теперь определена как быстрая клавиша для команды Дата.
Урок 4. Работа с меню и диалоговыми окнами 123 6. Щелкните на команде Время в списке меню. В диалоговом окне появится название и имя для команды Время. 7. Поставьте амперсанд перед буквой «В» в текстовом блоке Caption. Буква «В» теперь определена в качестве быстрой кла- виши для команды Время. 8. Щелкните на кнопке ОК в диалоговом окне, чтобы закрыть редактор меню. Теперь запустите программу, и вы увидите, как быстрые кла- виши появятся в меню Часы. 9. Щелкните на кнопке Start. 10. Щелкните на меню Часы. Меню Часы и команды меню пока- заны с подчеркнутыми быстрыми клавишами. 11. Щелкните на кнопке End для выхода из программы. Теперь поупражняйтесь в использовании редактора меню для переклю- чения порядка команд Дата и Время в меню Часы. Важно уметь менять по- рядок пунктов в меню. Со временем вы придумаете кое-что получше, чем то решение, которым вы воспользовались, когда впервые определили ваше меню. Измените порядок пунктов меню 1. Щелкните на кнопке Menu Editor на панели инструментов. По- явится редактор меню.
124 Часть 1. Знакомство с Visual Basic 2. Щелкните на команде Время в списке меню. Название и имя для команды Время появятся в диалоговом окне. 3. Щелкните на кнопке [TJ в диалоговом окне. Пункт меню Время переместится выше пункта меню Дата. 4. Щелкните на кнопке ОК. Редактор меню закроется, и поря- док команд Дата и Время в меню Часы изменится. Вы можете так- же использовать кнопку Щ в редакторе меню для переключе- ния пунктов меню. Она перемещает команды вниз по списку. Вы закончили создание пользовательского интерфейса для меню Часы. Теперь используйте процедуры событий меню для обработки пользова- тельских выборов. Примечание. С помощью редактора меню вы можете также вставить новые пункты меню или удалить ненужные. Для вставки нового пункта меню щелк- ните на пункте в списке меню, перед которым (или выше которого) вы хотите поместить новый пункт, и затем щелкните на кнопке Insert (Вставить). Редактор меню вставит пустой пункт в список, и вы мо- жете определить его, используя текстовые блоки Caption (Надпись) и Name (Имя). Для удаления ненужного пункта меню щелкните на этом пункте в списке меню и затем щелкните на кнопке Delete. Обработка выборов меню Команда меню обрабатывается свзанной с ней процедурой события. После того как пункты меню помещены на строку меню, они становятся объектами в программе. Чтобы заставить объекты меню делать осмыс- ленную ра боту, вам нужно написать для них процедуры событий. Проце- дуры событий меню обычно содержат программные утверждения, кото- рые выводят или обрабатывают информацию на форме и модифицируют одно или несколько свойств меню. Если от пользователя нужна дополни- тельная информация для обработки выбранной команды, процедура со- бытия будет чаще всего показывать диалоговое окно с помощью объекта общих диалогов или одного из объектов ввода. В следующем упражнении вы добавите объект этикетки (метки) в вашу форму для показа вывода команд Дата и Время в меню Часы.
Урок 4. Работа с меню и диалоговыми окнами 125 Добавьте объект «Метка» в форму 1. Щелкните на кнопке Label в панели инструментов. - 2. Создайте небольшую метку выше середины формы. Метка появится на форме. Она именуется Label 1 в программном коде. Ваш экран должен выглядеть так, как показано на следу- ющем рисунке. Установите свойства Labell с помощью окна свойств (Properties) 3. Установите следующие свойства для метки. Объект Свойство Установка Labell Alignment 2 - Center Border Style 1 - Fixed Single Caption (none) Font MS Sans Serif Bold 14 point Теперь вы добавите программные утверждения для процедур событий Дата и Время для обработки команд меню. Примечание. В следующих упражнениях вы введете программные коды для обра- ботки выборов меню. Набирайте программные утверждения в точно- сти так, как они напечатаны. Сейчас вам незачем изучать, как рабо- тают программные утверждения, важно лишь, как они используются для поддержки функционального пользовательского интерфейса. Вы узнаете, как работают программные утверждения, в уроках с 5 по 7.
126 Часть 1. Знакомство с Visual Basic Отредактируйте процедуры событий меню 1. Щелкните на кнопке View Code (Просмотр кода) в окне Project (Проект) для открытия окна Code. 2. Щелкните на ниспадающем списке объектов и затем щелк- ните на строке mnuTimeltem. Объект mnuTimeltem Ж Projectl • Fount (Code) |(Geiieral) j(General) [Form LabeH ninuClock mnuDatelter i ^ritDeclarrtione)" jnmiTimehe.n В окне Code (Код) появится процедура события mnuTimeltem_Click. Вы присвоили имя mnuTimeltem команде Время в редакторе меню. Когда пользователь щелкнет на команде Время в программе, выполнится процедура события mnuTimeltem_Click. 3. Нажмите четыре раза клавишу | SpaceBarl и затем наберите: LabeH. Caption = Time Это программное утверждение выведет текущее время (от си- стемных часов) в названии объекта LabeH, заменив предыду- щее название LabeH. Вы можете использовать функцию Time в любое время в вашей программе для вывода времени с точнос- тью до секунды.
Урок 4. Работа с меню и диалоговыми окнами 127 Примечание. Функция Time из Visual Basic возвращает текущее системное время. Вы можете установить системное время с помощью опции DateHime (Дата/Время) в Control Panel (Панели управления); вы можете изменить формат системного времени с помощью опции Regional Settings (Язык и стандарты) панели управления. 4. Нажмите клавишу Щ. Visual Basic интерпретирует строку и установит заглавные буквы и пробелы, если это необходимо. (Visual Basic проверяет каждую строку на обнаружение син- таксических ошибок при ее вводе. Вы можете ввести пустую строку, нажав клавиши | Enter |, [t] или Щ.) 5. Щелкните на объекте mnuDateltem в ниспадающем списке объектов. В окне Code (Код) появится процедура события mnuDateltem_Click. Она выполняется, когда пользователь щелкает на команде Дата в меню Часы. 6. Нажмите четырежды клавишу | SpaceBar~| и затем наберите: Labell. Caption = Date Это программное утверждение выводит текущую дату (из сис- темных часов) в название объекта Labell, заменяя предыдущее название. Функция Date также доступна для обычного исполь- зования в вашей программе. Присваивайте название «Дата» на- званию объекта, когда вы хотите вывести в форме текущую Дату. Примечание. Функция Date Visual Basic возвращает текущую системную дату. Вы можете установить системную дату с помощью опции Datetime (Дата/ Время), а также изменить ее формат с помощью опции Regional Settings (Язык и стандарты) панели управления. I 7. Нажмите клавишу Щ для ввода строки. Ваш экран должен выглядеть так, как показано на следующем рисунке.
128 Часть 1. Знакомство с Visual Basic 8. Закройте окно Code (Код). Вы закончили ввод демонстрационной программы меню. Теперь вы запи- шете форму и проект на диск под именем МуМепи. Сохраните программу МуМепи gj 1. Щелкните на кнопке Save Project на панели инструментов. Кнопка Save Project (Сохранить проект) - это альтернатива ко- манде Save Project в меню File. 2. Для вывода имени формы вашего проекта выберите папку \Vb6Sbs\LessO4, затем наберите МуМепи и нажмите | Enter |. Фор- ма запишется на диск с именем MyMenu.frm и появится диалого- вое окно Save Project As (Сохранить проект как...). 3. Для ввода имени вашего проекта наберите МуМепи и нажми- те | Enter~|. Проект запишется на диск с именем MyMenu.vbr. Теперь программа готова к запуску. Запустите программу МуМепи 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа МуМепи запустится в среде программирования.
Урок 4. Работа с меню и диалоговыми окнами 129 2. Щелкните на меню Часы в строке меню. Появится содержи- мое меню Часы. 3. Щелкните на команде Время. В блоке метки появится теку- щее системное время, как показано на следующем рисунке. Законченная программа Menu.vbr находится на диске в папке\Vb6Sbs\LessO4. Ваше время, вероятно, будет отличаться от приведенного здесь. Теперь попробуйте показать текущую дату с помощью быст- рых клавиш. 4. Нажмите клавишу | Alt |. На строке меню выделите меню Часы. 5. Нажмите [ч] для показа меню Часы. 6. Нажмите [Д] для вывода текущей даты. В блоке метки по- явится текущая дата. 7. Щелкните на кнопке End для остановки программы. Поздравляем! Вы создали работающую программу, использующую меню и быстрые клавиши. В следующем упражнении вы изучите, как исполь- зовать меню для вывода стандартных диалоговых окон.
130 Часть 1. Знакомство с Visual Basic Функции системных часов Вы можете использовать 10 функций для возврата хронологических величин из системных часов. Вы можете использовать эти величины для создания настраиваемых календарей, часов и сигнализации в ва- | шей программе. В следующей таблице дан полный список функций 1 системных часов. Для дополнительной информации сверьтесь со спра- 1 вочной системой Visual Basic. 1 Функции Описание | Time Возвращает текущее время из системных часов. 1 Date Возвращает текущую дату из системных часов. 1 Now Возвращает кодированные величины, представля- 1 ющие текущие дату и время. Эта функция исполь- 1 зуется, в основном, в качестве аргумента для дру- I гих функций системных часов. 1 Hour (time) Возвращает часы данного момента времени (от 0 1 до 23). Minute (time) Возвращает минуты данного момента времени (от 1 0 до 59). Second (time) Возвращает секунды данного момента времени (от | 0 до 59). Day (date) Возвращает целое число, представляющее день 1 месяца (от 1 до 31). 1 Month (date) Возвращает целое число, представляющее месяц 1 (от 1 до 12). Year (date) Возвращает год данного момента времени. 1 Weekday (date) Возвращает целое число, представляющее день не- 1 дели (1 - воскресенье, 2 - понедельник и т.д.). 1 Использование объектов общих диалогов Общие диалоги позволяют выводить стандартные диалоговые окна в ва- шей программе. Каждое окно общего диалога может быть выведено из единственного объекта общего диалога. Вы выводите частное (отдельное) окно общих диалогов с помощью метода соответствующего ему объекта
Урок 4. Работа с меню и диалоговыми окнами 131 общих диалогов. Вы управляете содержимым окна общих диалогов уста- новкой связанных с ними свойств. Когда пользователь заполняет окно общего диалога в программе, результат возвращается через одно или бо- лее свойств в объект общего диалога, который может затем быть исполь- зован в программе для выполнения осмысленной работы. Пять окон общих диалогов, обеспеченных объектами общих диалогов, перечислены вместе с методами, которые вы используете для их специ- фикации, в следующей таблице. Диалоговое окно Цель Метод Open Получить имена диска, папки и файла для существующего файла ShowOpen Save As Получить имена диска, папки и файла для нового файла ShowSave Print Позволить пользователю установить опции для печати ShowPrinter Font Позволить пользователю выбрать новый шрифт и стиль ShowFont Color Позволить пользователю выбрать цвет из палитры ShowColor Когда вы переименовываете проект, сохраняйте сначала форму проек- та, а затем сам проект. Всегда сохраняйте форму первой. В следующих упражнениях вы добавите новое меню в программу МуМепи и поупражняетесь в использовании окон общих диалогов Open и Color. Для сохранения копии оригинальной программы МуМепи запишите сначала форму и проект МуМепи под именем MyDialog. Сохраните файлы МуМепи как MyDialog 1. Если проект MyMenu.vbp еще не открыт, загрузите его с диска, щелкнув по команде Open Project (Открыть проект) в меню File (Файл). Если вы не создавали проект МуМепи, откройте Menu.vbp из пап- ки \Vb6Sbs\LessO4. Его содержимое соответствует содержимому МуМепи. 2. В меню File (Файл) щелкните на команде Save MyMenu.frm As (Сохраните ... как...). Появится диалоговое окно Save File As (Со- хранить файл как).
132 Часть 1. Знакомство с Visual Basic 3. Укажите папку \Vb6Sbs\LessO4, наберите MyDialog.frm и за- тем нажмите | Enter |. Копия формы МуМепи запишется на диск под именем MyDialog.frm. Предупреждение. Если вы не запишете форму под новым именем первой, программы МуМепи и MyDialog будут разделять одну и ту же форму. 4. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как...). Появится диалоговое окно Save Project As. 5. Укажите папку \Vb6Sbs\LessO4, наберите MyDialog.vbp и за- тем нажмите [ Enter |. Копия файла проекта МуМепи запишется на диске под именем MyDialog.vbp. Добавление объекта общего диалога Объект общего диалога невидим для пользователя при работе програм- мы. Теперь с помощью управления общими диалогами добавьте объект об- щего диалога в форму. Объект общего диалога имеет стандартный раз- мер и невидим для пользователя при работе программы. (Поскольку объект не будет видимым, он может быть помещен в любое место в фор- ме.) Помещение объекта в форму позволит вам использовать любое из пяти окон общих диалогов в вашей программе. Добавьте управление общими диалогами в панель инструментов Если в вашей панели инструментов нет управления общими диалогами, вы можете добавить его, щелкнув на команде Components (Компоненты) в меню Project (Проект). Выполните следующие шаги. 1. В меню Project (Проект) щелкните на команде Components (Ком- поненты). 2. Щелкните на вкладке Controls и выберите строку Microsoft Common Dialog Control 6.0 (Управление общими диалогами).
Урок 4. Работа с меню и диалоговыми окнами 133 Components Controls | cygnets | IrsertabfeObjects | И Г* Selected Items Only □ Microsoft ActiveX Plugin □ Microsoft ADO Data Control 6.0 (OLEDB) □ Microsoft BPC Video Server and Control module □ Microsoft Calendar Control 8.0 □ Microsoft Chart Control 6.0 (OLEDB) □ Microsoft Comm Control 6.0 Е Й Microsoft Common Dialog Control 6.0 □ Microsoft Data Bound Grid Control 5.0 (SP3) □ Microsoft Data Bound List Controls 6.0 □ Microsoft DataGrid Control 6.0 (OLEDB) □ Microsoft DataList Controls 6.0 (OLEDB) □ Microsoft DataRepeater Control 6.0 (OLEDB) □ Microsoft DirectAnimation Media Controls Active Setup Control Library Location; C:\WIhftSYSTEMiASCTRLS.OCX <Ж 3. Щелкните на OK. В вашей панели инструментов появится кнопка Common Dialog (Общие диалоги), как показано на следу- ющем рисунке. Common Dialog
134 Часть 1. Знакомство с Visual Basic Добавьте объект общего диалога 1. Щелкните на кнопке Common Dialog (Общие диалоги) в панели инструментов. 2. Начертите объект общего диалога в левом нижнем углу фор- мы. Когда вы закончите вычерчивание объекта, он сам изменит свои размеры. Объект общего диалога теперь готов для использова- ния в вашей программе. Теперь вы создадите графический объект с помощью кнопки Image (Рису- нок). Графический объект показывает картинки по выбору пользователя в вашей программе с помощью окна общего диалога Open (Открыть). Добавьте графический объект 1. Щелкните на кнопке Image (Рисунок) на панели инструмен- тов. 2. Добавьте графический объект в форму ниже метки. 3. Воспользуйтесь окном Properties (Свойства) для установки свойства Stretch (Вытягивание) графического объекта в True (Ис- тинно). Когда вы закончите, ваш экран должен выглядеть следующим образом. объект общих диалогов графический объект
Урок 4. Работа с меню и диалоговыми окнами 135 Теперь вы воспользуетесь редактором меню для добавления меню Файл в программу MyDialog. Добавьте меню Файл 1. Щелкните на форме для выделения объекта Форма. Форма должна быть выделена перед тем, как вы будете добавлять или модифицировать пункты меню. 2. Щелкните на кнопке MenuEditor (Редактор меню) на панели инструментов. Появится редактор меню, и текущая структура меню программы MyDialog появится в диалоговом окне. Теперь добавьте в программу меню Файл, включающее команды Открыть, Закрыть и Выход. 3. Четырежды щелкните на кнопке Insert (Вставить). Появятся четыре пустых строки в верхней части списка пунктов меню. Это создаст место для команд меню Файл, которые вы будете вводить. 4. Щелкните на текстовом блоке Caption (Надпись), наберите &Файл, нажмите клавишу | ТаЬ |, наберите mnuFile и затем щелкните на кнопке Next (Далее). Меню Файл добавится в про- грамму. Буква «Ф» определена как быстрая клавиша. 5. Наберите &Открыть.„, нажмите клавишу | ТаЬ |, наберите mnuOpenltem, щелкните на кнопке [->3 и затем щелкните на кнопке Next. Пункт меню Открыть - команда, которая будет открывать мета- файлы Windows - добавлена в меню и сдвинута на один уро- вень. Так как команда будет выводить диалоговое окно, вы до- бавили многоточие в название команды. 6. Наберите &3акрыть, нажмите клавишу ГтаЬ~], наберите mnuCloseltem, щелкните на кнопке [—>] и затем щелкните на кнопке Next. Пункт меню Закрыть (команда, которая будет зак- рывать открытый файл) добавлен в список меню. 7. Наберите &Выход, нажмите клавишу [Tab], наберите mnuExitltem и затем щелкните по кнопке [—>]. Пункт меню Выход - команда, которая будет закрывать прило- жение MyDialog — добавлен в список меню. Ваш экран должен выглядеть так, как показано на рисунке.
136 Часть 1. Знакомство с Visual Basic ок____| Menu Editor mnuExitltem 00^ ""&Вы>:од &Файл •"•ЙОткрыть... „^Закрыть JO-None Г Wmdowlist &Часы ••••бБремя ••••&Дата Запрещение команды меню В типичном приложении для Windows не все команды меню доступны одновременно. В типичном меню Edit (Правка), например, команда Paste (Вставить) доступна только тогда, когда имеются данные в буфере обме- на. Вы можете запретить пункт меню, очистив контрольный блок Enabled для такого пункта в редакторе меню. Когда команда запрещена, она по- является в строке меню тусклым шрифтом. В следующем упражнении вы запретите команду Закрыть (которая может быть использована только после того, как файл был открыт в программе). Позже в этом уроке вы включите утверждение в процедуру события ко- манды Открыть, которое разрешит команду Закрыть в свое время. Запретите команду Закрыть 1. Щелкните на команде Закрыть в списке меню. Название и имя команды появятся в диалоговом окне. 2. Щелкните на контрольном блоке Enabled в редакторе меню для удаления контрольного значка. Контрольный значок удален из контрольного блока, и установ- ка стала запрещена.
Урок 4. Работа с меню и диалоговыми окнами 137 Теперь вы добавите команду ЦветТекста в меню Часы для демон- страции окна общего диалога Color (Цвет). Окно общего диалога Color возвращает установку цвета в программу через свойство CommonDialogl .Color. Вы будете использовать такое свойство для изменения цвета текста в названии метки. Добавьте команду «Цвет Текста» в меню «Часы» 1. Щелкните на Дате, последнем пункте в списке меню. 2. Щелкните на кнопке Next. В конце списка меню появится пу- стая строка. 3. Наберите Цвет&Текста..., нажмите клавишу | Tab | и набери- те mnuTextColorltem. Команда ЦветТекста добавлена в меню Часы. Команда содержит в конце многоточие для индикации того, что будет показано диалоговое окно, после щелчка на ней. Быстрой клавишей для этой команды выбрана «Т». Ваши быс- трые клавиши не будут работать корректно, если вы исполь- зуете дубликаты клавиш внутри одного уровня подменю или на уровне строки меню. 4. Щелкните на кнопке ОК для закрытия редактора меню. Процедуры событий, управляющие окнами общих диалогов Для вывода окна общего диалога в программе вам нужно обратиться к объекту общих диалогов с помощью соответствующего объектного мето- да в процедуре события. При необходимости следует установить одно или больше свойств общего диалога перед обращением с использованием про- граммного кода. После того как пользователь сделал свои выделения в окне общего диалога, вы обрабатываете выборы с помощью программно- го кода в процедуре события. В следующем упражнении вы наберете программный код для процедуры события mnuOpenltem_Click, который выполняется, когда щелкают по ко- манде Открыть. Вы установите свойство Filter в объекте CommonDialog для за- дания типа файлов в окне общего диалога Open. Затем вы воспользуетесь методом ShowOpen для вывода окна общего диалога Open. После того как пользователь выбрал файл и закрыл окно общего диалога, вы покажете
138 Часть 1. Знакомство с Visual Basic файл в объекте образа установкой свойства Picture объекта Imagel. именем выбранного пользователем файла. В завершение вы разрешите команду Закрыть так, чтобы пользователь смог выгрузить картинку, если захочет. Отредактируйте процедуру события команды Открыть 1. Щелкните на кнопке View Code (Просмотр кода) в окне Project (Проект). 2. Щелкните на ниспадающем списке Object (Объект) и затем щелкните на объекте mnuOpenltem. В окне Code (Код) появится процедура события mnuOpenltem_Click. 3. Наберите следующие программные утверждения в процеду- ре события между утверждениями Private Sub и End Sub. Сделай- те отступ для каждой строки на четыре пробела для выделе- ния строки как текста процедуры события. Убедитесь, что каждая строка набрана в точности как напечатано, и нажимайте клавишу Щ после каждой строки. CommonDialogl .Filter = "Метафайлы (*.WMF)I*.WMF" Com monDialogl .ShowOpen Imagel.Picture = LoadPicture (CommonDialogl.FileName) mnuCloseltem. Enabled = True Ваш экран должен выглядеть так, как показано на рисунке. jmnuOpenttem ^pjciick Private Sub mnuDateItem_Click() Labell.Caption = Date End Sub Private Sub mnuOpen!tem_Click() | CommonDialogl.Filter = "Метафайлы (*.UHF)|*.UHF" ----CommonDialogl. ShowOpen Imagel.Picture * LoadPicture(CommonDialogl.FileNamej mnuCloseltem.Enabled « True End Stab Private Sub mnuTimeItem_Click() Labell.Caption = Time End Sub — Это утверждение показывает диалоговое окно Open
Урок 4. Работа с меню и диалоговыми окнами 139 Свойство Filter определяет типы файлов, которые будут перечислены в диалоговом окне Open. Первые три строки в процедуре события ссылаются на три раз- личных свойства объекта CommonDialogl. Первая строка исполь- зует свойство Filter (Фильтр) для определения списка действи- тельных файлов. (В данном случае список имеет только один пункт: *.WMF.) Это важно для диалогового окна Open, посколь- ку графический объект, как уже говорилось в уроке 2, разра- ботан для шести типов файлов: битовые карты (.bmp-файлы), метафайлы Windows (.wmf-файлы), пиктограммы (.ico-файлы), курсоры (.cur-файлы), JPEG-формат (.jpg-файлы) и формат GIF (.gif-файлы). (Попытка показать .txt-файл, например, в графическом объекте вызовет ошибку во время выполнения программы.) Для добавления дополнительных пунктов в список Filter (Фильтр) вы можете набрать символ | между пунктами. Например, CommonDialogl .Filter = “Bitmaps (‘.BMP) | *.BMP(metafiles (*.WMF) I *.WMF" позволит выбирать в диалоговом окне Open как битовые карты, так и метафайлы Windows. Следующая строка в процедуре события выводит на экран окно общего диалога Open в программе. Каждое окно общего диалога выводится с помощью различных объектных методов; метод для вывода окна общего диалога Open - зто ShowOpen. (См. таб- лицу, приведенную ранее в этом уроке для методов, которые выводят другие окна общих диалогов.) Третья строка использует имя файла, выбранное пользовате- лем в диалоговом окне. Когда пользователь выбирает диск, пап- ку и имя файла, и затем щелкает по кнопке ОК, полное имя пути передается в программу через свойство CommonDialogl.FileNamе. Функция LoadPicture, программа, которая загружает электрон- ную картинку, тогда используется для копирования специфи- цированного метафайла Windows в объект Imagel. Последняя строка в процедуре разрешает команду Закрыть в меню Файл. Теперь, когда файл был открыт в программе, коман- да Закрыть должна быть доступна, чтобы пользователь мог зак- рыть файл. Теперь наберите код для процедуры события mnuTextColorltem_Click, кото- рый запускается, когда щелкают на команде ЦветТекста в меню Часы.
140 Часть 1. Знакомство с Visual Basic Отредактируйте процедуру события команды ЦветТекста 1. Щелкните на объекте m n uTextCo Io г I tern в ниспадающем списке Object (Объект). Процедура события ЦветТекста появится в окне Code (Код). 2. Наберите следующие программные утверждения (с отсту- пом на четыре пробела) в процедуре события между утверж- дениями Private Sub и End Sub. CommonDialogl .Flags = &H1 & CommonDialogl .ShowColor Labell .ForeColor = CommonDialogl .Color Управление выбором цвета с помощью флагов Свойство Flags определяет тип окна общего диалога Color, которое бу- дет выведено на экран. Процедура события mnuTextColorltem_Click использует свойства и методы объектов общих диалогов. Первая строка устанавливает свойство Flags (Флаг) в &Н1 &, шестнадцатиричную величину, которая в окне общего ди- алога Color представляет пользователю список стандартных цветов для выбора, с настраиваемыми цветами в качестве опции и выделенным на- бором цветов по умолчанию. Следующая таблица показывает четыре воз- можные значения для свойства Flags (Флаг). Флаг Значение &Н1& Показывает стандартное окно общего диалога Color (с настрой- кой цветов в качестве опции) и определяет текущие цвета как цвета по умолчанию. &Н2& Выводит окно общего диалога Color - стандартное и с настрой- кой цветов. &Н4& Выводит стандартное окно общего диалога Color с недоступной кнопкой Define Custom Colors (определение настраиваемых цветов). &Н8& Показывает кнопку Help в окне общего диалога Color. Вы можете использовать любые комбинации этих величин для подготов- ки вашего окна общего диалога Color перед тем, как вы его откроете. Для комбинирования двух или более величин используйте оператор 0г (или). Например: CommonDialogl.Flags = &Н1& Or &Н8&
Урок 4. Работа с меню и диалоговыми окнами 141 выводит то же окно общего диалога Color, что и перед этим, но с добавлен- ной кнопкой Help. Вторая строка в процедуре события использует метод ShowColor для от- крытия окна общего диалога Color, а третья строка назначает выбранный цвет свойству ForeColor объекта Labell. Labell из программы Му Menu - это окно метки, которое используется для показа текущего времени и даты на форме. Вы будете использовать цвет, возвращаемый из окна общего диалога Color, для установки цвета текста в метке. Примечание. Окно общего диалога Color может быть использовано для установки цвета любого элемента пользовательского интерфейса, который под- держивает цвет. Другие возможности включают цвет фона формы, цвет рисунков в форме, а также основные и фоновые цвета объектов. Теперь вы будете составлять программный код для процедуры события mnuCloseltem_Click - программы, которая закрывает файл, показываемый в объекте образа, когда щелкают на команде Закрыть в меню Файл. Отредактируйте процедуру события команды Закрыть 1. Щелкните на ниспадающем списке Object (Объект) в окне Code (Код) и затем щелкните на объекте mnuCloseltem в списке. Про- цедура события для команды FileClose появится в окне Code (Код). 2. Наберите следующие программные утверждения (с отсту- пом на четыре пробела) в процедуре события между утверж- дениями Private Sub и End Sub. Используйте функцию LoadPicture с пустыми кавычками для очистки образа или окна образа. Imagel.Picture = LoadPicture ("") mnuCloseltem.Enabled = False Первая строка закрывает открытый метафайл Windows заг- рузкой пустой картинки в объект Imagel. (Эта техника исполь- зуется для очистки графического окна или объекта окна ри- сунка.) Вторая строка делает тусклой команду Закрыть в меню Файл, поскольку больше нет открытого файла. Теперь вы наберете текст в программном коде для процедуры события mnuExitltem_Click подпрограммы, которая останавливает программу, когда
142 Часть 1. Знакомство с Visual Basic щелкают на команде Выход в меню Файл. Это последняя процедура собы- тия в программе. Отредактируйте процедуру события команды Выход 1. Щелкните на объекте m n II Exit item в ниспадающем списке Object (Объект). Процедура события для команды Выход появится в окне Code. 2. Наберите следующее программное утверждение (с отступом на четыре пробела) в процедуре события между утверждения- ми Private Sub и End Sub: End Это утверждение останавливает программу. 3. Закройте окно Code (Код). 4. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов, чтобы записать законченный проект на диск. Visual Basic сохранит ваши изменения в файлах формы и про- екта MyDialog. Теперь вы запустите программу MyDialog и поэкспериментируете с меню и диалоговыми окнами, созданными вами. Запустите программу MyDialog 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа запустится, и оба меню, Файл и Часы, появятся в стро- ке меню. Программа Dialog.vbp находится в папке \Vb6Sbs\LessO4. 2. В меню File (Файл) в форме щелкните на команде Open (От- крыть). Появится окно общего диалога Open (Открыть). Заме- тим, что метафайлы (*.WMF) занесены в окно File of Туре (Файлы типа...). Вы определили эту запись утверждением CommonDialogl.Filter = " Метафайлы (*.WMF) | *.WMF'' в процедуре события mnuOpenltem.Click. Первая часть текста в кавычках - Метафайлы (*.WMF) - определяет пункты, перечис- ляемые в окне File of Туре. Вторая часть — *.WMF - назначает расширение имени файла по умолчанию для файлов, которые будут перечисляться в диалоговом окне.
Урок 4. Работа с меню и диалоговыми окнами 143 3. Откройте папку \vb6Sbs\LessO3 на жестком диске. Образцы ме- тафайлов Windows из папки Less03 появятся в списке файлов, как показано на следующем рисунке. Open Ьмки |~i LeisO3 3'fer Tlil g)jAnswmach. wmf; '-*1 Calcultr.wmf Й Check, wmf Computer, wmf :i*] Copymach.wmf [at] Dollar.wmf Harddisk, wmf Laptopl .wmf a»] Pcomputr.wmf a»| Poundbag. wmf Mi] Printer.wmf s*l Satedish, wmf 4. Дважды щелкните на файле рсоmрUtr.wmf. Изображение ком- пьютера появится в окне образа. Теперь поупражняйтесь в ис- пользовании меню Часы. 5. В меню Часы щелкните на команде Время. В окне метки по- явится текущее время. 6. В меню Часы щелкните на команде ЦветТекста. Появится окно общего диалога Color, как показано на следующем рисунке. Соки tu.'iom Colo's Г.Г ГГЕОЯ Qefrre Custom Colas »
144 Часть 1. Знакомство с Visual Basic Окно общего диалога Color содержит элементы, позволяющие вам менять цвет текста часов в вашей программе. Текущая ус- тановка цвета выделена. 7. Щелкните на светло-голубом блоке, затем щелкните на кноп- ке ОК. Окно общего диалога Color закроется, и цветтекста в мет- ке часов изменится на светло-голубой. 8. В меню Часы щелкните на команде Дата. Текущая дата будет показана светло-голубым текстом. Теперь, поскольку цвет тек- ста был установлен в метке, он останется светло-голубым до тех пор, пока цвет не будет изменен снова или программа не закроется. 9. Щелкните на строке меню Файл. Заметьте, что команда Закрыть теперь разрешена. (Вы разре- шили ее в процедуре события mnilOpenltem_Click, использовав утверждение mnuCloseltem.Enabled = True.) 10. Нажмите клавишу [3], чтобы закрыть Windows-метафайл с изображением компьютера. Файл закроется, метафайл Windows удалится. 11. Щелкните на меню Файл. Команда Закрыть теперь потускне- ла, поскольку нет картинки в окне образа. 12. Щелкните на команде Выход. Программа MyDialog закроется и появится среда программирования Visual Basic. Готово! Вы изучили несколько важных команд и техник для создания меню и диалоговых окон в вашей программе. После того, как вы более под-
Урок 4. Работа с меню и диалоговыми окнами 145 робно изучите программный код, вы сможете применить эти навыки в ва- ших собственных программах. Добавление к программам нестандартных диалоговых окон Как быть, если вам нужно добавить к программе диалоговое окно, ко- | торое не является одним из пяти типов окон общих диалогов? Это не- I сложно, но потребует некоторых оформительских работ. Программа Ь Visual Basic может использовать разные формы для приема и отобра- I жения информации. Для создания нестандартных диалоговых окон I вам потребуется добавить новые формы в вашу программу, добавить I объекты ввода и вывода и написать програмный код для обработки I щелчков мышью в диалоговых окнах. Подробно об этом будет сказано | в уроке 8. В следующем уроке вы узнаете, как использовать два удоб- I ных диалоговых окна, специально разработанных для приема тексто- I вого ввода и отображения текстового вывода. Эти диалоговые окна по- могут заполнить пробел между окнами общих диалогов и такими, | которые вам понадобится создавать самим. Шаг вперед: назначение «быстрых» клавиш для меню Редактор меню также позволяет вам назначать «быстрые клавиши» для ваших меню. Быстрые клавиши - это комбинации клавиш, которые пользователь может нажать для активизации команды без использова- ния строки меню. Например, в типовом меню Edit в приложениях для Windows (таких как Visual Basic) вы можете копировать выделенный текст в буфер обмена, нажав комбинацию клавиш | Ctrl | + fc~|. Попробуйте на- значить быстрые клавиши для меню Часы в программе MyDialog. Назначьте быстрые клавиши для меню Часы I 1. Щелкните на кнопке Menu Editor (Редактор меню) на панели 1 инструментов. Появится редактор меню. 2. Щелкните на команде Время в списке меню. Название и имя команды Время появится в диалоговом окне. Вы назначаете бы- стрые клавиши выбором желательной комбинации клавиш в ниспадающем списке быстрых клавиш. Назначьте | ctrl~| + Г~В~| быстрыми клавишами для команды Время.
146 Часть 1. Знакомство с Visual Basic 3. Щелкните на ниспадающем списке Shortcut (Быстрые клави- ши), прокрутите его вниз и затем щелкните на комбинации I Ctrl | + [51. Petri | + |~в] назначатся как быстрые клавиши для пункта меню Время, и комбинация клавиш появится в списке меню. Вы не можете назначить быстрые клавиши для заголовка меню. 4. Щелкните на кнопке Next. Название и имя команды Дата по- явится в диалоговом окне. Назначьте | Ctrl | + [~5] в качестве быстрых клавиш для этой команды. 5. Щелкните на ниспадающем списке Shortcut (Быстрые клави- ши) и затем щелкните на | Ctrl | + [51. Ваш экран должен выг- лядеть так, как показано на рисунке. Быстрые клавиши 6. Щелкните на кнопке ОК для закрытия редактора меню. Те- перь запустите программу и попробуйте быстрые клавиши. 7. Щелкните на кнопке Start на панели инструментов. 8. Нажмите [Ctrl | + f~B~| для выбора команды Время. Текущее время появится в окне программы. 9. Нажмите [Ctrl | + [51 для выбора команды Дата. Текущая дата появится в окне программы.
Урок 4. Работа с меню и диалоговыми окнами 147 10. Щелкните на строке меню Часы. Быстрые клавиши перечис- лены возле команд Время и Дата. Visual Basic добавил зти комби- нации клавиш, когда вы определили быстрые клавиши с помо- щью редактора меню. 11. В меню Файл щелкните на команде Выход. Программа оста- новится, вы вернетесь в среду программирования. 12. Щелкните на кнопке Save Project (Сохранить проект) для за- писи ваших быстрых клавиш на диск. Чтобы повысить производительность Не пожалейте нескольких минут и поработайте с утилитой Magnify (Уве- личитель) (magnify.vbp) в папке \Vb6Sbs\Extras на вашем жестком диске. Я написал эту программу как расширение программы Dialog, чтобы дать вам возможность попрактиковаться с меню и диалоговыми окнами. Програм- ма позволяет увеличивать битовые изображения намного сильнее, чем обычные графические редакторы. Программа оказалась полезным инст- рументом для просмотра огромного количества битовых изображений, которые я использую в своих проектах для панелей, кнопок и др. Вы мо- жете доработать эту программу или пользоваться ей в ее нынешнем виде. Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 5. Если вы хотите выйти из Visual Basic: >- щелкните в меню File на команде Exit. Если появится диалоговое окно Зауе(Сохранить), щелкните на кнопке Yes. Краткое содержание урока Чтобы Сделайте следующее Кнопка Создать пункт меню Добавить быструю клавишу к пункту меню Щелкните по кнопке Menu Editor и опре- делите название, имя и позицию пунк- та меню. Запустите редактор меню (Menu Editor), щелкните на желаемом пункте меню и затем щелкните на текстовом блоке Caption. Наберите амперсанд (<&) перед буквой, которую вы хотите использо- вать в качестве быстрой клавиши.
148 Часть 1. Знакомство с Visual Basic Чтобы Сделайте следующее Назначить быст- рую клавишу для пункта меню Запустите редактор меню и щелкните на желаемом пункте меню. Назначьте быструю клавишу в ниспа- дающем списке Shortcut. Изменить порядок пунктов меню Запустите редактор меню, щелкните на пункте меню, который вы хотите переместить и щелкните на кнопке £TJ или Щ для перемещения пункта. Использовать стан- дартное диалоговое окно в вашей про- грамме Добавьте объект общего диалога на вашу форму и затем воспользуйтесь одним из пяти методов общих диалогов в вашем программном коде для вывода ди- алогового окна. Сделать меню не- доступным Удалите контрольный значок из командного блока Enabled, связанного с командой меню в редакторе меню. Разрешить коман- ду меню с помощью программного кода Используйте программное утверждение MnuCloseltem. Enabled = True только замените mnuCloseltem именем вашей коман- ды. Очистить графи- ческое окно Используйте программное утверждение Imagel.Picture = LoadPicture
Основы программирования

УРОК " 5 = Урок рассчитан на 50 минут Переменные и операторы Visual Basic Вы научитесь: использовать переменные для хранения данных в ваших программах; вводить данные с помощью функции InputBox; отображать сообщения с помощью функции MsgBox; применять математические операторы и функции в фор- мулах. В части 1 вы узнали, как создавать интерфейс пользователя для программ Microsoft Visual Basic, как создавать и запус- кать программы в среде Visual Basic. В следующих трех уро- ках вы познакомитесь с программным кодом Visual Basic - командами, операторами и ключевыми словами, составля- ющими основу программирования на Visual Basic. Изучив материал части 2, вы будете готовы к освоению более слож- ных задач. В этом уроке вы научитесь использовать переменные для временного хранения данных в вашей программе, исполь- зовать математические операции для выполнения таких действий, как сложение и умножение. Вы также узнаете, как использовать математические функции для выполнения
152 Часть 2. Основы программирования числовых вычислений, как применять функции InputBoXn MsgBox для вво- да и отображения информации с помощью диалоговых окон. Анатомия программных операторов Visual Basic Программный оператор представляет собой особую инструкцию, вос- принимаемую компилятором Visual Basic. Как вы знаете из урока 1, строка с кодом в программе Visual Basic назы- вается программным оператором. Программный оператор может быть любой комбинацией ключевых слов Visual Basic, свойств, функций, опе- раций и символов, совокупность которых представляет собой коррект- ную инструкцию, распознаваемую компилятором Visual Basic. Закончен- ный программный оператор может быть единственным ключевым словом, например Веер, определяющим подачу одиночного звукового сигнала ди- намиком вашего компьютера, или же - комбинацией элементов, как следующий оператор, присваивающий значение системного времени свойству Caption (Надпись) объекта LabeH. । Label1„Caption|=,Time, Имя объекта | | Функция Visual Basic Имя свойства Операция присвоения Правила, используемые при построении программных операторов, назы- ваются синтаксисом. Visual Basic унаследовал многие синтаксические правила, свойственные более ранним версиям языка программирования Basic и другим языкам. Чтобы написать хорошую программу, надо изу- чить синтаксис наиболее полезных команд языка, а затем использовать их в вашей программе для обработки данных. К счастью, Visual Basic зна- чительную часть работы проделывает за вас, тем самым сокращая зат- раты времени при написании программ, а полученные результаты могут быть использованы в дальнейшем при составлении новых программ. В последующих уроках вы познакомитесь с наиболее важными ключе- выми словами Visual Basic и с основными программными операторами. Вы узнаете, как использовать их при программировании. Прежде всего, вы познакомитесь с типами переменных и данных, составляющих основу любой программы.
Урок 5. Переменные и операторы Visual Basic 153 Использование переменных для хранения информации Переменная представляет собой временное хранилище для данных в ва- шей программе. В тексте вашей программы вы можете использовать одну или несколько переменных, которые могут содержать слова, числа, даты или свойства. Переменные полезны тем, что позволяют присваивать ко- роткий и легко запоминающийся идентификатор для данных, которые вы планируете использовать. Переменные могут содержать информацию, введенную пользователем в ходе выполнения программы, полученную в результате вычислений, или же данные, которые вы хотели бы отобра- зить в экранной форме. Короче говоря, переменные являются простым и полезным средством для использования практически любого типа инфор- мации. Процесс использования переменных в программе Visual Basic чем-то по- ходит на заказ столика в модном ресторане. Вы можете начать ее исполь- зовать в любой момент, но лучше позаботиться об этом заранее. Процесс резервирования, или объявления переменных, будет описан в следующих двух разделах. Резервирование переменных с указанием размера Оператор Dim вызывает резервирование определенной области под пе- ременную. Чтобы объявить переменную, прежде чем начать ее использовать, вы должны написать имя переменной после оператора Dim (от dimension — размерность). Тем самым резервируется пространство в памяти, исполь- зуемое переменной при выполнении программы, a Visual Basic будет знать, с каким типом данных ему придется иметь дело. Например, следу- ющий оператор выделяет пространство для переменной с именем LastName: Dim LastName После имени переменной вы, при желании, можете задать ее тип. (Об ос- новных типах данных вы узнаете далее в этом уроке.) Visual Basic позво- ляет заранее определить тип переменной, чтобы вы могли управлять объемом памяти, используемым вашей программой. Например, если пе- ременная будет содержать относительно небольшое целое число, вы мо- жете определить переменную как целое (integer) и сэкономить некоторое место в памяти. По умолчанию Visual Basic резервирует место под пере- менную типа вариант (variant), которая может хранить данные любого
154 Часть 2. Основы программирования размера или формата. Такие типы переменных допускают значительную гибкость использования, и они могут быть единственным типом перемен- ных, используемым в ваших программах. Вы загружаете данные в определяемую переменной область памяти, используя оператор присвоения (=). Объявив переменную, вы можете присвоить ей информацию в тексте ва- шей программы. Например, следующий оператор присваивает перемен- ной LastName фамилию «Джеферсон». LastName = “Джефесон" После этого присвоения переменная LastName может быть использована вместо слова «Джеферсон» в тексте вашей программы. Например, опе- ратор Labell .Caption = LastName отобразит слово Джеферсон в качестве надписи для объекта Labell (Поле метки) в вашей форме. Объявление переменных без указания размерности Вы можете объявить переменную и без использования оператора Dim: этот процесс называется неявным объявлением. В этом случае вы просто ис- пользуете переменную, не выделяя специально под нее память с помо- щью оператора Dim. LastName = "Чарли В” Неявное объявление более удобно в том смысле, что вам не нужно тра- тить время на ввод оператора Dim для переменной, но с точки зрения уп- равления ресурсами программы это не всегда хорошо, поскольку при неявном объявлении у вас меньше возможностей контролировать распре- деление памяти для переменных, а в случае, если вы в дальнейшем не- правильно введете имя переменной, Visual Basic не обнаружит ошибки. (См. примечание.) В этой книге используются оба способа объявления пе- ременных. Примечание. Если вы решили всегда объявлять переменные с использованием опе- ратора Dim, вы должны поместить оператор явного задания Option Explicit в разделе объявления переменных загружаемой формы. Вы можете делать это автоматически для каждого проекта, щелкнув на команде
Урок 5. Переменные и операторы Visual Basic 155 Options (Параметры) в меню Tools (Сервис), активизировав вкладку Editor (Редактор) и установив флажок Require Variable Declaration (обязатель- ное объявление переменной). При использовании функции Option Explicit Visual Basic выдает сооб- щение об ошибке в тех случаях, когда находит переменную, не объяв- ленную в тексте программы. (Наиболее вероятная причина этого - орфографическая ошибка в имени переменной.) Если вы хотите вы- являть ошибки в правописании, то этот оператор будет для вас весь- ма полезен. Использование переменных в программе Переменные могут сохранять одно и то же значение в ходе выполнения программы, а могут и изменять его несколько раз. В следующем примере демонстрируется, что переменная с именем LastName может содержать и текст, и числовые значения, а также может быть назначена в качестве свойства объекта. Как изменить значение переменной 1. Запустите Visual Basic. 2. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project. 3. Откройте проект VarTest в папке \Vb6Sbs\LessO5. Проект Variable Test откроется в среде программирования Visual Basic. Программа Variable Test содержит форму с полями и кноп- ками для отображения выходных данных, но при этом имеет очень небольшой текст программы. В этом упражнении вы до- бавите несколько строк в текст программы. 4. Выделите имя формы в окне Project (Проект), затем щелкни- те на кнопке View Object (Просмотр объекта) в окне Project. На экране будет отображена форма Variable Test, как показано на рисунке.
156 Часть 2. Основы программирования Форма содержит два поля и две командные кнопки. Вы исполь- зуете переменные для отображения информации в каждом из полей. 5. Дважды щелкните на кнопке Показать. В окне Code будет отображена процедура Command1_Click. 6. Введите следующие операторы для объявления и использо- вания переменной LastName: Dim LastName LastName = "Быстро” Labell .Caption = LastName LastName = 99 Label2.Caption = LastName Переменные могут использоваться для назначения свойств. Операторы в программе разбиты на три группы. В первом операторе коман- дой Dim объявляется переменная LastName. Поскольку для объявленной пе- ременной явно не указывается тип, для нее по умолчанию используется тип вариант третьей строке переменной LastName присваивается текстовая стро- ка «Быстро», которое отображается в первом поле формы. Тем самым де- монстрируется один из наиболее распространенных способов использова- ния переменных в программе - для передачи информации свойству. В четвертой строке переменной LastName присваивается число 99. Эта опе- рация приводит к удалению текстовой строки из переменной и замене ее числовым значением. Число не заключено в кавычки. В кавычки заклю- чаются только текстовые строки, но не числа. (Если вы заключите число в кавычки, оно будет интерпретироваться как текстовая строка и не смо- жет быть использовано в математических формулах.) Ваш экран должен выглядеть так, как показано на рисунке.
Урок 5. Переменные и операторы Visual Basic 157 7. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа будет запущена в среде Visual Basic. 8. Щелкните на кнопке Показать. Программа осуществит объявление переменных, два раза при- своит им значения и скопирует их в поля формы. Выходные данные будут выглядеть следующим образом. * .--lai a, V.ni.ible Те. I 9. Щелкните на кнопке Выход для останова программы. Работа программы будет завершена, и вы вернетесь в про- граммное окружение.
158 Часть 2. Основы программирования 10. Сохраните внесенные вами изменения в форму как файл MyVarTest.frm, воспользовавшись Командой Save As (Сохранить как) и введя соответствующее имя файла. Сохраните проект с внесенными изменениями в виде файла с именем MyVarTest.vbp с помощью команды Save Project As (Сохранить проект как). Соглашения для присвоения имен переменным При присвоении переменным имен следует выбирать адекватные и легко запоминающиеся имена. Во избежание недоразумений для при- своения имен приняты следующие соглашения. Каждое имя следует начинать с буквы. Это обязательное требование Visual Basic. Имя не должно быть длиннее, чем 256 символов, и не должно содержать точек. Выбирайте описательные имена, объединяя несколько слов в имени переменной, чтобы облегчить понимание на- значения переменных. Например, имя переменной SalesTaxRate гораздо понятнее, чем просто Тах или Rate. Пользуйтесь сочетанием строчных и прописных букв, а также цифр. Согласно принятому соглашению, первая бук- ва каждого слова в имени переменной должна быть заг- лавной, например DateOfBirth. Нельзя использовать в качестве имен переменных клю- чевые слова Visual Basic, названия объектов или свойств. Использование переменных для хранения входных данных Входные данные можно ввести, воспользовавшись функцией ввода InputBox и соответствующей переменной. Очень удобно использовать переменную для хранения информации, вве- денной пользователем. Вы можете использовать объект (например, поле списка файлов или текстовое поле) для хранения этой информации, но часто бывает нужно сохранить данные в виде переменной, а не в каче- стве свойства. Одним из способов сделать это является использование функции InputBox, что приводит к отображению диалогового окна на экра- не, в котором вы можете ввести текст, присваиваемый переменной. В сле- дующем примере вы попробуете это проделать.
Урок 5. Переменные и операторы Visual Basic 159 Ввод данных с помощью функции InputBox 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project. 2. Откройте проект InputBox из папки \Vb6Sbs\LessO5. Будет открыт проект InputBox. Программа InputBox содержит формы с кнопками и полем для отображения выходных дан- ных и минимум текста самой программы. 3. Выделите форму в окне Project (Проект), а затем щелкните на кнопке View Object (Просмотр объекта) в окне Project. Форма Input Box Test будет представлена на экране. Она содер- жит одно поле и две командные кнопки. Воспользуйтесь функ- цией InputBox для ввода данных пользователем, а затем отобра- зите введенные данные в поле формы. 4. Дважды щелкните на командной кнопке Поле ввода. В окне Code будет отображена процедура Command1_Click. 5. Введите следующие операторы для описания двух перемен- ных и вызова функции InputBox. Dim Prompt, FullName Prompt = "Введите, пожалуйста, свое имя" FullName = lnputBox$(Prompt) Labell .Caption = FullName Вы объявили с помощью операторов Dim две переменных: Prompt и FullName. Во второй строке переменной Prompt присваивается набор символов, или текстовая строка. Это сообщение будет использовано как текстовый аргумент для функции InputBox (Поле ввода). (Аргумент представляет собой значение или вы- ражение, следующее за именем процедуры или функции.) В следующей строке вызывается функция InputBox (Поле ввода), а полученное в ней значение (текст, введенный пользователем) присваивается переменной FullName. InputBox (Поле ввода) явля- ется специальной функцией Visual Basic, отображающей на экране диалоговое окно с запросом на ввод данных пользова- телем. Помимо запроса-подсказки, функция InputBox предус- матривает использование и других аргументов. За дополни- тельными разъяснениями обращайтесь к оперативной справочной системе Visual Basic.
160 Часть 2. Основы программирования ► После того, как данные об имени пользователя, введенные с помощью функции InputBox (Поле ввода), присвоены перемен- ной, четвертый оператор процедуры помещает имя пользова- теля в качестве свойства Caption (Надпись) объекта Labell (Поле метки), т.е. поля вывода формы. 6. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа будет запущена. 7. Щелкните на кнопке Поле ввода. Visual Basic начнет выполнять процедуру Command1_Click, и на экране появится диалоговое окно InputBox: 8. Введите ваше полное имя, затем щелкните на кнопке ОК. Функция InputBox возвращает программе ваше имя, которое помещается в переменную FullName. Затем программа исполь- зует переменную для отображения вашего имени в поле фор- мы. Input Box Totter Вы можете обращаться к функции InputBox в любом месте ва- шей программы, когда необходим ввод данных от пользовате- ля. Ее также можно применять в сочетании с другими средства- ми управления вводом и выводом данных в программе. В
Урок 5. Переменные и операторы Visual Basic 161 следующем упражнении вы научитесь пользоваться этой фун- кцией для отображения текста в диалоговом окне. 9. Щелкните на кнопке ВЫХОД для останова программы. Програм- ма завершит работу, и вы вернетесь в среду программирова- ния Visual Basic. 10. Сохраните вашу форму и изменения в проекте под именем MylnputBox. Что такое функция? InputBox — ключевое слово Visual Basic, которое является функци- ей. Функция представляет собой оператор, выполняющий определен- ные действия (например, запрос пользователю на ввод информации или вычисления в формуле), а затем возвращающий результат своей работы в программу. Возвращенное функцией значение может быть присвоено переменной, как это было сделано в программе MylnputBox, или же присвоено свойству, другому оператору или функции. Функ- ции в Visual Basic часто используют для своей работы один или не- сколько аргументов. Например, рассмотренная функция InputBox ис- пользует переменную Prompt для отображения в диалоговом окне инструкции пользователю. Если функция использует один или не- сколько аргументов, они отделяются друг от друга запятыми, а весь набор аргументов заключается в скобки. В следующем операторе вы- зывается функция с двумя аргументами: । FullName,у,InputBoxS,(Prompt, Title) Имя переменной I Аргументы Операция присвоения Имя функции Использование переменных для вывода данных Вы можете отобразить содержимое переменной, назначив эту перемен- ную свойству (например, свойству Caption (Надпись) для объекта в виде поля) или использовав ее в качестве аргумента функции диалогового окна. Весьма полезной является функция отображения выходных данных в диалоговом окне MsgBox. Как и функция InputBox, она использует один или несколько аргументов в качестве входов, а результирующее значение функции может быть присвоено переменной. Синтаксис функции MsgBox следующий:
162 Часть 2. Основы программирования ButtonClicked = MsgBox (Message, IMumberOfButtons, Title) где Message представляет собой текст, который будет отображен на экра- не, NumberOfButtoп — номер кнопки (от 1 до 5), a Title — текст, отображаемый в заголовке окна. Переменной ButtonClicked присваивается результат, воз- вращаемый функцией, который указывает, какая из кнопок диалого- вого окна была выбрана. Функция М\$$Вох.исполъзуется для отображения в диалоговом окне тек- стовой строки. Она поддерживает несколько возможных аргументов. Если вам требуется лишь отобразить сообщение, то вы можете обойтись без оператора присвоения (=), переменной ButtonClicked и аргумента NumberOfButtons. В следующем упражнении вы не будете их использовать. Для получения более подробной информации о функции (в том числе и о различных кнопках, которые могут быть использованы в функции MsgBox) обратитесь к справочной системе Visual Basic. Сейчас вы добавите функцию MsgBox в программу МуInputBox, чтобы ото- бразить имя пользователя, введенное в диалоговом окне InputBox. Отобразим сообщение с помощью функции MsgBox 1. Дважды щелкните на кнопке Поле ввода в форме MylnputBox. В окне Code будет отображена процедура Command1_Click. (Текст этой процедуры вы ввели в прошлом упражнении.) 2. С помощью мыши выделите следующий оператор в тексте процедуры (последняя строка): Labell .Caption = FullName Этот оператор отображает содержимое переменной FullName в поле формы. 3. Нажмите клавишу | Del | для удаления строки. Строка будет удалена из окна Code. 4. Введите следующую строку вместо удаленной: MsgBox (FullName),, "Введенные данные" Этот оператор осуществит вызов функции MsgBox, отобразит содержимое переменной в диалоговом окне и поместит строку Input Results (Введенные данные) в заголовок окна. (Возможные аргументы NumberOfButtons и ButtonClicked опущены.) Текст вашей процедуры будет выглядеть так:
Урок 5. Переменные и операторы Visual Basic 163 'w Project I - Formi (Code) £' ;F”f7 ; |Comm»n<» >:1clicl< : ,, , Ж ж Private Sub Commandl_Click() \ Dini Prompt, FullName ъ- . - Prompt = "Введите пожалуйста свое имя" 5 FullName = InputBoxS (Prompt) : |ИздВох (FullName), , "Введенные данные" ' ' End Sub ; Примечание. Если переменная ButtonClicked не используется, в скобки заключается только первый аргумент. 5. Щелкните на кнопке Start (Пуск) на панели инструментов. 6. Щелкните на кнопке Поле ввода, введите ваше имя в поле вво- да, затем щелкните на кнопке ОК. Введенные данные будут записаны в переменную FullName, а затем отображены в окне сообщения. Ваш экран будет выгля- деть, как показано ниже: Введенные данные Е 7. Щелкните на кнопке ОК для закрытия окна сообщения. За- тем щелкните на кнопке Выход для закрытия программы. Программа будет закрыта, а вы вернетесь в программное ок- ружение. 8. Сохраните форму и проект под именем MyMsgBox, чтобы иметь копию вашей программы.
164 Часть 2. Основы программирования Работа с различными типами данных В большинстве случаев вам понадобятся только данные типа вариант, которые являются основным типом переменных в Visual Basic, использу- емым по умолчанию с автоматической установкой требуемого формата. Этот тип данных прост в использовании и избавляет вас от раздумий от- носительно размера объявляемой переменной. Тем не менее, если вы хо- тите создать компактную и быстро исполняемую программу, у вас может возникнуть потребность в использовании более эффективных типов дан- ных. Если для переменной всегда используется один и тот же тип данных, вы можете увеличить производительность работы вашей программы, объявив для переменной ее тип. Например, если переменная всегда содержит небольшое целое число (без десятичной части), вы можете сэкономить место в памяти, выделяемое для работы вашей программы, объявив переменную как целое (integer), а не как вариант. Использование переменной типа integer увеличивает также скорость выполнения арифметических операций, что приводит к более быстрой работе программы. В следующей таблице приведены основные типы данных в Visual Basic. В следующем упражнении вы узнаете, как использовать некоторые из них. Размер переменной измеряется в байтах — единице объема памяти, спо- собной хранить 8 бит (один символ). Тип данных Размер Диапазон значений Пример использования Integer (Целое) 2 байта от - 32 768 до 32 767 Dim Birds% Birds% = 37 Long Integer (Длинное целое) 4 байта от- 2 147 483 648 до 2 147 483 647 Dim Loan& Loan& = 350,000 Single-precision Floating point (Одинарной точности с плавающей десятичной точкой) 4 байта ОТ- 3.402823Е38 до 3.402823Е38 Dim Price! Price! = 899.99
Урок 5. Переменные и операторы Visual Basic______165 Тип данных Размер Диапазон значений Пример использования Double precision Floating point (Двойной точности с плавающей десятичной точкой) 8 байт от - 1.79769313486232D308 до 1.79769313486232D308 Dim Pi# Pi# = 3.1415926535 Currency (Денежные единицы) 8 байт от - 922337203685477.5808 до 922337203685477.5807 Dim Debt© Debt® = 7600300.50 String 1 байт от 0 до 65 535 символов Dim Dog$ (Строка) на символ Dog$ = "pointer" Boolean (Логический) 2 байта True (Истина) или False (Ложь) Dim Flag as Boolean Flag = True Date (Дата) 8 байт от January (Январь), 1, 100 до December (Декабрь) 31 9999 Dim Birthday as Date Birthday = #3-1-63# Variant 16 байт для всех типов данных Dim Total (Вариант) (для чисел); Total = 289.13 22 байта + 1 байт на символ (для строк) Примечание. Основные типы данных вы можете задать, добавив описание типа в строку с объявлением переменной. Например, вы можете объявить для переменной тип integer (целые), добавив символ % после ее име- ни. В Visual Basic два следующих оператора эквивалентны: Dim 1 As Integer Dim 1 %
166 Часть 2. Основы программирования Использование основных типов данных в тексте программы 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project. 2. Откройте проект Data из папки \Vb6Sbs\LessO5. Проект Data будет открыт в среде программирования Visual Basic. Data является законченной программой Visual Basic, де- монстрирующей, как работают различные типы данных. Запу- стив программу, вы увидите форматы для различных типов данных, а затем посмотрите, как они объявлены и использова- ны в тексте программы. Программа Data демонстрирует использование различных типов дан- ных в тексте программы. Д|| 3. Щелкните на кнопке Start (Пуск) на панели инструментов. Появится следующее окно: Программа Data дает вам возможность поэкспериментировать с девятью типами данных, включая целые числа, числа с пла- вающей запятой и даты. После щелчка мышью на интересую- щем вас типе данных в списке программа отображает пример для этого типа.
Урок 5. Переменные и операторы Visual Basic 167 4. Щелкните на типе Integer (Целые) в списке. Число 37 появится в поле образца Пример данных. 5. Щелкните на типе Date (Дата) в списке. Дата «Вторник, Ноябрь 19,1963» появится в поле образца При- мер данных. 6. Щелкайте на каждом типе данных в списке, чтобы увидеть, как они отображаются в поле образца Пример данных. 7. Щелкните на кнопке Выход для останова программы. Теперь посмотрим, как объявляются основные типы данных и как они используются в процедуре Listl_Click. 8. Выделите форму в окне Project, затем щелкните на кнопке View Object (Просмотр объекта). 9. Дважды щелкните на объекте поля списка в форме и уве- личьте размеры окна Code, чтобы увидеть большую часть тек- ста программы. Текст процедуры Listl _Click выглядит так: ЛЙ Project! - Formi (Code] C7RFS '{ustC 17,..... p'riv^e Liscl_Cliick() j§| \ | ‘ Секция объявления переиешшх /< Dim Birds%, Loans, Price!, Pie#, Debt0, Dog$, Total Dim Flag As Boolean ' ! Dim Birthday As Date ! Определение вь’бора пользонателя и показ примера Select Case Listl.Listindex Case О f Birds% =37 — Labe 14.Caption = Birds% Case 1 / Loans = 350000 «/; Label4.Caption = Loans , Case 2 ~ Price! - -1234.123 Sji I.... 1-^' । t .1 Первые строки процедуры содержат объявления переменных с разными типами данных. Эти переменные будут локальны- ми для процедуры, т.е. не будут действовать в других процеду-
168 Часть 2. Основы программирования рах программы. Несколько переменных описаны с использо- ванием специальных символов, таких как %, # и @. Эти симво- лы определяют для каждой переменной особый тип данных, что воспринимается компилятором Visual Basic, а также другими людьми, просматривающими текст вашей программы. Следующий раздел процедуры представляет собой структуру с условиями типа Select Case. В следующем уроке мы подробнее познакомимся с этой структурой, позволяющей делать выбор из нескольких вариантов. Сейчас же просто обратим внимание, что в каждом разделе блока Select Case осуществляется присво- ение значений с определенным типом данных содержимому объекта Label4 формы. Типы данных, описанных в программе Data, особенно полезны, если вы планируете регулярно работать с данными в формате даты и времени. Дата, присвоенная переменной Birthday, заклю- чена в символы # и форматируется с помощью функции Format. Примечание. Переменные могут быть и общими (public), т.е. доступными для всех процедур и модулей программы. (Модули представляют собой специ- альные файлы, содержащие объявления и процедуры, не связанные с данной формой.) Такие переменные должны быть объявлены в стан- дартном модуле. Более подробно о создании общих переменных гово- рится в уроке 10 «Использование модулей и процедур». 10. Прокрутите окно Code и внимательно рассмотрите каждую из переменных. При желании вы можете изменить данные в некоторых опера- торах присвоения значения переменным и, снова запустив про- грамму, посмотреть, как выглядят эти новые данные. 11. Закончив, закройте окно Code. Если вы произвели изменения и хотите их сохранить, щелкни- те на кнопке Save Project (Сохранить проект) на панели инстру- ментов.
Урок 5. Переменные и операторы Visual Basic 169 Типы данных, определяемые пользователем Visual Basic позволяет вам создавать собственные типы данных. Эта особенность весьма полезна, если вы имеете дело с группой элемен- тов данных, связанных между собой по смыслу, но относящихся к раз- ным категориям. Создав определяемый пользователем тип с помощью оператора Туре, вы можете объявить переменные, ассоциированные с этим новым типом, с помощью оператора Dim. (Оператор Dim должен находиться в разделе объявлений Declarations стандартного модуля; чтобы побольше узнать о стандартных модулях, обратитесь к строке module в справочной системе Visual Basic.) Например, в следующем объявлении создается определяемый пользователем тип данных с именем Employee, который может использоваться для хранения име- ни, даты рождения, даты поступления на работу определенного со- трудника. Type Employee Name As String DateOfBirth As Date HireDate As Date End Type Создав новый тип данных, вы можете использовать его в тексте про- граммы. Следующие операторы используют новый тип данных Employee. Первый оператор создает переменную с именем ProductManager с типом Employee, а второй оператор присваивает составляющей Name переменной значение «Эрик Коди». Dim ProductManager As Employee ProductManager.Name = "Эрик Коди" Выглядит как задание свойства, не так ли? В Visual Basic использует- ся сходная нотация для отношений между объектами и свойствами и для отношений между составляющими переменных для типов дан- ных, определяемых пользователем.
170 Часть 2. Основы программирования Константы: переменные, которые не изменяются Если переменная в вашей программе содержит значение, которое никог- да не изменяется (например, л - фиксированная математическая посто- янная), то лучше использовать вместо переменной константу. Констан- та представляет собой условное имя, используемое вместо числа или текстовой строки, не подлежащих изменению. Константы дают возмож- ность повысить удобочитаемость текста программы, их использование по- зволяет экономить память, с их помощью гораздо проще осуществить гло- бальные изменения. Действие констант во многом схоже с действием переменных, но их значение не может быть изменено в ходе выполнения программы. Они объявляются с помощью ключевого слова Const, как по- казано в следующем примере: Const Pi = 3.14159265 Этот оператор создает константу Pi, которая может быть использована в программе вместо значения л. Чтобы константа была доступна всем про- цедурам программы, вы должны создать ее в стандартном модуле, запи- сав ключевое слово Public перед описанием константы. Например: Public Const Pi = 3.14159265 I Примечание. I Более подробно о стандартных модулях говорится в уроке 10 «Исполь- I зование модулей и процедур». I Следующее упражнение демонстрирует, как вы можете использовать константу в процедуре. Использование константы в процедуре 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). Появится диалоговое окно Open Project. 2. Откройте проект Constant из папки \Vb6Sbs\LessO5. 3. Щелкните на кнопке View Object (Просмотр объекта) в окне Project. Форма программы Constant появится на экране. Программа Constant является схематичной. Интерфейс пользователя раз- работан полностью, но вам следует ввести текст программы. 4. Дважды щелкните на кнопке Показать константу формы.
Урок 5. Переменные и операторы Visual Basic 171 В окне Code будет отображена процедура Commandl_Click. 5. Введите следующие операторы в процедуру: Const Pi = 3.14159265 LabeH.Caption = Pi 6. Щелкните на кнопке Start (Пуск) для запуска программы. 7. Щелкните на кнопке Показать константу. Константа Pi будет отображена в поле, как показано на рисун- ке: 8. Щелкните на кнопке Выход для останова программы. Если вы хотите сохранить копию измененной программы Constant, сохраните форму и проект под именем MyConstant. Константы весьма полезны в тексте программы, особенно если они ис- пользуются в математических формулах, например площадь = 2лг2. В следующем разделе описано, как использовать операции и переменные для написания формул. Работа с основными математическими операторами Visual Basic Формула представляет собой оператор, содержащий числа, переменные, операции и ключевые слова или же комбинацию этих элементов, и созда- ющий новое значение. Для использования в формулах в языке Visual Basic предусмотрено несколько элементов. В этом разделе вы поработаете с математическими операциями, узнаете о символах, используемых в фор- мулах. За немногими исключениями, математические символы, исполь- зуемые в операторах Visual Basic, совпадают с традиционно используе- мыми. В следующем упражнении вы с ними познакомитесь.
172 Часть 2. Основы программирования Операция Математическое действие + Сложение Вычитание х Умножение / Деление \ Целая часть от деления Mod Остаток от деления Возведение в степень & Слияние (конкатенация)строк Основные математические операторы: * и/ Операции сложения, вычитания, умножения и деления не нуждаются в пояснениях: они могут быть использованы в любых формулах, опериру- ющих с числами или числовыми переменными. В следующем упражне- нии демонстрируется, как использовать их в программе. Работа с основными операторами 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). 2. Откройте проект BasicOp из папки \Vb6Sbs\LessO5. 3. Выделите форму в окне Project, затем щелкните на кнопке View Object (Просмотр объекта). Появится форма для программы Basic Operators. Эта программа демонстрирует действия операторов сложения, вычитания, умножения и деления над числами, вводимыми с клавиатуры. Она также показывает, как использовать текстовые поля, кноп- ки выбора и командные кнопки для ввода данных пользовате- лем. 4. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа Basic Operators будет запущена в среде программи- рования Visual Basic. Она отобразит два текстовых поля, в ко- торые вы будете вводить числовые значения, группу кнопок выбора операции, текстовое поле для отображения результа- тов, а также командные кнопки.
Урок 5. Переменные и операторы Visual Basic 173 Объект текстовое поле является полезным средством для ввода дан- ных пользователем с клавиатуры. 5. Введите 100 в текстовое поле Переменная 1, затем нажмите клавишу | Tab |. Курсор ввода переместится в следующее текстовое поле. 6. Введите 17 в текстовое поле Переменная 2. Теперь вы можете выполнить над числами в текстовых полях какую-либо математическую операцию. 7. Щелкните на кнопке выбора Сложение, затем щелкните на командной кнопке Вычислить. Действие сложения будет применено к двум числам, и в поле Результат появится значение 117, как показано на рисунке: S. Basic Operator Tester ' I I IcpeMCHiiau 1 Jiiio Переменная 2 П"? Оператор <• Сложение (+) Г Вычитание (-1 ; Г Умножение Г) Г Деление И Результат Выход 8. Попрактикуйтесь в применении операций вычитания, умно- жения и деления над числами в полях переменных. (Для вы- числения по каждой из формул щелкайте на кнопке Вычислить.) Результат появляется в поле Результат. Поэкспериментируйте с различными числами в полях переменных. (Если хотите, мо- жете использовать числа с десятичными дробями.) 9. Закончив вычисления, щелкните на кнопке Выход. Теперь обратимся к тексту программы, чтобы посмотреть, ка- ким образом получаются результаты. В программе Basic Operators используются стандартные средства управления входными данными, освоенные вами в уроке 3, а также процедура, исполь- зующая переменные и операторы для вычисления простых математических формул. В процедуре также используется
174 Часть 2. Основы программирования функция Vai, преобразующая текстовую строку, введенную в полях ввода, в числа. Рассмотрим текст программы Basic Operators 1. Дважды щелкните на кнопке ВЫЧИСЛИТЬ формы. В окне Code будет отображена процедура Command1_Click. Я Project! - Form! (Code) Private Sub Commandl_Click() Dim First, Second 'Объявляем переменные First = Vai(Textl.Text) 'Присваиваем значения перем Second = Vai(Text2.Text) ' Если выбрана первая кнопка, If Optionl.Value = True Then Labell.Caption = First + End If 1 Если выбрана вторая кнопка, If Option2.Value = True Then Labell.Caption = First - End If 'если выбрана третья кнопка, складываем переменные Second вычитаем переменные Second умножаем переменные Первый оператор процедуры объявляет две переменных обще- го использования типа вариант. В них будут храниться значе- ния, введенные в текстовых полях. Этот тип переменных дос- таточно гибок для использования с любыми числовыми данными. Следующие два оператора загружают данные из тек- стовых полей в переменные и преобразуют текстовые строки в числа с помощью функции Vai. First=Vai (Textl .Text) 'Присваиваем значения переменным и конвертируем их в числовой формат Second = Vai (Text2.Text) Функция Vai преобразует текстовый аргумент в числовое зна- чение. Это преобразование необходимо для корректного выпол- нения последующих операций в программе. По умолчанию дан-
Урок 5. Переменные и операторы Visual Basic 175 ные, введенные в текстовое поле, представляются текстовой строкой. Операторы -, * и / работают только с числами, поэто- му при выборе пользователем одной из этих операций Visual Basic автоматически преобразует значения, присвоенные пе- ременным First и Second, в числа. функция Vai преобразует текст в числовое значение. Оператор + работает как с текстовыми строками, так и с чис- лами. Поскольку по умолчанию введенные данные возвраща- ются в виде текста, Visual Basic интерпретирует значения First и Second как текст при применении операции сложения. Visual Basic осуществит объединение, или конкатенацию, вместо того, чтобы арифметически сложить значения. (Например, «100» + «17» будет равно «10017».) О конкатенации строк вы узнаете в следующем упражнении. На данный момент просто уясните для себя, что несмотря на то, что данные типа вариант могут содержать любой основной тип данных, вам необходимо внимательно проверить, как они используются в программе. В противном случае результат мо- жет быть весьма неожиданным. Внимание! Всегда очень важно проверять каждое вычисление, чтобы быть уве- ренным в правильности работы программы. Проверки только части программы недостаточно. 2. Прокрутите содержимое окна Code и рассмотрите четыре формулы, использующие основные математические операции. В первой формуле процедуры используется операция сложе- ния (+) в структуре условия If...Then: 'Если выбрана первая кнопка, складываем переменные If 0ption 1 .Value = True Then Labell .Caption = First + Second End If Если свойство Value (Значение) первой кнопки выбора установ- лено в True (Истина) (если был щелчок мышью на кнопке), то переменные суммируются операцией +, а результат присваи- вается содержимому поля. В трех остальных формулах исполь- зуется тот же принцип: в каждой из них применяется струк- тура If...Then и свойство Caption (Надпись) объекта Labell (Поле метки). Структура с условием If...Then очень полезна при опре-
176 Часть 2. Основы программирования делении, какая из опций (кнопок выбора) выбрана пользовате- лем. В следующем уроке вы более подробно познакомитесь со структурой If...Then. 3. Закройте окно Code. Вы завершили работу с программой Basic Operators. Математические функции Visual Basic Скорее всего, в ваших программах вам понадобится осуществлять и более сложные вычисления. Вам может потребоваться преобразовы- вать тип данных или же вводить элемент случайности. Следующие функции Visual Basic помогут вам в этом. Как и все остальные функ- ции, математические функции следует использовать в операторах программы; они возвращают программе значение. В следующей таб- лице аргумент п соответствует числу, переменной или выражению, которое используется в качестве входного значения функции. Функция Действие Abs(n) Возвращает абсолютное значение п. Atn(n) Возвращает арктангенс п, в радианах. Cos(n) Возвращает косинус угла п. Угол п выражен в радиа- нах. Exp(n) Возвращает константу е в степени п. Rnd(n) Генерирует случайное число между 0 и 1. Sgn(n) Возвращает -1, если п меньше 0; 0, если п равно 0; и +1, если п больше 0. Sin(n) Возвращает синус угла п. Угол п выражен в радианах. Sqr(n) Возвращает квадратный корень п. Str(n) Преобразует числовое значение в строку. Tan(n) Возвращает тангенс угла п. Угол п выражен в радиа- нах. Val(n) Преобразует строку в числовое значение.
Урок 5. Переменные и операторы Visual Basic 177 Использование дополнительных операторов: \, Mod, Л и & В дополнение к четырем основным математическим операциям, в Visual Basic имеются четыре дополнительных оператора, вычисляющих целую часть от деления (\), остаток от деления (Mod), возведение в степень (*) и конкатенацию строк (&). Эти операторы полезны в специальных матема- тических формулах и при обработке текстовой информации. Следующая утилита (небольшая модификация программы Basic Operators) показыва- ет, как можно использовать каждую из этих операций в программе. Работа с дополнительными операциями 1. В меню File (Файл) щелкните на команде Open Project (Открыть проект). 2. Откройте проект AdvOp из папки \Vb6Sbs\LessO5. 3. Выделите форму в окне Project, затем щелкните на кнопке View Object (Просмотр объекта). Форма для программы Advanced Operators будет отображена на экране. Программа Advanced Operators идентична программе Basic Operators, за исключением названий операций для кнопок выбо- ра и используемых в программе операций. 4. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа отобразит два текстовых поля, в которые вы може- те вводить числовые значения, группу кнопок выбора для опе- раций, поле для отображения результатов и две командные кнопки. 5. Введите 9 в текстовое поле Переменная 1, затем нажмите кла- вишу | Tab |. 6. Введите 2 в текстовое поле Переменная 2. Теперь вы можете применить к значениям в текстовых полях любую из операций. 7. Щелкните на кнопке выбора Целое от деления, затем щелкните на кнопке Вычислить. Операция будет выполнена над двумя значениями, а в поле Ре- зультат появится число 4, как показано на рисунке:
178 Часть 2. Основы программирования йн Advanced Operator Tester Переменная 1 f П«1ПЛЬЛ«11Л1 J brt rw^KSaWCnfneSV *» |2 “ Целое отдел J\j f Остдазкотдед- В результате операции вычисления целого от деления получа- ется целое число. Хотя 9, деленное на 2, дает 4.5, в результате этой операции остается только целая часть (число 4). Это дей- ствие полезно, если вы работаете с количественными характе- ристиками, которые не допускают дробных долей, например, с количеством пассажиров, которые могут сесть в машину. 8. Щелкните на кнопке выбора Остаток от деления, а затем щелк- ните на кнопке Вычислить. В поле Результат появится число 1. Операция взятия остатка от деления возвращает число, остающееся после целочисленного деления одного числа на другое. Поскольку целая часть от де- ления 9 на 2 равна 4, то в остатке будет 1 (2 х 4 + 1 = 9). Опера- тор Mod может быть полезен, например, для получения остат- ка денежных средств после заключения финансовой сделки. 9. Щелкните на кнопке выбора Возведение в степень, затем щелк- ните на кнопке Вычислить. В поле Результат появится число 81. Оператор возведения в сте- пень (*) вычислит 92, что равно 81. На языке формул Visual Basic это запишется как 9*2. 10. Щелкните на кнопке выбора Конкатенация, затем щелкните на кнопке Вычислить. В поле Результат появится строка «92». Оператор конкатенации (&) объединяет две строки. Результат («92» в данном случае) не является числом; это объединение символов «9» и «2». Кон- катенация строк может быть выполнена только над тексто- выми переменными, т.е. строками, ограниченными кавычками, и переменными типа вариант. Поскольку используемым в этой программе переменным присвоен тип вариант, они автомати-
Урок 5. Переменные и операторы Visual Basic 179 чески преобразуются в текст при применении к ним этой опе- рации. Чтобы увидеть, как она работает с буквами, введите не- сколько слов в каждое поле переменных, а затем снова щелк- ните на кнопке Считать. 11. Щелкните на кнопке Выход для останова программы. Программа завершит работу, и вы вернетесь в программное окружение. Теперь обратимся к тексту процедуры Command1_Click, чтобы увидеть, как используются операторы. 12. Дважды щелкните на кнопке Считать в форме. В окне Code будет отображен текст процедуры, как показано на рисунке: ’ll Project! - Form! (Code] < oinmand! Click Private Sub Coiratiandl_Click () Dim First, Second 1 объявляем переменные First = Textl.Text |second = Text2.Text ' если выбрана первая кнопка, If Optionl.Value = True Then Labell.Caption = First \ End If ' если выбрана вторая кнопка, If Option2.Value = True Then Labell.Caption = First Hod Second End If 'присвоение значений из полей вычисляем целое от де, Second вычисляем остаток от д 1 если выбрана третья кнопка, возводим первую переме If Options.Value = True Then Labell.Caption = First A Second End If 1 если выбрана четвертая кнопка, выполняем конкатена If Option4.Value = True Then Labell.Caption = First £ Second End If End Sub
180 Часть 2. Основы программирования Эта процедура Commandl_Click выглядит похожей на процеду- ру Command1_Clickn3 программы Basic Operators. В тексте объяв- лены две переменные типа вариант, переменным назначены данные из полей ввода, затем осуществляются вычисления формул, выбираемых в соответствии с условиями структуры It...Then. Тем не менее, имеется одно существенное отличие: в этой про- цедуре не используется функция Vai для преобразования дан- ных в числовые значения при чтении их из полей ввода. В зтом преобразовании нет необходимости, поскольку в отличие от оператора +, каждый из дополнительных операторов работа- ет только с одним типом данных: \, Mod и ” работают только с числами, а & — только с текстом. Поскольку конфликтов не возникает, переменные типа вариант адекватно преобразуют- ся в числа для операций, работающих с числами. 13. Закройте окно Code. Вы завершили работу с программой Advanced Operators. Приоритеты операций В последних двух упражнениях вы работали с семью математическими действиями и одним действием над строками. Visual Basic позволяет объе- динять несколько математических операций в формуле. Например, воз- можна такая формула: Total = 10 + 15 * 2/4 Л 2 В формуле обрабатываются несколько значений, а результат присваи- вается переменной с именем Total. Но как эти вычисления будут выпол- няться Visual Basic? Другими словами, какую математическую операцию Visual Basic будет выполнять первой при расчете формулы? Следует об- ратить внимание, что порядок действий имеет важнейшее значение в этом примере. Порядок выполнения операций следует иметь в виду при построении математических формул. Visual Basic решает эту проблему путем назначения приоритета опера- ций. Это список правил, сообщающий Visual Basic, какую операцию не- обходимо выполнить первой для вычисления в формуле, содержащей более одного оператора. В следующей таблице приведен порядок, в соот- ветствии с которым должны выполняться операции. (Операторы с оди-
Урок 5. Переменные и операторы Visual Basic 181 лаковым приоритетом выполняются в порядке их следования в выраже- нии слева направо.) Оператор Приоритет при выполнении () Выражение в скобках всегда вычисляется первым. Возведение в степень выполняется вторым. Отрицание (присвоение числу отрицательного значения) выполняется третьим. * / Умножение и деление выполняется четвертым. \ Взятие целого от деления - пятым. Mod Взятие остатка от деления - шестым. + - Сложение и вычитание — последним. В соответствии с порядком вычисления выражение Total = 10 + 15 * 2 / 4 Л 2 рассчитывается Visual Basic в следующей последовательности. (Полу- жирным выделены выполняемые в данный момент действия и результа- ты.) Total = 10 + 15 * 2 / 4 Л 2 Total = 10+ 15 *2/16 Total = 10+ 30/16 Total = 10+ 1.875 Total = 11.875 Шаг вперед: использование скобок в формуле Скобки облегчают чтение формулы и влияют на порядок вычислений Вы можете использовать одну или несколько пар скобок в формуле, что- бы задать порядок вычисления. Например, Visual Basic будет вычислять формулу Number = (8 - 5 * 3)Л 2, подсчитав сначала значение выражения в скобках (-7), прежде чем вы- полнить возведение в степень - даже несмотря на то, что эта операция имеет больший приоритет, чем вычитание и умножение. Вы можете из- менить порядок вычислений, расставив скобки в формуле. Например: Number = ((8 - 5) * 3) Л 2
182 Часть 2. Основы программирования предписывает Visual Basic вычислить разность внутри скобок, затем осу- ществить умножение и лишь затем - возведение в степень. Результат вычисления этих двух формул будет различным: в первой формуле он равен 49, а во второй он равен 81. Помимо изменения порядка выполне- ния действий, скобки делают формулу более легко читаемой. Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 6. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Объявить перемен- ную Наберите Dim, а затем имя переменной в тексте программы. (Вы также можете задать тип данных; по умолчанию принимается тип вариант.) Напри- мер: Dim Temp% ‘Целое Dim Storage ‘Переменное Изменить значение переменной Присвойте новое значение с помощью оператора присвоения (=). Например: Country = "Япония" Получить входные данные через диало- говое окно Используйте функцию InputBox и присвойте ее ре- зультат переменной. Например: UserName = InputBox (“Как вас зовут?1') Отобразить выход- ные данные в диало- говом окне Используйте функцию MsgBox. (Строка, отобража- емая в диалоговом окне, может быть присвоена переменной.) Например: ForeCast = "Возможно, пойдет дождь” MsgBox (ForeCast),, "Сообщение синоптиков"
Урок 5. Переменные и операторы Visual Basic 183 Чтобы Сделайте следующее Объявить перемен- ную для данных особого типа Наберите Dim, затем имя переменной, потом сим- вол типа переменной, ши наберите Dim, затем имя переменной, потом клю- чевое слово As и один из восьми основных типов дан- ных. Например: Dim MyBirthday As Date 'Тип данных Dim Price! 'плавающая точка Создать константу Наберите ключевое слово Const, затем имя констан- ты, оператор присвоения (=) и фиксированное зна- чение. Например: Const JackBennysAge = 39 Создать формулу Соединить числовые переменные с помощью мате- матических операторов, а затем присвоить резуль- тат переменной или свойству. Например: Result = 1 Л 2 * 3 \ 4 'это равно 0 Объединить тек- стовые строки Использовать оператор конкатенации строк (&). Например: Msg = "Здравствуй" & & "мир!" Преобразовать текстовые символы в число Используйте функцию Vai. Например: Pi = Vai ("3.1415926535897932") Использовать ма- тематическую функцию Добавьте функцию и необходимые для нее аргумен- ты в формулу. Например: Hypotenuse = Sqr (СС Л 2 + UU Л 2) Задать порядок вы- числения в форму- ле Используйте скобки в формуле. Например: Result = 1 + 2 Л 3\4 'это равно 3 Result = (1 +2) л (3\4) 'это равно 1

УРОК « к 6« к |Ж1«1ВЯЯВ1«ЖМ1ВМ1111ЯВЖ«11В1«1118В1111118Н1Ж«Я1 $ «I ж в : Использование sструктур : с условиями к $ ------------------------------------- • * Вы научитесь: создавать выражения с условиями; $ с помощью оператора If.. .Then создавать ветви в програм- уР°к * ме в зависимости от условия; рассчитан * на и использовать оператор Select Case для перехода к одной 45 минут * из нескольких ветвей в программе при наличии выбора; & * находить и исправлять ошибки в тексте вашей програм- в мы. ____________________________________ 2 В последних уроках вы использовали средства Visual Basic « для обработки введенных пользователем данных. Вы пользо- * вались меню, объектами и диалоговыми окнами для отобра- « жения действий пользователя, присваивали введенные зна- ж чения свойствам и переменным. В этом уроке вы научитесь « осуществлять в программе ветвления с помощью условных & ж переходов в зависимости от введенных пользователем дан- “ ных. Вы узнаете, как получать значения для свойств или ж переменных в зависимости от вычисления условного выра- « жения, а затем выполнять тот или иной оператор. Вы также н научитесь искать ошибки в вашей программе с помощью режима останова в контрольных точках.
186 Часть 2. Основы программирования Управление программой по прерываниям Программы в Visual Basic управляются по прерываниям. Написанные вами при изучении этой книги программы отображают меню, объекты, диалоговые окна и дают возможность пользователю манипули- ровать элементами на экране. Программа выводит необходимую инфор- мацию, терпеливо ожидает реакции пользователя, а затем обрабатывает введенные им данные. Среди программистов такой принцип работы на- зывается управлением по прерываниям. При построении программы вы создаете ряд «умных» объектов, которые умеют взаимодействовать с пользователем, а затем обрабатываете введенные данные с помощью про- цедур, ассоциированных с этими объектами. На следующей диаграмме показано, как программа с управлением по прерываниям работает в Visual Basic. Резчльтл й Advanced Operator Тester Получение объектом входных данных Обработка входных данных процедурой прерывания пернтор отдел № Выход Возврат управле- ния пользователю Входные данные в программе могут поступать и от системных устройств самого компьютера. Например, ваша программа должна отслеживать момент прихода электронной почты или отсчитывать определенный пе- риод времени по системным часам. Эти события вызываются компьюте- ром, а не пользователем. Вне зависимости от причины возникновения со- бытия, Visual Basic реагирует на него, вызывая процедуру обработки прерывания, ассоциированную с объектом, распознающим это событие. Хотя до этого вы имели дело в основном с событиями Click (Щелчок) и Change (Изменение), объекты Visual Basic могут работать с несколькими типами событий. Принцип работы с управлением по прерываниям в Visual Basic означает, что большинство вычислений в ваших программах будет выполняться процедурами обработки прерывания (события). Эти связанные с событи- ями программные блоки осуществляют обработку входных данных, вы-
Урок 6. Использование структур с условиями 187 числение новых значений, отображение выходных данных, а также уп- равление другими задачами. В предыдущем уроке вы научились исполь- зовать переменные, операторы и математические формулы для выпол- нения вычислений в ваших процедурах обработки событий. В этом уроке вы узнаете, как использовать структуры с условиями для сравнения переменных, свойств и значений, а также как выполнять тот или иной программных блок в зависимости от полученного результата. В следую- щем уроке вы познакомитесь с циклами, используемыми для выполне- ния группы операций. Количество повторений цикла задается условием. Эти структуры для управления потоком данных будут весьма полезны при построении ваших процедур, поскольку охватывают практически все возможные ситуации. События, поддерживаемые объектами Visual Basic Каждому объекту в Visual Basic соответствует определеный набор со- бытий. Для каждого объекта эти события содержатся в открывающем- ся списке Proc (Процедуры) в окне текста программы Code. Вы можете написать процедуру обработки прерывания для каждого из этих со- бытий и, в том случае, если событие имеет место в программе, Visual Basic выполняет связанную с ним процедуру обработки прерывания. Например, объект «список»поддерживает события Click, DbICIick, DragDrop, DragOver, GotFocus, Item Check, KeyDown, Keyllp, LostFocus, MouseDown, MouseMove, MouseUp, OLEComleteDrag, OLEDragDrop, OLEDragOver, OLEGiveFeedBack, OLESetData, OLEStartDrag, и Scroll. Возможно, вам понадо- бится для вашей программы только одно или два из этих событий, но следует знать, каким богатым выбором элементов для организации вашего интерфейса вы располагаете. На следующем рисунке показа- на часть списка событий для объекта «список» в окне Code. ЛИ Projectl - Fortnl (Code) M|Form jfJ I Click Private Sub Form Clict lO'ick End Sub DbICIick Deactivate DragDrop DragOver Private Sub Form Load GotFocus Initialize KeyDown KeyPress KeyUp LinkClose LinkError End Sub лИ
188 Часть 2. Основы программирования Использование выражений с условиями Условные выражения запрашивают о значении Истина (True) или Ложь (False). Одним из наиболее полезных средств, используемых при обработке ин- формации в процедуре, являются условные выражения. Условное выра- жение представляет собой часть программного оператора, запрашиваю- щую об истинности или ложности свойства, переменной или другого элемента данных в тексте программы. Например, условное выражение Price < 100 имеет значение True (Истина), если переменная Price содержит значение, меньшее 100, или имеет значение False (Ложь), если переменная Price со- держит значение большее или равное 100. В условных выражениях мож- но использовать операторы сравнения, приведенные в таблице. Оператор сравнения Значение = равно <> не равно > больше < меньше > = больше или равно < = меньше или равно Примечание. Выражения, принимающие значения True (Истина) или False (Ложь), также известны как Булевы выражения, а результат True (Истина) или False (Ложь) может быть присвоен Булевой переменной или свойству. Вы можете присвоить Булево значение определенному свойству объекта, переменной типа вариант или Булевой переменной, создан- ной с использованием оператора Dim с ключевыми словами As Boolean. В таблице приведены некоторые условные выражения и их результаты. В следующем упражнении вы используете эти операторы. Условное выражение Результат 10 <> 20 True (Истина) (10 не равно 20). Score < 20 True (Истина), если Score меньше 20; в противном случае False (Ложь).
Урок 6. Использование структур с условиями 189 Условное выражение Результат Score = Labell .Caption True (Истина), если свойство Caption объекта Labell содержит то же значение, что и переменная Score; в противном случае False (Ложь). Textl .Text = “Список" True (Истина), если слово Список является содер- жимым первого текстового поля; в противном случае False (Ложь). Структура с условием lf...Then Структура с условием If... Then позволяет использовать логические зна- чения в вашей программе. Условные выражения дают возможность управлять порядком выполне- ния операторов в программе, если зти выражения используются внутри специального блока операторов, известного как структура с условием. Структура с условием If...Then позволяет анализировать логические зна- чения выражений и выполнять определенные действия в зависимости от результата. В простейшем случае структура с условием If...Then записы- вается в виде одной строки: If условие Then оператор где условие представляет собой условное выражение, а оператор- опе- ратор Visual Basic. Например, оператор If Score >= 20 Then Labell .Caption = "Вы победили!" является структурой с условием If...Then, использующей условное выра- жение Score >= 20 для указания программе, нужно ли устанавливать для свойства Caption объекта Labell значение «Вы победили!». Если переменная Score содержит значение, которое больше или равно 20, Visual Basic устанавливает свой- ство Caption; в противном случае оператор присвоения пропускается, а выполняется следующий оператор в тексте программы. Результатом этого вида сравнения будет значение True (Истина) или False (Ложь). Проверка нескольких условий в структуре с условием lf...Then Visual Basic также поддерживает структуру с условием If...Then, в кото- рую может быть включено несколько условных выражений. Такой блок
190 Часть 2. Основы программирования операторов может состоять из нескольких строк и содержать важные ключевые слова Elself, Else, End If. Операторы, Elself и Else позволяют задавать дополнительные ограниче- ния в структуре с условием If...Then. If условие! Then . операторы, выполняемые если условие! истинно Elself условие2 Then операторы, выполняемые если условие2 истинно [Здесь могут находиться дополнительные блоки Elself и операторы] Else операторы, выполняемые если ни одно из условий не является истинным End If В этой структуре условие! вычисляется первым. Если оно имеет значе- ние True (Истина), выполняется расположенный за ним блок операторов. (Здесь может быть как один, так и несколько программных операторов.) Если первое условие не имеет значение True (Истина), вычисляется вто- рое условное выражение (условие2). Если второе условие имеет значение True (Истина), выполняется второй блок операторов. (Вы можете ввести дополнительные условные операторы Elself и блоки при анализе большего числа условий.) Наконец, если ни одно из условных выражений не при- нимает значение True (Истина), выполняются операторы под ключевым словом Else. На закрытие структуры указывают ключевые слова End If. Многострочные структуры If...Then прекрасно подходят для вычисле- ния значений, относящихся к разным диапазонам, например при рас- чете налогов. Следующий фрагмент программы иллюстрирует использование много- строчной структуры If...Then для расчета платежей с прогрессивным та- рифом. If Adjustedlncome <= 23350 Then ' 15% налогов TaxDue = Adjustedlncome * 0.15 Elself Adjustedlncome <= 56550 Then 1 28% налогов TaxDue = 3502 + ((Adjustedlncome -23350)* 0.28) Elself Adjustedlncome <= 117950 Then ' 31 % налогов TaxDue = 12798 + ((Adjustedlncome -56550)* 0.31) Elself Adjustedlncome <= 256500 Then 1 36% налогов TaxDue = 31832 + ((Adjustedlncome -117950)* 0.36) Else 1 39.6% налогов TaxDue = 81710 + ((Adjustedlncome -256500)* 0.36) End If
Урок 6. Использование структур с условиями 191 В этой структуре с условиями для переменной Adjustedlncome проверяет- ся, какому диапазону значений она соответствуют и по какой формуле должен рассчитываться тариф. Такое использование структуры весьма полезно для расчета платежей при гибкой тарифной системе. В случае изменения правил для тарифов достаточно просто изменить соответству- ющее выражение в условии. Внимание! Порядок следования условных выражений в структуре If...Then очень важен. Если вы измените порядок условных выражений в приведен- ном выше примере расчета платежей (допустим, расположите их в об- ратном порядке), плательщики, ставки для которых составляют 15, 28 и 31 процент, будут платить по ставке 36 процентов, поскольку их до- ход меньше или равен 256 500. (Visual Basic останавливается на первом же выражении, имеющем значение True (Истина), даже если осталь- ные выражения также истинны.) Поскольку для всех условных выра- жений в примере используется одна и та же переменная, ставки пла- тежей следует располагать в возрастающем порядке, чтобы уровень платежей соответствовал уровню дохода. Вывод: при использовании нескольких условных выражений будьте особенно внимательны. В следующем упражнении вы используете структуру с условиями If.. .Then для идентификации пользователя и загрузки соответствующей програм- мы. Подобная логика используется при написании сетевых приложений. Идентификация пользователя с помощью структуры lf...Then 1. Запустите Visual Basic. Если Visual Basic уже запущен, откройте новый проект. 2. С помощью кнопки управления CommandButton (Командная —। кнопка) создайте командную кнопку в верхнем левом углу фор- мы. 3. Установите для свойства Caption (Надпись) значение «Вход». 4. Дважды щелкните на кнопке Вход. В окне Code будет отображена процедура обработки прерыва- ния Command1_Click. 5. Введите следующие операторы в процедуру:
192 Часть 2. Основы программирования UserName = InputBox ("Введите Ваше имя.") If UserName = "Лаура" Then MsgBox (“Добро пожаловать, Лаура! Готовы к включению Вашего PC?") Forml.Picture = _ LoadPicture ("c:\vb6sbs\less06\pcomputr.wmf") Elself UserName = “Марк" Then MsgBox ("Добро пожаловать, Марк! Готовы к показу Вашей картотеки?") Form1.Picture = _ LoadPicture (“c:\vb6sbs\less06\rolodex.wmf") Else MsgBox ("Извините! Я Вас не знаю.") End 'завершение программы Endlf В соответствии с принятым соглашением, строки под операторами If...Then, Elself и Else имеют увеличенный отступ от левого края. Символ продолжения строки (_), используемый после опера- тора Forml .Picture, позволяет разбить слишком длинные строки на две. Если не хотите, можете и не переносить строки; окно Code допускает прокрутку вправо, если строка не помещается на экране целиком. Примечание. Длина одной строки в тексте программы в окне Code Visual Basic мо- жет составлять до 1023 символов. Однако гораздо удобнее, если дли- на строки не превосходит 80 символов. С помощью символа (_) вы мо- жете разбивать длинные команды и операторы на несколько строк, помещая этот символ в конце каждой из строк, кроме последней. (Тем не менее, вы не можете использовать символ переноса строки, заклю- ченной в кавычки.) По завершении работы ваш экран должен выглядеть так, как показано на рисунке.
Урок 6. Использование структур с условиями 193 Private Sub Commandl_Click() | UserName = InputBox("Введите Ваше имя.") If UserName = "Лаура" Then HsgBox ("Добро пожаловать, Лаура! Готовы к включению Ваше Forml.Picture = LoadPicture("ср \vb6sbs\less06\pcomputr.umf") Elself UserName = "нарк" Then HsgBox ("Добро/пожаловать, Марк! Готовы к показу Вашей га Forml.Picture F LoadPicture/"c/\vb6sbs\less06\rolodex.umf") Else HsgBox ("Изв/пжте! Я Вас не знаю") End :Завершение программы End If End Sub Символ переноса строки Законченная программа Login находится в папке \Vb6Sbs\LessO6. 6. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа будет запущена в среде программирования окру- жении Visual Basic. 7. Щелкните на кнопке Вход. Функция InputBox в процедуре обработки прерывания Command1_Click отобразит диалоговое окно с запросом на ввод вашего имени. 8. Введите имя Лаура и нажмите клавишу | Enter |. Структура с условием If.. .Then сравнит введенное вами слово со словом «Лаура» в первом условном выражении. Если вы ввели «Лаура», условное выражение примет значение True (Истина), и оператор If...Then отобразит сообщение-приветствие с помо- щью функции MsgBox. 9. Щелкните на кнопке ОК в окне сообщения. Окно сообщения будет закрыто, а метафайл Windows с изоб- ражением компьютера загружен в вашу форму, как показано на следующем рисунке.
194 Часть 2. Основы программирования В этой программе метафайл Windows непосредственно загру- жается в форму с использованием свойства Picture (Рисунок). (Формы, как и объекты изображений и рисунков, имеют свой- ство Picture.) При загрузке графического изображения в форму оно отображается на заднем плане. Все видимые элементы уп- равления формы располагаются на переднем плане. 10. Щелкните на кнопке Вход, введите Марк, затем щелкните на кнопке ОК. При этом структура If...Then переходит к опера- тору Elself, который разрешает Марку войти в систему. Привет- ственное сообщение снова выдается функцией MsgBox. 11. Щелкните на кнопке ОК, чтобы отобразить картинку Rolodex. Метафайл Windows Rolodex будет загружен в форму. 12. Щелкните на кнопке Вход, введите Фраза, затем щелкните на кнопке ОК. Структура If...Then переходит к оператору Else, в результате выполнения которого появится следующее сообще- ние: Login |й >1 Извините! Я Вас не знаю ' бк 1 .........।
Урок 6. Использование структур с условиями 195 13. Щелкните на кнопке ОК для закрытия окна сообщения. Окно сообщения будет закрыто, а программа завершит работу. Посторонний пользователь не сможет войти в систему. 14. Сохраните форму под именем MyLogin.frm, а проект - под именем MyLog in.vbp. Использование логических операторов в условных выражениях Логические операторы позволяют вам проверять условия. Visual Basic допускает использование нескольких условных выражений в операторах If...Then и Elself, что очень удобно при наличии нескольких критериев выбора. Дополнительные условия связываются между собой с помощью следующих логических операций: Логическая операция Действие And Если оба условных выражения имеют значения True (Истина), то результирующим значением также будет True (Истина). Or Если одно из условных выражений имеет значе- ние True (Истина), то результирующим значени- ем также будет Тrue (Истина). Not Если условное выражение имеет значение False (Ложь), то результирующим значением будет Тrue (Истина). Если же условное выражение имеет значение True (Истина), то результирующим зна- чением будет False (Ложь). Хог Если одно и только одно условное выражение имеет значение True (Истина), то результирую- щим значением будет True (Истина). Если оба ус- ловных выражения имеют значения True (Исти- на), либо False (Ложь), то результирующим значением будет False (Ложь). Примечание. Если программа вычисляет сложное выражение, содержащее различ- ные типы операторов, первыми выполняются математические опера- ции, затем операции сравнения, а потом логические операции.
196 Часть 2. Основы программирования В следующей таблице приведены некоторые примеры действий логичес- ких операторов. В этих выражениях подразумевается, что переменная Vehicle содержит значение «Велосипед», а переменная Price содержит зна- чение 200. Логическое выражение Результат Vehicle = "Велосипед" And Price < 300 Vehicle = "Машина" Or Price < 500 Not Price < 100 Vehicle = "Велосипед” Xor Price < 300 True (Истина) (оба выражения имеют значения True (Истина)) True (Истина) (одно условие имеет значения True (Истина)) True (Истина) (условие имеет значения False (Ложь)). False (Ложь) (оба условия име- ют значения True (Истина)). В следующем упражнении вы модифицируете программу MyLogin, чтобы она предлагала ввести пароль для идентификации пользователя. Для вво- да пароля будет использоваться диалоговое окно, а затем вы измените структуру If...Then и оператор Elself, чтобы в них для проверки пароля ис- пользовалась операция And. Добавление защиты с помощью пароля при использовании операции And 1. Откройте процедуру Command1_Click в окне Code. 2. Вставьте следующий оператор между оператором InputBox и оператором If...Then (между первой и второй строками). Pass = InputBox ("Введите Ваш пароль.") 3. Модифицируйте оператор If...Then следующим образом: If UserName = “Лаура" And Pass = "Май17" Then Оператор теперь включает логический оператор And, который проверяет имя пользователя и пароль, прежде чем Лаура смо- жет войти в систему. 4. Модифицируйте оператор Elself следующим образом: Elself UserName = "Марк" And Pass = “трек" Then
Урок 6. Использование структур с условиями 197 Логический оператор And вводит дополнительную проверку на ввод пароля «трек». Законченная программа Password находится в папке \Vb6Sbs\LessO6. 5. Сохраните форму как MyPass.frm и проект как MyPass.vbp. 6. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа будет запущена в среде программирования Visual Basic. 7. Щелкните на кнопке Вход, введите имя Лаура и щелкните на кнопке ОК. Программа попросит ввести пароль. 8. Введите Май17 и щелкните на кнопке ОК. Условное выражение с оператором And примет значение True (Истина), и Лаура получит доступ к программе. 9. Щелкните на кнопке ОК, чтобы закрыть окно сообщения. 10. Щелкните на кнопке End (Конец) на панели инструментов, чтобы выйти из программы. Работа программы будет завершена, и вы вернетесь в среду программирования. Примечание. Если вы пишете полноценную программу MyPass, используйте для вво- да пароля объект текстовое поле. Объект текстовое поле поддер- живает свойство PasswordChar (Символ при вводе пароля), которое по- зволяет отображать некий шаблонный символ, например, звездочку (*), по мере ввода символов пароля пользователем, а также свойство MaxLength (Максимальная длина), которое позволяет ограничить коли- чество вводимых символов. Структуры с условием Select Case Структуры с условием Select Case позволяют сделать выбор среди не- скольких вариантов в программе в зависимости от значения условного выражения.
198 Часть 2. Основы программирования Visual Basic позволяет контролировать выполнение операторов в вашей программе с помощью структуры с условием. Ранее вы уже использова- ли структуру Select Case при написании процедур обработки полей со спис- ком, полей с альтернативным выбором и для выбора пункта из меню. Структура Select Case похожа на структуру If...Then...Elself, но она более эффективна в том случае, если ветвление зависит от значения только одной ключевой переменной. Вы также можете использовать структуру Select Case, чтобы ваша программа была более эффективной и удобочитае- мой. Синтаксис структуры Select Case следующий: Select Case переменная Case значение! Программные операторы, выполняемые при условии совпадения значе- ния! и переменной Case значениеЗ Программные операторы, выполняемые при условии совпадения зна- чения2 и переменной Case значениеЗ Программные операторы, выполняемые при условии совпадения зна- ченияЗ и переменной End Case Структура Select Case начинается ключевыми словами Select Case и заканчи- вается ключевыми словами End Select. Вместо слова переменная вы можете использовать переменную, свойство или другое выражение, которое явля- ется ключевым значением, или проверяемым условием выбора, для дан- ной структуры. Вместо слов значение!, значениеЗ и значениеЗ можно ис- пользовать числа, текстовые строки или другие переменные, относящиеся к проверяемому условию. Если одно из этих значений соответствует зна- чению переменной, выполняются операторы, относящиеся к соответству- ющему оператору Case, после чего Visual Basic продолжает выполнение программы с операторов, следующих за End Select. Вы можете использовать любое количество операторов Case в структуре, а также использовать бо- лее одной переменной для операторов Case. При использовании нескольких переменных в операторе выбора отделяйте их запятыми. В приведенном ниже примере демонстрируется использование структу- ры Select Case для вывода программой нужного сообщения, характеризу-
Урок 6. Использование структур с условиями 199 ющего тот или иной возраст человека. Если значение переменной Аде со- впадает со значением в одном из операторов Case, в поле метки отобра- жется соответствующее сообщение. Select Case Age Case 16 LabeH.Caption = "Вы уже можете водить машину!" Case 18 LabeH .Caption = "Вы уже можете принимать участие в выборах!" Case 21 LabeH .Caption = "Вы можете пить вино за обедом." Case 65 LabeH .Caption = "Вы можете уйти на пенсию и наслаждаться жизнью!" End Select Структура Select Case выглядит более удобной для восприятия, чем со- ответствующая структура If...Then. Структура Select Case также поддерживает вариант Case Else, используе- мый в том случае, если ни одно из значений не соответствует значению переменной в заголовке структуры. Вот пример для вывода сообщений относительно возраста человека: Select Case Case 16 LabeH.Caption = "Вы уже можете водить машину!" Case 18 LabeH.Caption = "Вы уже можете принимать участие в выборах!" Case 21 LabeH.Caption = "Вы можете пить вино за обедом." Case 65 LabeH.Caption = "Вы можете уйти на пенсию и наслаждаться жизнью!” Case Else LabeH.Caption = "У вас солидный возраст! Гордитесь этим!!" End Select В случае, если значение возраста (переменная Аде) равно 16, программа выдает сообщение «Вы уже можете водить машину!». Если возраст равен 21, программа выдает сообщение «Вы уже можете принимать участие в выборах!». Если возраст равен 21, программа выдает сообщение «Вы мо- жете пить вино за обедом». Если возраст равен 65, программа выдает со- общение «Вы можете уйти на пенсию и наслаждаться жизнью!». Если возраст не равен ни одному из указанных значений, программа выдает сообщение «У вас солидный возраст! Гордитесь этим!».
200 Часть 2. Основы программирования Использование операций сравнения в структуре Select Case Структура Select Case, как и структура If.. .Then, допускает использова- ние операций сравнения. Visual Basic позволяет вам использовать операции сравнения, чтобы иметь возможность проверки по нескольким критериям в структуре Select Case. В качестве операции сравнения Visual Basic используются операторы =, <>, >,<,>= и <=. Чтобы использовать операции сравнения, нужно вклю- чить в выражение ключевое слово Is или ключевое слово То. Ключевое слово Is дает указание компилятору сравнить значение проверяемой пе- ременной со значением выражения, следующего после слова Is. Ключе- вое слово То задает диапазон значений. В следующей структуре исполь- зуются ключевые слова Is, То и несколько операций сравнения для проверки переменной Аде и отображения одного из пяти сообщений: Select Case Age Case Is < 13 Labell .Caption = "Радуйтесь детству!" Case 13 To 19 Labell.Caption = "Радуйтесь юности!" Case 21 Labell .Caption = "Вы можете пить вино за обедом." Case Is > 100 Labell .Caption = "Прекрасно выглядите!" Case Else Labell.Caption = "Прекрасный возраст." End Select Если значение переменной Age меньше 13, отображается сообщение «Ра- дуйтесь детству!». Если значение переменной Аде находится в диапазоне от 13 до 19, отображается сообщение «Радуйтесь юности!». В случае, если возраст равен 21 году, выводится сообщение «Вы можете пить вино за обедом.». Если возраст больше 100, выдается сообщение «Прекрасно выг- лядите!». Если значение возраста не равно ни одному из предложенных диапазонов значений, выводится сообщение «Прекрасный возраст.». Структура Select Case обычно гораздо лучше воспринимается, чем эквива- лентная ей структура If...Then, она также гораздо более эффективна в слу- чае трех и более возможных разветвлений в программе в зависимости от значений одной переменной. Тем не менее, если вам необходимо выпол- нить две и более операций сравнения, или если вы работаете с несколь- кими различными переменными, вам, вероятно, удобнее будет использо- вать структуру If...Then.
Урок 6. Использование структур с условиями 201 В следующем упражнении вы увидите, как используется структура Select Case для обработки входных значений из поля со списком. Вы используе- те свойства Listl.Text и Listl.Listindex для получения входных данных, а за- тем воспользуетесь структурой Select Case для отображения приветствен- ного сообщения на одном из четырех языков. 1. В меню File (Файл) щелкните на команде New Project (Создать проект), чтобы создать новое стандартное приложение. В среде программирования появится пустая форма. 2. Щелкните на кнопке управления Label (Поле метки) на пане- ли инструментов, затем создайте большее поле вверху и в се- редине формы для отображения заголовка программы. аЗ. Щелкните на кнопке управления ListBox (Поле списка) на па- нели инструментов, затем создайте поле вверху списка под по- лем для заголовка программы. 4. Создайте над полем списка небольшое поле метки, а затем создайте два маленьких поля метки под полем списка для ото- бражения выходных данных программы. 5. Щелкните на кнопке управления CommandButton (Командная кнопка) на панели инструментов, затем создайте небольшую командную кнопку в нижней части формы. И, 6. Щелкните на кнопке управления Properties Window (Окно I свойств) на панели инструментов, затем установите свойства для объектов формы в соответствии с таблицей. Объект Свойство Labell Caption (Надпись) Font (Шрифт) Label2 Caption (Надпись) Label3 Caption (Надпись) Label4 Caption (Надпись) BorderStyle (Тип рамки) ForeColor (Цвет надписи) Commandl Caption (Надпись) Устанавливаемое значение Международная программа приветствий Times N ew Roman, Bold, 14-point Выберите страну (Пусто) (Пусто) 1 - Fixed Single (Одинарная сплошная линия) Dark red (Темно-красный) (&Н00000080&) Выход
202 Часть 2. Основы программирования Примечание. При установке русского шрифта Times New Roman в открывающем- ся списке Script (Оригинал) щелкните на Cyrillic. После установки свойств ваша форма должна выглядеть сле- дующим образом: ; Международная программа приветствий Выберите страну Теперь введем текст программы для инициализации поля со списком. 7. Дважды щелкните на форме. В окне Code появится процедура Form_Load. 8. Введите следующий текст для инициализации поля со спис- ком: Listl .Additem "Англия" Listl .Additem "Германия" Listl .Additem "Испания" Listl .Additem "Италия" Listl .Additem "Россия" Для загрузки значений в поле со списком используется команда Additem. В этих строках для объекта типа поле со списком вашей фор- мы используется команда Additem для добавления элементов списка.
Урок 6. Использование структур с условиями 203 9. Откройте открывающийся список объектов, затем щелкните на объекте с именем Listl. В окне Code появится процедура Listl_Click. 10. Введите следующие строки, описывающие процесс обработ- ки элементов, выбранных пользователем из списка: Label3.Caption = Listl .Text Select Case Listl.Listindex Case 0 Label4.Caption = "Hello, programmer" Case 1 Label4.Caption = "Hello, programmierer" Case 2 Label4.Caption = "Hola, programador” Case 3 Label4.Caption = "Ciao, programmator" Case 4 Label4.Caption = "Привет, программист" End Select Свойство Listindex содержит номер выбранного элемента спис- ка. Первая строка осуществляет копирование выделенного эле- мента списка в свойство надписи для третьего поля метки в форме. Присвоение осуществляется с помощью оператора Listl .Text, который содержит текст выбранного элемента спис- ка. Остальные операторы являются составными частями струк- туры с условием Select Case. Структура использует свойство Listl.Listindex в качестве проверяемого условия и сравнивает его с различными значениями. Свойство Listindex всегда содержит номер выбранного элемента в списке; первый элемент имеет номер 0 (нуль), второй элемент имеет номер 1, третий элемент имеет номер 2, и т.д. С помощью свойства Listindex структура Select Case может быстро идентифицировать выбор пользовате- ля и отобразить в форме нужно приветственное сообщение. 11. Откройте открывающийся список объектов, затем щелкни- те на объекте с именем Command). В окне Code появится процедура Command1_Click. 12. Введите слово End в текст процедуры, затем закройте окно Code.
204 Часть 2. Основы программирования 13. Сохраните форму на диске под именем MyCase.frm, затем сохраните проект под именем MyCase.vbp. 14. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы MyCase. 15. Последовательно щелкайте мышью на каждом названии страны в списке Выберите страну. Программа будет отображать приветствия на языке каждой из стран в списке. На следующем рисунке показано приветствие на русском языке. й Form! [~7Г“! Международная программа приветствий Выберите страну Законченная программа Case находится в папке \Vb6Sbs\LessO6. 16. Щелкните на кнопке Выход для завершения работы програм- мы. Программа будет остановлена, и вы вернетесь в программное окружение. На этом работа со структурой Select Case в этом уроке закончена. Поиск и исправление ошибок Процесс поиска и исправления ошибок в программе называется отлад- кой. Вы наверняка уже совершали ошибки в программах, которые могли быть простыми опечатками или синтаксическими ошибками. Но что делать,
Урок 6. Использование структур с условиями 205 если в вашей программе обнаружилась более сложная проблема, кото- рую вы не можете выявить и исправить обычным просмотром объектов, свойств и операторов? В программном окружении Visual Basic имеется несколько средств, которые вы можете использовать для отслеживания и исправления ошибок в ваших программах. Эти средства не в состоянии отучить вас делать ошибки вообще, но они облегчают поиск и исправле- ние уже сделанных ошибок. Рассмотрим следующую структуру с условием If.. .Then, в которой вычис- ляются значения двух условных выражений, после чего, исходя из полу- ченного результата, отображается одно из двух сообщений: If Age > 13 AND Age < 20 Then Text2.Text = "Вы тинейджер." Else Text2.Text = "Вы не тинейджер.” End If Правильно ли будет работать эта структура? Тинейджер - это человек, чей возраст находится между 13 и 19 годами, но структура не предусмат- ривает случай, когда возраст человека равен 13 годам. (В этом случае бу- дет выдано ошибочное сообщение «Вы не тинейджер.».) Эта ошибка не относится к синтаксическим (определенным правилам записи операто- ров в Visual Basic); это логическая ошибка. Правильнее было бы исполь- зовать в условии структуры If ...Then оператор «больше или равно» (>=): If Age >= 13 AND Age < 20 Then Как ни странно, такой тип ошибок наиболее часто встречается в програм- мах Visual Basic. Ситуацию, когда ошибка проявляется не всегда, а лишь при определенных условиях, очень трудно выявить и исправить. Три вида ошибок В программах Visual Basic возможны три вида ошибок: синтаксичес- кие, ошибки выполнения программы и логические ошибки. Синтаксическая ошибка (или ошибка при компиляции) представляет собой ошибку в программе, которая нару- шает правила Visual Basic (например, неправильное на- писание свойства или ключевого слова). Visual Basic ука- зывает на некоторые типы синтаксических ошибок при вводе текста программы. Visual Basic не позволит запус- тить программу, если в ней не устранены синтаксические ошибки.
206 Часть 2. Основы программирования Ошибка при выполнении программы представляет собой ошибку, которая вызывает останов программы в ходе ее выполнения. Ошибки при выполнении программы случа- ются, если внешнее событие или не обнаруженная синтак- сическая ошибка вызывает останов программы в процес- се ее работы. Неправильное имя файла в аргументе функции или незакрытый замок дисковода гибких дисков являются условиями, при которых может возникнуть ошибка при выполнении программы. Логическая ошибка возникает в результате недосмотра программиста. При этом при выполнении программы по- лучаются неверные результаты. Большинство усилий при отладке затрачивается на выявление логических ошибок, допущенных программистом. Пользуйтесь ресурсами оперативной справочной системы Visual Basic при возникновении сообщений о синтаксической ошибке или ошибке при выполнении программы. Если появится диалоговое окно с сооб- щением об ошибке при выполнении программы (runtime error), щелк- ните на кнопке Help (Справка). Использование режима останова при выполнении программы с помощью команды Break Режим останова Break дает возможность оценить правильность выпол- нения вашей программы. Один из способов идентификации логических ошибок состоит в пошаго- вом режиме выполнения вашей программы, когда за один раз выполня- ется только одна инструкция, и вы можете просмотреть значения пере- менных или свойств в процессе их изменения. Для этого требуется установить режим работы с остановом в контрольных точках при вы- полнении программы, а затем наблюдать текст программы в окне Code. Режим останова в контрольных точках позволяет вам анализировать ход выполнения программы компилятором Visual Basic. Это все равно, что поставить кресло за спиной пилота и наблюдать за его действиями при пилотировании самолета. Но в этом случае вы всегда можете взять уп- равление на себя. Для отладки ваших приложений вы должны открыть панель инструмен- тов Debug (Отладка), кнопки которой позволяют вам управлять процессом отладки. Вам также может понадобиться открыть окно Watches (Наблюде-
Урок 6. Использование структур с условиями 207 ние), в котором отображаются значения интересующих вас переменных. Вы можете воспользоваться и окном Immediate (Непосредственное выпол- нение), чтобы вводить программные операторы и немедленно оценивать их действие. На следующем рисунке показана панель инструментов Debug (Отладка), которую можно отобразить, выбрав команду Toolbars (Панели инструмен- тов) и щелкнув на строке Debug (Отладка). Пуск/ Конец Войти в Выйти из Быстрый Окно Immediate Продолжить । инструкцию инструкции просмотр (Непосред- \ I / /переменных ственное выполнение) Debug XZ Останов Контрольная Не входить в Окно Locals Окно Watches точка инструкцию (Локальные (Наблюдение) переменные) В следующем упражнении вы используете режим останова для поиска и исправления логической ошибки, обнаруженной вами ранее в структуре с условием If...Then. Чтобы выявить ошибку, вы воспользуетесь кнопкой Step Into (Войти в инструкцию) на панели инструментов Debug (Отладка) для пошагового выполнения инструкции, а также используете кнопку Quick Watche (Быстрый просмотр переменных) на панели инструментов Debug (Отладка) для просмотра текущего содержимого переменной Аде. Обра- тите особое внимание на стратегию процесса отладки. Вы можете исполь- зовать ее в дальнейшем для поиска ошибок в ваших собственных про- граммах. Отладка программы IfBug 1. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов. 2. Откройте проект IfBug в папке \Vb6Sbs\LessO6. 3. Если форма не видна, выделите форму IfBug в окне Project (Про- ект), а затем щелкните на кнопке View Object (Просмотр объекта). Появится форма для программы IfBug. Эта программа запраши- вает у пользователя сведения о возрасте. Если пользователь щелкнет на кнопке Тест, программа скажет, является ли пользо- ватель тинейджером, или нет. В программе имеется уже рассмот- ренная нами проблема с определением статуса для 13-летних.
208 Часть 2. Основы программирования Откройте панель инструментов Debug (Отладка) и используйте режим пошагового выполнения для обнаружения ошибки. 4. В меню View (Вид) укажите на команду Toolbars (Панели инст- рументов) и щелкните на строке Debug (Отладка), если она не отображена. Появится панель инструментов Debug (Отладка). (Она должна появиться справа от стандартной панели инстру- ментов.) 5. Перетащите панель инструментов Debug (Отладка) в нижнюю часть формы if Bug, чтобы вам было удобнее работать. 6. Щелкните на кнопке Start (Пуск) на панели инструментов Debug (Отладка). 7. Программа начнет работу. Удалите 0 из текстового поля Воз- раст (Аде), введите число 14, затем щелкните на кнопке Тест. Про- грамма отобразит сообщение «Вы тинейджер.». Этот резуль- тат соответствует истине. 8. Введите число 13 в текстовое поле Возраст (Аде), затем щелк- ните на кнопке Тест. Программа отобразит сообщение «Вы не тинейджер.», как показано на рисунке: Этот результат неверен, и вам необходимо просмотреть текст программы для обнаружения ошибки и ее исправления. Преж- де, чем выйти из программы и начать просмотр текста, позволь- те Visual Basic оказать вам помощь. 9. Щелкните на кнопке Break (Останов) на панели инструментов Debug (Отладка). (Она расположена справа от кнопки Start (Пуск).) Программа будет остановлена, a Visual Basic отобразит окно Code, в котором вы увидите текст программы по мере ее выпол-
Урок 6. Использование структур с условиями 209 нения Visual Basic. Ваш экран должен выглядеть так, как по- казано на рисунке. • * А Ц t* М *' ► « Foiml (Code)' [(General) [(Declaration*) = 3 Й п ~ ;g ^ Project!(Ifbug.Ybp^ Private Sub Conn)andi_Click() Age = Texci.Text Forms d Forml i If Age > 13 And Age < 20 Then Texc2.Text *= "Вы тинейджер" Else Text2.Text • "Вы не тинейджер." End If End Sub Private Sub Conn)and2_Click() End End Sub »№ ► ia ► -О Б С B fe i 10. Щелкните на кнопке Step Into (Войти в инструкцию) на пане- ли инструментов Debug (Отладка), чтобы выполнить следующий оператор в программе. Visual Basic отобразит форму ввода и будет ждать ввода данных. 11. Щелкните на форме IfBug на панели задач Windows, убеди- тесь, что число 13 по-прежнему находится в текстовом поле, затем щелкните на кнопке Тест. Поскольку Visual Basic нахо- дится в режиме пошагового выполнения, случится нечто не со- всем обычное. Visual Basic откроет окно Code и отобразит про- цедуру обработки прерывания Command1_ClickBMecTO того, чтобы выполнить программу. Первый оператор в процедуре выделен желтым цветом. Тем самым вы можете видеть, как работает логика в вашей программе. 12. Щелкните на кнопке Step Into (Войти в инструкцию) для вы- полнения первого оператора в процедуре. Будет выполнен оператор Sub, а оператор, присваивающий значение перемен- ной Аде, будет выделен. Переменная Аде является проверяемым условием в этой программе, поэтому вы поместите ее в окно Watches (Наблюдение), чтобы видеть, как изменяется ее значе- ние в ходе выполнения программы.
210 Часть 2, Основы программирования Совет. Когда ваша программа работает в пошаговом режиме, вы можете про- верить значение переменной в окне Code, указав на переменную и удер- живая нажатой кнопку мыши. 13. Выделите переменную Аде с помощью мыши, затем щелк- ните на кнопке Quick Watch (Быстрый просмотр переменных) на панели инструментов Debug (Отладка). На экране появится ди- алоговое окно, в котором будет содержаться имя переменной, ее значение, тип и назначение. Это диалоговое окно отобража- ется также, если вы щелкнете на команде Quick Watch (Быстрый просмотр переменных) в меню Debug (Отладка). В окне Watches (Наблюдение) отображаются переменные, вве- денные с помощью команды Quick Watch (Быстрый просмотр пе- ременных). 14. Щелкните на диалоговом окне Quick Watch (Быстрый просмотр переменных). В нижней части экрана появится окно Watches (Наблюдение). (Для того чтобы увидеть все содержимое окна, вам может понадобиться увеличить его размеры.) Переменная Аде в окне Watches (Наблюдение) Следующий оператор, который будет выполнен Visual Basic
Урок 6. Использование структур с условиями 211 В настоящий момент переменная Аде не имеет значения, по- скольку она будет использоваться позднее в процедуре обра- ботки прерывания. (Поскольку переменная Аде не была объяв- лена в качестве глобальной в программе, она используется как локальная переменная для процедуры и повторно инициали- зируется при каждом новом вызове процедуры.) Примечание. Чтобы удалить наблюдаемую переменную из окна Watches (Наблюде- ние), щелкните на переменной в окне Watches (Наблюдение), а затем нажмите клавишу | Ье1 |. 15. Щелкните на кнопке Step Into (Войти в инструкцию) для вы- полнения следующей инструкции. Visual Basic скопирует число 13 из текстового поля в перемен- ную Аде, а значение переменной Аде в окне Watches (Наблюде- ние) будет обновлено. Visual Basic выделит теперь первый опе- ратор в структуре If.. .Then, который является наиболее важным (и ошибочным) оператором в программе. Поскольку 13-летний человек является тинейджером, Visual Basic должен бы выпол- нить оператор, следующий за ключевым словом Then после вычисления условия. Если структура с условием выполняется неправильно, ищите ошибку в условном выражении и по возможности попытайтесь ее исправить. 16. Щелкните на кнопке Step Into (Войти в инструкцию) снова. Visual Basic выделит оператор Else в структуре If...Then. Сооб- щение не соответствут значению, и вы должны обнаружить и исправить ошибку. (Visual Basic окажет вам помощь в выявле- нии несоответствия, но найти и устранить причину вы должны сами.) В данном случае причина вам известна. В первой опера- ции сравнения необходимо использовать оператор >=. 17. Щелкните мышью сразу за оператором > в инструкции If...Then и введите =. Ваш экран должен выглядеть, как показа- но на рисунке.
212 Часть 2. Основы программирования Project! Microsoft Visyal Basic (design] Ей Ed* Ии» &OM fanw* Eobuo Sir query I«* _Md !Ч «паи» Uefc Ё0 - <3 ’ - fi# Ы k в & Й? 'ri W 2} ms, c-H« iwi ssi iiigi'^i лив nw® Projectl - Forml (Code) ite Sub CoMnandl_Click() *.ge - Textl.Text -t Age (>•) 13 And Age < 20 Then Text 2.Text = "Вы тинейджер” Else Text 2.Text - "Вы не тинейджер.” End If •ub ........ ...................... Form 1 Form fi SrwStyte lo-Solid g; DrawWidth ;J Enabled iTrue ggg; Д ......... 85 £ЙМ1мз Sub Corrmand2_CLick() Исправленная ошибка Visual Basic позволяет находить ошибки при пошаговом режи- ме работы, но если вы внесете изменения в уже выполненные операторы, эти исправления не будут проявляться до тех пор, пока вы не запустите данные операторы на выполнение. Чтобы проверить правильность внесенных исправлений, вам надо бу- дет снова щелкнуть на кнопке Тест. 18. Щелкните на кнопке Step Into (Войти в инструкцию) три раза. Visual Basic завершит выполнение структуры с условием. 19. Щелкните на кнопке Start (Пуск), которая теперь называет- ся Continue (Продолжить) на панели инструментов Debug (Отлад- ка), чтобы снова выполнить программу уже в нормальном ре- жиме. Снова появится форма If Bug. 20. Щелкните на кнопке Тест, чтобы проверить работу исправ- ленной программы. Проверьте появление сообщения «Вы ти- нейджер.» в поле вывода, затем щелкните на кнопке Выход для останова программы. 21. Щелкните на кнопке Close (Закрыть) на панели инструмен- тов Debug (Отладка) и в окне Watches (Наблюдение) (если оно еще остается видимым) для их закрытия.
Урок 6. Использование структур с условиями 213 Поздравляем! Вы успешно использовали режим пошагового выполнения программы для обнаружения и исправления логической ошибки. При дальнейшей работе с Visual Basic используйте режим пошагового выпол- нения и панель инструментов Debug (Отладка) для анализа вашей про- граммы. Шаг вперед: использование оператора Stop для перехода в пошаговый режим Вы можете перейти в пошаговый режим, использовав оператор Stop. Если вам точно известно место в программе, в котором вы хотите перейти в режим пошагового выполнения для отладки программы, вы можете вос- пользоваться оператором Stop, поместив его в это место. При этом выпол- нение программы будет приостановлено, и откроется окно Code. Напри- мер, вместо щелчка на кнопке Break (Останов) вы можете установить режим пошагового выполнения для рассмотренной ранее программы, вставив оператор Stop в начале процедуры обработки прерывания Commandl_Click, как показано ниже: Private Sub Command1_Click () Stop 'ввод режима останова Age = Text.Text If Age > 13 AND Age < 20 Then Text2.Text = "Вы тинейджер." Else Text2.Text = "Вы не тинейджер." End If End Sub При запуске программы, в которой имеется оператор Stop, Visual Basic переходит в режим останова после выполнения оператора Stop. В режиме останова вы можете использовать окно Code и панель инструментов Debug (Отладка), как вы это делали при переходе в режим останова вручную. Закончив отладку, можно удалить оператор Stop из текста программы. Если вы хотите перейти к следующему уроку: >• не выходя из Visual Basic, перейдите к уроку 7. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход).
214 Часть 2. Основы программирования Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Кнопка Записать условное выражение Используйте оператор сравнения между двумя значениями. Использовать структуру с усло- вием Используйте оператор If...Then или Select Case и допустимые выражения и ключе- вые слова. Осуществить две операции в услов- ном выражении Используйте логические операторы меж- ду составляющими (And, Or, Not или Xor). Отобразить панель инструментов В меню View (Вид) укажите на строку Toolbars (Панели инструментов) и щелк- ните на строке Debug (Отладка). Ввести режим ос- танова при отладке вашей программы Щелкните на кнопке Break (Останов) на панели инструментов Debug (Отладка), или поместите оператор Stop в нужном месте. Выполнить одну строку в окне Code Щелкните на кнопке Step I n to (Войти вин- струкцию), uJj или в меню Debug (Отладка) щелкните на ко- манде Step Into (Войти в инструкцию). Просмотреть зна- чения переменной в окне Code Выделите нужную переменную, затем щелкните на кнопке Quick Watch (Быстрый ИМ просмотр) на панели инструментов Debug (Отладка), или щелкните на команде Quick Watch (Быст- рый просмотр) в меню Debug (Отладка). Удалить наблюдае- мое выражение Щелкните на выражении в окне Watches (Наблюдение), затем щелкните на кноп- ке Delete (Удалить).
УРОК 7 Использование циклов и таймеров ® Урок рассчитан на 50 минут Вы научитесь: использовать цикл For... Next для многократного выполне- ния группы операторов; отображать выходные данные в форме с помощью коман- ды Print; использовать цикл Do для выполнения группы операто- ров при определенных условиях; осуществлять заданную временную задержку с помощью объекта «таймер». В уроке 6 вы познакомились с условными структурами If.. .Then и Select Case для выбора определенной группы опера- торов при выполнении программы. В этом уроке вы узнаете, как многократно выполнять одну и ту же группу операторов с помощью циклов. В цикле Do...Next вы можете выполнить группу операторов заданное количество раз, а в цикле Do вы можете выполнять группу операторов до тех пор, пока ука- занное в цикле условие не примет значение True (Истина). Вы также узнаете, как использовать команду Print для ото- бражения текста и чисел в форме и как применять объект типа «таймер» для задания временных интервалов при вы- полнении программы.
216 Часть 2. Основы программирования Программирование циклов For...Next Цикл For... Next позволяет выполнить некую группу операторов в программе заданное количество раз. Это может быть полезно при необходимости выполнить несколько связанных вычислений, при работе с элементами экрана, обработке нескольких введенных пользователем данных. Цикл For...Next, подобно стенографии, позволяет кратко записать достаточно большой фрагмент программы. Если несколько групп операторов выпол- няют одни и те же действия, Visual Basic дает возможность выделить эти группы и задать для них нужное число повторений. Синтаксис для цикла For...Next следующий: For переменная = начало То конец повторно исполняемые операторы Next переменная В этой записи ключевые слова For, То и Next и оператор присвоения (=) являются обязательными. Вместо слова переменная следует подставить имя числовой переменной, выполняющей роль счетчика количества цик- лов. Слова начало и конец следует заменить цифровыми значениями, со- ответствующими начальной и конечной точке цикла. Строка или строки между операторами For и Next представляют собой инструкции, повторно выполняемые при обработке цикла в программе. Например, следующий цикл For...Next используется для подачи четырех звуковых сигналов динамиком вашего компьютера: For i = 1 То 4 Веер Next i Функционально этот цикл эквивалентен написанию четырех операторов Веер в тексте процедуры. Для компилятора это выглядит как Веер Веер Веер Веер В цикле использована переменная i, которая по соглашению использует- ся в качестве первого счетчика повторений в цикле For... Next. Каждый раз при выполнении цикла счетчик увеличивается на единицу. (При первом выполнении цикла эта переменная содержит значение 1, соответствую- щее значению начало, а при последнем выполнении цикла она содержит
Урок 7. Использование циклов и таймеров 217 значение 4, соответствующее значению конец.) Как видно из примера, счетчик повторений весьма полезен для выполнения цикла. Отображение содержимого счетчика с помощью команды Print Счетчик подобен любой другой переменной в процедуре. Его значение может быть назначено свойствам, использовано в вычислениях или же отображено в программе. Очень удобным способом отображения содер- жимого счетчика является использование команды Print, которая отобра- жает выходное значение в форме или выводит его на принтер. Команда Print имеет следующий синтаксис: Print выражение где выражение может быть переменной, свойством, текстовым или чис- ловым значением в процедуре. В следующем упражнении вы используе- те команду Print для отображения выходных данных цикла For... Next в фор- ме. Команда Print осуществляет вывод данных в форму или на принтер. Совет. Если вы хотите минимизировать форму, в которую осуществляется вывод с помощью команды Print, установите для свойства формы AutoRedraw значение True (Истина), чтобы Visual Basic каждый раз ав- томатически заново осуществлял вывод при новом отображении фор- мы. В отличие от других объектов формы, которые перерисовывают- ся автоматически, текст, выведенный командой Print, будет перерисовываться только в том случае, если для свойства AutoRedraw установлено значение True (Истина). Отображение информации с помощью цикла For...Next 1. Откройте новый проект. 2. Увеличьте размеры формы с помощью размерных указате- лей, чтобы она могла вместить всю выходную информацию. 3. С помощью кнопки CommandButton (Командная кнопка) создай- те командную кнопку в правой части формы.
218 Часть 2. Основы программирования 4. Откройте окно Properties (Свойства), затем установите для свойства Caption (Надпись) для командной кнопки значение «Цикл». 5. Откройте список-перечисление объектов в верхней части окна Properties (Свойства), затем щелкните на имени объекта Forml. В окне Properties появятся свойства формы. 6. Измените свойство Font (Шрифт) на Times New Roman. Свойство Font (Шрифт) определяет гарнитуру шрифта для тек- ста, отображаемого в форме. Вы можете использовать любой из установленных в вашей системе шрифтов, но лучше приме- нять шрифты True Туре, поскольку для них имеется большое количество кеглей (размеров), и они выглядят одинаково на экране и на бумаге. 7. Установите для свойства AutoRedraw значение True (Истина). Если ваша форма будет скрыта, с помощью свойства AutoRedraw весь текст, отображенный с помощью команды Print, будет вы- веден заново. 8. Дважды щелкните на кнопке Цикл в форме. В окне Code будет отображен текст процедуры Command1_C!ick. 9. Введите в текст процедуры следующие операторы: For i = 1 То 10 Print "Линия"; i Next i В этом цикле For...Next используется команда Print для отобра- жения слова «Линия» и значения счетчика цикла 10 раз в ва- шей форме. Точка с запятой (;) в команде Print указывает Visual Basic, что следует отобразить значение счетчика рядом со стро- кой «Линия» без дополнительных пробелов. (Тем не менее, в процессе выполнения программы между словом «Линия» и зна- чением счетчика будет один пробел. При выводе числовых зна- чений команда Print резервирует поле для знака минус, даже если этот знак не нужен.) Законченная программа ForLoop находится в папке \Vb6Sbs\LessO7.
Урок 7. Использование циклов и таймеров 219 Примечание. В команде Print в качестве разделителей элементов в списке могут ис- пользоваться запятые (,) и точки с запятой (;). При использовании точ- ки с запятой элементы располагаются вплотную друг к другу, а при использовании запятой элементы отделяются длиной поля табуляции. Для разделения элементов в списке вы можете использовать сочета- ние символов точки и точки с запятой. Теперь можно запустить программу. 10. Щелкните на кнопке Start (Пуск) на панели инструментов. 11. Щелкните на кнопке Цикл. В процессе выполнения цикла For... Next в форме будет выведено 10 строк, как показано на ри- сунке: 12. Снова щелкните на кнопке Цикл. В форме снова будет в фор- ме отображено 10 строк (или столько, сколько поместится). При выводе каждой строки курсор будет переходить на следующую строку, пока не выйдет за пределы нижней границы формы. 13. Щелкните на кнопке End (Конец) на панели инструментов для остановки программы. 14. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов. Сохраните форму под именем MyForLoop.frm, затем сохраните проект под именем MyForLoop.rbp. Сохраните файлы в папке\Vb6Sbs\LessO7.
220 Часть 2. Основы программирования Изменение свойства в цикле For...Next 1. Откройте процедуру обработки прерывания Command1_Click, если она не была открыта. В окне Code будет отображен цикл For... Next. 2. Вставьте следующую инструкцию непосредственно под опе- ратором For. FontSize = 10 + i Эта команда устанавливает для свойства FontSize (размер шриф- та) значение на 10 пунктов больше, чем значение счетчика цик- ла. При первом выполнении цикла размер шрифта будет 11 пунктов, при следующем выполнении - 12 пунктов и так далее до последнего повтора цикла, в котором размер шрифта уве- личится до 20 пунктов. Текст вашей процедуры должен выгля- деть, как показано на рисунке: 3. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. 4. Щелкните на кнопке Цикл. В результате выполнения цикла For...Next форма будет выгля- деть следующим образом:
Урок 7. Использование циклов и таймеров 221 * iiiiini Г Линия 4 _______ Линия 1 «•'• I Линия 6 Линия 7 Линия 10 При каждом новом выполнении цикла значение счетчика бу- дет увеличиваться на единицу, в результате чего будет увели- чиваться и размер шрифта для выходных сообщений в форме. 5. Щелкните на кнопке End (Конец) для остановки программы. Работа программы будет завершена, и вы вернетесь в про- граммное окружение. 6. В меню File (Файл) щелкните на команде Save As (Сохранить как) для файла MyForLoop.frm. Сохраните модифицированную форму под именем MyGrowFont.frm. 7. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Сохраните проект под именем MyGrowFontrbp. Законченная программа GrowFont имеется в папке \Vb6Sbs\LessO7. Внимание! Использование цикла For... Next дает возможность значительно сокра- тить объем программы. В предыдущем примере четыре строки цикла For...Next эквивалентны 20 программным операторам.
222 Часть 2. Основы программирования Создание сложных циклов For...Next Вы можете задать шаг изменения значения счетчика цикла For...Next с помощью ключевого слова Step. Переменная счетчика в цикле For... Next является весьма мощным инстру- ментом в ваших программах. Включив воображение, вы можете приду- мать, как можно использовать последовательность числовых значений, получаемых при обработке цикла. Чтобы создать цикл с более сложным изменением значения счетчика, чем просто подсчет числа повторений цикла 1, 2, 3, 4 и т.д., следует задать нужное начальное значение в поле начало в описании цикла, а затем использовать ключевое слово Step для задания шага изменения значения счетчика. Например, при использова- нии цикла For i = 5 То 25 Step 5 Print i Next i вы получите в вашей форме следующую последовательность чисел: 5 10 15 20 25 В качестве аргумента ключевого слова Step можно использовать и деся- тичные дроби. В цикле можно использовать не только целые числа, но и десятичные дро- би. Например, при выполнении следующего цикла For...Next For i = 1 To 2.5 Step 0.5 Print i Next i в форме будут выведены следующие числа: 1 1.5 2 2.5 Помимо отображения значений, счетчик можно использовать для уста- новки свойств, вычисления значений или обработки данных. В следую- щем упражнении показан пример использования значения счетчика для
Урок 7. Использование циклов и таймеров 223 открытия файлов Visual Basic, хранящихся на вашем жестком диске, ко- торые имеют числовые значения в имени. Программа также демонстри- рует, как вы можете использовать цикл For... Next для работы с нескольки- ли объектами-изображениями в составе группы. Чтобы эффективно обрабатывать такие объекты, следует организовать их в виде массива. Открытие файлов с помощью цикла For...Next 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке О.К- 2. Щелкните на кнопке управления Image (Изображение) на па- нели инструментов, затем создайте квадратную рамку для изображения в верхнем левом углу формы. 3. В меню Edit (Правка) щелкните на команде Сору (Копировать). Копия рамки изображения будет помещена в Буфер обмена Microsoft Windows. Вы можете использовать эту копию для со- здания еще трех рамок изображений в форме. 4. В меню Edit (Правка) щелкните на команде Paste (Вставить). Visual Basic выдает запрос, хотите ли вы создать массив эле- ментов управления для вашей программы. Массив представ- ляет собой набор идентичных объектов, в данном случае объек- тов интерфейса. Каждый из объектов в группе имеет одинаковое имя, поэтому вся группа может быть выбрана и оп- ределена за один раз. Тем не менее, можно обратиться к каж- дому объекту в массиве индивидуально, что позволяет сделать доступным каждый элемент в вашем пользовательском интер- фейсе. Вы создаете массив с помощью копирования и последующей вставки объектов. 5. Щелкните на кнопке Yes (Да), чтобы создать массив элемен- тов управления. Visual Basic создаст массив элементов управления для рамок изображений и вставит вторую рамку изображения в верхний левый угол формы. Новая рамка изображения будет выделена. 6. Перетащите вторую рамку изображения вправо от первой. [Примечание. Выделив объект, вы можете перетащить его в любое место формы.
224 Часть 2. Основы программирования 7. В меню File (Файл) щелкните на команде Paste (Вставить), за- тем перетащите третью рамку изображения вправо от второй. 8. Снова щелкните на команде Paste (Вставить), затем перета- щите четвертую рамку изображения вправо от третьей. После завершения операций вставок ваш экран должен выг- лядеть так, как показано на следующем рисунке. 9. Щелкните на кнопке управления CommandButton (Командная —кнопка) на панели инструментов, а затем создайте командную кнопку в нижней части формы. Теперь установите свойства для объектов формы. Прежде всего определите свойства для рамок изображений в качестве эле- ментов массива объектов управления. 10. Щелкните на первой рамке изображения, удерживая на- жатой клавишу | Shi ft |, затем щелкните на второй, третьей и четвертой рамке. Все рамки изображений в вашей форме будут выделены. Вы можете работать со всеми объектами массива, выделив их как груп- пу. 11. Откройте окно Properties (Свойства) и установите следующие свойства. (Задав свойства для рамки изображения, щелкните на командной кнопке для их установки.)
Урок 7. Использование циклов и таймеров 225 Объект Свойство Устанавливаемое значение Массив элементов управления Imagel BorderStyle 1 — Fixed Single (Тип рамки) (Одинарная сплошная линия) Stretch True (Изменение размера) (Истина) Commandl Caption (Надпись) Показать значки 12. Дважды щелкните на кнопке Показать значки в форме, чтобы отобразить текст процедур для объекта CommandButton (Коман- дная кнопка). В окне Code будет отображена процедура Commandl_Click. 13. Расширьте окно Code, а затем введите следующий цикл For... Next: For i = 1 То 4 Imagel (i-1). Picture = _ LoadPicture ("c:\vb6sbs\less07\misc0" & i & ".ico") Nexti Примечание. В этой процедуре обработки прерывания строка функции LoadPicture оказалась слишком длинной, и ее пришлось разделить на две строки, использовав оператор переноса строки Visual Basic в виде символа (_). Вы можете использовать этот символ для переноса строки в любом месте вашей программы, за исключением строковых выражений. В цикле используется функция LoadPicture для загрузки четы- рех значков файлов из папки \Vb6Sbs\LessO7 на вашем жестком диске. Основное выполняемое в ходе цикла действие заключе- но в операторе Imagel (i-1). Picture = _ LoadPicture ("c:\vb6sbs\less07\misc0" & i & “ .ico”), который загружает файлы с диска. Первая часть оператора, Imagel (i-1). Picture
226 Часть 2. Основы программирования обращается к свойству Picture (Рисунок) каждой из рамок с изоб- ражениями в массиве. Элементы массива идентифициру- ются с помощью цифровых индексов, поэтому вы можете об- ратиться к определенной рамке изображения с именем Imagel (0), Imagel (1), Imagel (2) и Imagel (3) соответственно. Число в скобках соответствует номеру (индексу) элемента в массиве; в этом при- мере для получения правильного значения индекса следует вычесть 1 из показания счетчика цикла. О том, как создается имя файла с помощью значения счетчика и операторов конкатенации строк, говорилось в предыдущем уроке. Команда LoadPicture ("c:\vb6sbs\less07\misc0" & i &" .ico") путем объединения пути к файлу, имени файла и расширения .ico создает последовательно четыре имени файлов значков для загрузки их с диска. В этом примере вы загружаете файлы значков МiscO1 .ico, Misc02.ico, Misc03.ico и Misc04.ico в рамки изоб- ражений. Это возможно, поскольку несколько файлов в папке \Vb5Sbs\LessO6 имеют одинаковую структуру имени Miscxx.ico. Такая структура позволяет использовать цикл For...Next для загрузки файлов. 14. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов. Сохраните форму на диске под именем MyCtlArray.frm, затем сохраните проект под именем MyCtlArray.vbp. 15. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы, затем щелкните на кнопке Показать значки. В процессе выполнения цикла For...Next в рамки изображений формы будут загружены значки. Законченная программа CtlArray находится в папке \Vb6Sbs\Less07. Примечание. Если Visual Basic выдает сообщение об ошибке, проверьте текст ва- шей программы и убедитесь в правильности указания пути и имен файлов значков. Если вы установили файлы упражнений в папку, от- личную от предлагаемой по умолчанию, или же если вы переместили файлы значков после инсталляции, то указанный в данной процеду- ре путь будет неверным. Программа отобразит следующие рисунки:
Урок 7. Использование циклов и таймеров 227 16. Щелкните на кнопке Close (Закрыть) в заголовке окна для выхода из программы. Работа программы будет завершена, и вы вернетесь в среду программирования. Использование ключевого слова Step в программе MyCtlArray Предположим, в папке \Vb6Sbs\LessO7 имеется множество файлов, струк- тура имени которых описывается шаблоном Miscxx.ico. Попробуем исполь- зовать ключевое слово Step для отображения еще нескольких значков в рамках изображений. Чтобы загрузить файлы с соответствующими име- нами, надо просто должным образом изменять значение счетчика цикла, которое затем используется для задания имен файлов и выбора элемента массива объектов в форме. Индекс каждой из рамок изображений в груп- пе объектов также должен быть изменен соответствующим образом. Модификация программы MyCtlArray 1. Щелкните на первой рамке изображения в форме, а затем откройте окно Properties (Свойства). В окне Properties будут отображены свойства для объекта Imagel (0). 2. Измените свойство Index (Индекс) на 22. Для первого элемента в массиве обычно используется индекс О, но при необходимости вы можете изменить значение индек- са на другое, более удобное для выполнения программы. Допу- стим, в этом упражнении вы хотите открыть файлы Misc22.ico,
228 Часть 2. Основы программирования Misc24.ico, Misc26.ico и Misc28.ico, поэтому требуется изменить индексы объектов на 22, 24, 26 и 28. 3. Откройте меню-список объектов в окне Properties, затем щел- кните на имени объекта Imagel (1). 4. Измените свойство Index (Индекс) для второй рамки изобра- жения на 24. 5. Откройте меню-список объектов в окне Properties, затем щел- кните на имени объекта Imagel (2). 6. Измените свойство Index (Индекс) для третьей рамки изобра- жения на 26. 7. Откройте меню-список объектов в окне Properties, затем щел- кните на имени объекта Imagel (3). 8. Измените свойство Index (Индекс) для четвертой рамки изоб- ражения на 28. Теперь изменим условия для цикла For...Next. 9. Дважды щелкните на кнопке Показать значки в форме. В окне Code будет отображена процедура Command1_Click. 10. Измените параметры для оператора For на следующие: For i = 22 То 28 Step 2 Тем самым устанавливается значение счетчика, равное 22 для первого повтора цикла, 24 - для второго повтора, 26 - для третьего и 28 - для четвертого. Теперь внесем изменения в ар- гументы функции LoadPicture. 11. Измените описание индексов с Imagel (i-1) на Imagel (i). Поскольку в данном случае индекс точно соответствует значе- нию счетчика цикла, нет необходимости в его дополнительных вычислениях. 12. Удалите второй 0 (нуль) из имени пути в функции LoadPicture. Имена файлов MiscxxJco больше не будут содержать нули. По завершении текст вашей процедуры должен выглядеть так:
Урок 7. Использование циклов и таймеров 229 n Projectl - Foiml (Code) |Conwnand1 Click Private Sub Commandl_Click() |For i = 22 To 28 Step 2 Imagel(i).Picture = _ LoadPicture ("c:\vb6sbs\ less07\misc,r £ i £ " .ico") Next i End Sub 13. Щелкните на кнопке Start (Пуск) на панели инструментов, затем щелкните на кнопке Показать значки. При выполнении цикла For...Next будут загружены четыре но- вых значка рамки изображений. Ваш экран должен выглядеть так, как показано на рисунке. 14. Щелкните на кнопке Close (Закрыть) в заголовке. Работа программы будет завершена, и вы вернетесь в про- граммное окружение. 15. Сохраните измененную форму и проект под именем MyStepLoop. Законченная программа StepLoop находится в папке \Vb6Sbs\LessO7.
230 Часть 2. Основы программирования Оператор Exit For Оператор Exit For позволяет выйти из цикла For...Next до его заверше- ния. Тем самым программа сможет среагировать на определенное со- бытие, не завершая выполнения цикла заданное количество раз. На- пример, в следующем цикле For...Next For i = 1 To 10 InpName = InputBox ("Введите Ваше имя или слово Готово для выхода”.) If InpName = "Готово" Then Exit For Print InpName Nexti программа запрашивает пользователя на последовательный ввод до 10 имен, если только не введено слово «Готово» (в этом случае про- грамма переходит к выполнению инструкций, следующих за опера- тором Next). Операторы Exit For обычно используются с операторами If. Эта конструкция очень полезна для обнаружения особых ситуаций в ходе выполнения цикла, например, завершения операций при дости- жении установленного предела. Программирование циклов Do В циклах Do инструкции исполняются, пока истинно условие, приве- денное в описании цикла. Альтернативой циклу For...Next является цикл Do, в котором группа опе- раторов выполняется до тех пор, пока определенное условное выраже- ние имеет значение True (Истина). Такие циклы нужны, потому что часто мы не можем знать точно, сколько раз должен быть повторен цикл. На- пример, вы хотели бы, чтобы пользователь вводил имена в базу данных до тех пор, пока не будет введено слово Готово. В этом случае операторы цикла Do будут выполняться неопределенное количество раз, пока не бу- дет введена строка «Готово». Существует несколько разновидностей цикла Do, в зависимости от усло- вий его выполнения. Наиболее общий вариант таков: Do While условие Блок выполняемых операторов Loop Например, следующий цикл Do обрабатывает входные данные до тех пор, пока не будет введено слово «Готово»:
Урок 7. Использование циклов и таймеров 231 Do while InpName < > "Готово" jnpName = InputBox ("Введите Ваше имя или слово Готово для выхода".) If InpName < > "Готово" Then Print InpName Loop Место расположения проверочного условия определяет порядок выпол- нения цикла Do. Оператором условия для данного цикла является InputName о "Готово”, ко- торое компилятор Visual Basic трактует как «исполнять цикл до тех пор, пока переменная InpName не будет содержать значение «Готово». Из этого определения проистекает интересная особенность циклов Do: если усло- вие в заголовке цикла не является истинным с самого начала, цикл Do не выполняется ни разу. В данном случае, если переменная InpName содер- жит текстовую строку «Готово» до того, как цикл начал выполняться (быть может, в результате предыдущей операции присвоения в процедуре), Visual Basic пропустит все входящие в цикл операторы и продолжит вы- полнение программы с первого оператора, следующего за циклом Do, т.е. за ключевым словом Loop. Обратите внимание, что этот тип цикла требу- ет дополнительной структуры If...Then, чтобы предотвратить отображе- ние слова, при вводе которого происходит выход из цикла. Если вы хотите, чтобы цикл всегда выполнялся по крайней мере один раз, поместите оператор проверки условия в конце цикла. Например, цикл Do InpName = InputBox ("Введите Ваше имя иди слово Готово для выхода".) If InpName о "Готово" Then Print InpName Loop While InpName о "Готово" аналогичен предыдущему циклу Do, но условие выполнения проверяется после ввода данных с помощью функции InputBox. Это дает возможность изменения переменной InpName до проверки условия, поэтому в случае ранее присвоенного переменной значения «Готово» цикл не будет пропу- щен. При проверке условия в конце цикла ваш цикл гарантированно бу- дет выполнен по крайней мере один раз, но вам скорее всего придется добавить несколько дополнительных операторов для обработки данных. Как избежать бесконечных циклов Следует убедиться, что каждый цикл имеет корректное условие за- вершения. Поскольку цикл Do сам по себе не завершается, очень важно правильно задать условия, при которых осуществляется выход из цикла. Если про-
232 Часть 2. Основы программирования веряемое условие никогда не принимает значение False (Ложь), цикл бу- дет выполняться бесконечно, и ваша программа перестанет отвечать на входные сигналы. Рассмотрим следующий пример: Do Number = InputBox С'Введите число для возведения в квадрат. Введите число -1 для выхода".) Number = Number * Number Print Number Loop While Number > = 0 В этом цикле пользователь вводит одно число за другим, а программа воз- водит каждое из чисел в квадрат и выводит результат в форму. К сожа- лению, если пользователь захочет прекратить ввод чисел, это ему не уда- стся, поскольку условие окончания цикла никогда не будет работать. Если пользователь введет число — 1, то при возведении его в квадрат програм- ма присвоит переменной Number значение 1. (Проблема может быть реше- на за счет применения другого условия выхода из цикла.) Бесконечные циклы часто могут иметь место при использовании циклов Do. К счастью, при внимательном и вдумчивом написании программ их можно избежать. В следующем упражнении демонстрируется использование цикла Do для преобразования значений температуры по Фаренгейту в температуру по Цельсию. Эта несложная программа предлагает пользователю ввести данные с помощью функции InputBox, преобразует значение температуры и отображает выходные данные в поле вывода. В программе также пока- зано, как вы можете скрыть форму путем установки для свойства Visible (Видимость) значения False (Ложь). Преобразование значений температуры с помощью цикла Do 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке OK. Visual Basic отобразит новую форму в среде программирования. 2. Откройте окно Properties (Свойства) и установите для свойства Visible (Видимость) значение False (Ложь). Установив для свойства Visible (Видимость) значения False (Ложь), вы сде- лаете вашу форму невидимой при выполнении программы. При установке для свойства Visible (Видимость) значения False (Ложь) Visual Basic не отображает форму при работе програм- мы, т.е. объекты интерфейса пользователя не отображаются. Возможно, вам не придется делать это часто, но такой прием
Урок 7. Использование циклов и таймеров 233 очень удобен, если вы желаете, чтобы вся программа или ее часть обрабатывалась в фоновом режиме. Поскольку програм- ма лишь считывает значения температуры в градусах Фарен- гейта и преобразует их в температуру по Цельсию, было бы весьма удобно скрыть форму. Вы можете получать входные данные с помощью функции InputBox, а вывод осуществлять с помощью функции MsgBox. 3. Дважды щелкните на форме. В окне Code появится текст процедуры Form_Load. Процедура Form_Load выполняется при запуске программы. 4. Введите следующие операторы: Prompt = “Введите температуру по Фаренгейту". Do FTemp = InputBox (Prompt, "Преобразование из F в С") If FTemp о ""Then Celsius = Int ((FTemp + 40) * 5/9 - 40) MsgBox = (Celsius),, "Температура no Цельсию” End If Loop While FTemp <>"" End В первой строке программы переменной Prompt присваивается текстовая строка, используемая в качестве подсказки для вво- да значений. В цикле Do пользователю предлагается ввести значение температуры, которое затем преобразуется в граду- сы Цельсия и отображается на экране с помощью функции MsgBox. Цикл выполняется до тех пор, пока пользователь не щелкнет на кнопке Cancel (Отмена), которая возвращает пустое, или нулевое, значение для переменной Ftemp. Это условие про- веряется в конце цикла с помощью оператора While. Нако- нец, оператор Celsius = Int ((FTemp + 40) * 5/9 - 40) осуществляет преобразование из градусов Фаренгейта в гра- дусы Цельсия. Используется стандартная формула преобра- зования, но применена функция Int, чтобы выходное значение температуры в градусах Цельсия не содержало десятичной части. (Составляющая числа правее десятичной точки отбра- сывается.) При этом несколько страдает точность преобразо- вания, но зато вы будете избавлены от длинных чисел, таких
234 Часть 2. Основы программирования как 21.1111111111111, что соответствует значению градусов Цельсия для 70 градусов Фаренгейта. Теперь попробуем запустить программу. 5. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа начнет работу, а функция InputBox предложит вам ввести значение температуры по Фаренгейту. (Форма при этом невидима.) Ваш экран должен выглядеть так, как показано на рисунке: Преобразование из F в С 6. Введите 32 и щелкните на кнопке ОК. Температура 32 градуса по Фаренгейту преобразуется в 0 гра- дусов по Цельсию, как показано ниже: Программа Celsius находится в папке \Vb6Sbs\LessO7. 7. Щелкните на кнопке ОК. Введите в поле ввода 72, затем щел- кните на кнопке ОК. Температура 72 градуса по Фаренгейту преобразуется в 22 гра- дуса по Цельсию. 8. Щелкните на кнопке ОК, затем выйдите из программы, щел- кнув на кнопке Cancel (Отмена) в диалоговом окне ввода. Работа программы будет завершена, а вы вернетесь в про- граммное окружение.
Урок 7. Использование циклов и таймеров 235 9. Щелкните на кнопке Save Project (Сохранить проект), затем сохраните форму и проект под именем MyCelsius. Использование ключевого слова Until в циклах Do В рассмотренных нами циклах Do используется ключевое слово While для определения условий выполнения цикла в течение того времени, когда условие имеет значение True (Истина). Visual Basic дает возмож- ность также использовать в циклах Do ключевое слово Until, которое определяет выполнение цикла до тех пор, пока условие не примет значение Тrue (Истина). Ключевое слово Until может использоваться как в начале, так и в конце цикла Do, так же как и ключевое слово While. Например, в следующем цикле Do ключевое слово Until используется для задания условий выполнения цикла до тех пор, пока пользова- тель не введет в поле ввода слово «Done»: Do InpName = InputBox ("Введите Ваше имя или слово Готово для выхода’.) If InpName о "Готово" Then Print InpName Loop Until InpName = "Готово" Как вы видите, цикл с использованием ключевого слова Until очень по- хож на цикл с While, за исключением того, что в проверяемом условии содержится противоположный по смыслу оператор = (равно), вместо о (не равно). Познакомившись с действием ключевого слова Until, вы можете использовать его в ваших циклах Do. Использование объектов типа «таймер» Visual Basic позволяет вам установить определенный период времени для выполнения группы операторов с помощью объекта типа таймер. Объект таймер является невидимым секундомером, позволяющим вам осуществ- лять доступ к системным часам из вашей программы. Он может быть ис- пользован в качестве «песочных часов» для получения заданной длитель- ности путем отсчета в обратном порядке от установленного значения, он также может использоваться для задания временных задержек в про- грамме или же для повторения определенных действий через заданные интервалы времени. Объект типа «таймер» действует как невидимый секундомер в вашей программе.
236 Часть 2. Основы программирования Точность установки времени для таймера составляет 1 миллисекунду, или 1/1000 секунды. Хотя таймеры невидимы при выполнении программы, каждый таймер ассоциируется с процедурой прерывания, которая запус- кается каждый раз, когда завершается отсчет установленного для тай- мера интервала времени, которое задается с помощью свойства Interval (Интервал). Активизация таймера производится путем установки для свойства таймера Enabled (Включено) значения True (Истина). Запущенный таймер постоянно работает - т.е. выполняется соответствующая проце- дура обработки прерывания через заданный интервал времени - до тех пор, пока пользователь не остановит программу или отключит таймер. Создание цифровых часов с помощью таймера Одним из самых практичных является использование таймера для циф- ровых часов. В следующем упражнении вы создадите простейшие циф- ровые часы, отображающие текущее значение времени с точностью до секунд. В этом примере вы установите для свойства Interval (Интервал) таймера значение 1000, чтобы Visual Basic обновлял показания часов каж- дые 1000 миллисекунд, или один раз в секунду. Поскольку операционная система Windows является многозадачным окружением и другие про- граммы также могут обращаться к системному времени, Visual Basic не всегда будет иметь возможность изменять показания часов каждую се- кунду, но всегда сможет сделать это впоследствии. Чтобы контролиро- вать более короткие интервалы времени (например, десятые доли секун- ды), надо просто изменить значение свойства Interval (Интервал). Свойство Interval (Интервал) позволяет задавать дискретность (точ- ность) счета таймера. Создадим программу Цифровые часы 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК. 2. Уменьшите размер окна формы. Часы не должны занимать слишком много места на экране. 3. Щелкните на кнопке управления Timer (Таймер) на панели управления. 4. Создайте в левой части формы небольшой объект типа тай- мер. При создании таймера Visual Basic приводит его к стан- дартному размеру.
Урок 7. Использование циклов и таймеров 237 5. Щелкните на кнопке управления Label (Поле метки) на пане- ли инструментов. 6. Создайте поле в середине формы, чтобы оно заполнило по- чти всю форму. Вы будете использовать поле метки для отображения показа- ний часов. Ваша форма должна выглядеть так, как показано на рисунке. Свойство Caption (Надпись) формы определяет имя, отображаемое в за- головке окна. 7. Откройте окно Properties (Свойства) и установите указанные свойства. Чтобы в заголовке появлялось название программы Цифровые часы, установите для свойства Caption (Надпись) для объекта Forml значение «Цифровые часы». Объект Свойство Установленное значение Labell Caption (Надпись) Font (Шрифт) Alignment (Выравнивание) (Пусто) Times New Roman, Bold, 24 пункта 2 - Center (По центру) Time г 1 Interval (Интервал) Enabled (Включен) 1000 True (Истина) Forml Caption (Надпись) Цифровые часы Примечание. Если вы хотите использовать при оформлении часов различные ху- дожественные эффекты, установите для свойства Picture (Рисунок) объекта Forml путь к нужному файлу графики.
238 Часть 2. Основы программирования 8. Дважды щелкните на объекте «таймер» в форме. В окне Code появится текст процедуры Timerl - Timer. Законченная программа Цифровые часы находится в папке \Vb6Sbs\LessO7. 9. Введите следующий оператор: Labell. Caption = Time Этот оператор осуществляет чтение системного времени и при- сваивает это значение свойству Caption (Надпись) объекта Labell. В программе нужен всего один оператор, поскольку значение свойства Interval (Интервал) вы установили в окне Properties (Свой- ства). Всем остальным будет управлять таймер. 10. Закройте окно Code, затем щелкните на кнопке Start (Пуск) на панели инструментов для запуска часов. На экране появятся часы, как показано на рисунке. Ч Цифроьы> Тип 17:36:33 11. Понаблюдайте какое-то время за показаниями часов. Visual Basic обновляет показания часов каждую секунду. 12. Щелкните на кнопке Close (Закрыть) в заголовке, чтобы за- вершить работу часов. Щелчок на кнопке Close (Закрыть) является альтернативным щелчку на кнопке End (Конец) вариантом завершения програм- мы. Этот метод можно использовать для закрытия программы часов при работе в режиме единственного приложения. 13. Щелкните на кнопке Save Project (Сохранить проект) и сохра- ните форму и проект под именем MyDigClock. Данная программа является весьма удобной, поэтому вы можете отком- пилировать программу MyDigClock в исполняемый файл, чтобы запускать ее в дальнейшем при работе на вашем компьютере. При желании допол- ните ее собственными художественными эффектами, текстом и цветом.
Урок 7. Использование циклов и таймеров 239 Шаг вперед: использование объектов типа «таймер» для установки ограничений по времени Другим заслуживающим внимания применением таймеров является их использование для установки времени ожидания, по истечении которого запрещается или разрешается определенное действие. Это похоже на установку песочных часов в вашей программе - вы устанавливаете с по- мощью свойства Interval (Интервал) значение желаемой задержки време- ни, а затем запускаете таймер, установив для свойства Enabled (Включен) значение True (Истина). В следующем упражнении показано, как воплотить эту идею для зада- ния промежутка времени для ввода пароля. (В качестве пароля для дан- ной программы используется слово «секрет».) Программа использует тай- мер для завершения своей работы, если правильный пароль не введен в течение 15 секунд. (Обычно подобные программы являются составной частью более сложных приложений.) Вы также можете использовать этот прием работы с таймером для отображения сообщений-приветствий или заставок на экране, или же для повторения определенного события через заданное время, например сохранения файла на диске через каждые 10 минут. Установка ограничения времени при вводе пароля 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК. 2. Уменьшите размер окна до небольшого прямоугольника, не- много большего, чем размер поля ввода. S3. Щелкните на кнопке управления TextBox (Поле ввода) на па- нели инструментов. 4. Создайте прямоугольное текстовое поле в центре формы. 5. Щелкните на кнопке управления Label (Поле) на панели уп- равления, затем создайте достаточно длинное поле над полем ввода. 6. Щелкните на кнопке управления Command Button (Командная кнопка) на панели инструментов, затем создайте командную кнопку ниже поля ввода.
240 Часть 2. Основы программирования 7. Щелкните на кнопке управления Timer (Таймер) на панели инструментов. 8. Создайте объект типа таймер в левом нижнем углу формы. 9. Установите указанные ниже свойства для вашей программы. Объект Свойство Установленное значение Textl Text (Текст) (Пусто) Password Char * (Символ при вводе пароля) Labell Caption (Надпись) Введите свой пароль в течение 15 секунд Commandl Caption (Надпись) Проверка пароля Time г 1 Forml Interval (Интервал) Enabled (Включен) Caption (Надпись) 15000 True(Истина) Пароль Символ звездочки (*), установленный для свойства PasswordChar (Символ при вводе пароля), отображается в поле ввода, когда пользователь набирает пароль с клавиатуры. Установка для свойства Interval (Интервал) таймера значения 15000 определя- ет для пользователя промежуток времени в 15 секунд, в тече- ние которых он должен ввести пароль и щелкнуть на кнопке Проверка пароля. Установка для свойства Enabled (Включен) зна- чения Тrue (Истина) (по умолчанию) приводит к запуску тайме- ра при начале выполнения программы. (Вы можете отключить таймер, сбросив значение свойства перед выполнением про- граммы, а затем включить таймер в тексте процедуры.) Ваша форма должна выглядеть следующим образом: « Пароль • • Введите свой пароль в течение 15 сек Проверка I - - пароля | ’ 10. Дважды щелкните на объекте таймер в форме, затем вве- дите следующие операторы:
Урок 7. Использование циклов и таймеров 241 MsgBox ("Сожалею, Ваше время истекло".) End Первый оператор отображает сообщение, указывающее, что время истекло, а второй оператор завершает работу програм- мы. Visual Basic будет вызывать процедуру обработки преры- вания каждый раз, когда таймер отсчитает 15 секунд, пока не будет введен верный пароль. 11. Щелкните на объекте Commandl в списке объектов в окне Code и введите в тексте процедуры Command1_Click следующие опе- раторы: If Textl .Text = "секрет" Then Timerl.Enabled = False MsgBox ("Добро пожаловать в систему") End Else MsgBox ("Извини, друг, я тебя не знаю".) End If Данная программа проверяет, введено ли в поле ввода пароля слово «секрет». Если да, то таймер отключается, отображается сообщение-приглашение, а работа программы завершается. (В реальных случаях программа будет работать дальше, предос- тавляя вам доступ в систему.) Если введен неправильный па- роль, пользователю выдается уведомление об этом, после чего он может попытаться снова ввести пароль. Но для этого ему да- ется всего 15 секунд! 12. Закройте окно Code, затем щелкните на кнопке Start (Пуск) для запуска программы. Программа начнет работу, начнется и 15-секундный отсчет времени. 13. Введите в поле ввода open, затем щелкните на кнопке Про- верка пароля. Появится следующее диалоговое окно, уведомля- ющее вас о неправильном пароле. Timepass И звини, друг, я тебя не знаю
242 Часть 2. Основы программирования Законченная программа TimePass находится в папке \Vb6Sbs\LessO7. 14. Щелкните на кнопке ОК, затем подождите некоторое вре- мя. Программа отобразит следующее сообщение: 15. Щелкните на кнопке ОК для завершения работы программы. Появится программное окружение Visual Basic. 16. Щелкните на кнопке Save Project (Сохранить проект) и сохра- ните форму и проект под именем MyTimePass. Чтобы повысить производительность Не пожалейте нескольких минут и поработайте с утилитой Alarm (Секре- тарь) (alarm.vbp) в папке \Vb6Sbs\Extras на вашем жестком диске. Я напи- сал эту программу как расширение программы DigClock, чтобы дать вам возможность попрактиковаться в работе с таймерами и времясберегаю- щей концепцией, изложенной в этом уроке. Программа - это своего рода «личный секретарь», она выдает звуковой сигнал и напоминание, когда приходит время следующей встречи или работы. Эта «напоминалка» по- лезна, если вы много времени проводите за компьютером - дома или на работе. Во всяком случае, она удобнее, чем листочки с записями, которые то и дело норовят потеряться. Эта программа считывает текущее время, установленное в системных часах вашего компьютера, поэтому прежде чем пользоваться пограммой, откройте Панель управления (Control Panel) и выставите часы. Эта программа может работать в отдельном окне или ждать своего часа на панели задач. Вы можете доработать программу или использовать ее в ее нынешнем виде.
Урок 7. Использование циклов и таймеров 243 Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдит с уроку 8. Если вы хотите выйти из Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Выполнить группу операторов в про- грамме заданное число раз Вставьте операторы между ключевыми словами For и Next цикла. Например: Fori = 1 ТоЮ MsgBox ("Нажмите ОК!") Next i Отобразить одну или несколько строк в форме Используйте команду Print. Например: For Cnt = 1 То 5 Print “Текущая цена"; Cnt Print "Пока все хорошо" Next Cnt Использовать осо- бую нумерацию в операторах Вставьте операторы в цикл For...Next и задайте тре- буемую нумерацию с помощью ключевых слов То и Step. Например:
244 Часть 2. Основы программирования Чтобы Сделайте следующее For i = 2 То 8 Step 2 Print i; Next i Print "Кого Вы цените?" Досрочно выйти из цикла For...Next Используйте оператор ExitFor. Например: For i = 1 ТоЮ InpName = InputBox (“Имя?") If InpName = "Троцкий" Then Exit For Print InpName Next i Выполнять группу операторов,пока не будет выполнено требуемое условие Вставьте операторы между ключевыми словами Do и Loop. Например: Do While Query о "Да" Query = InputBox (“Троцкий?”) If Query о "Да" Then Print Query Loop Избежать беско- нечного цикла Do Убедитесь, что в цикле имеется контрольное усло- вие, которое может принимать значение False (Ложь) Выполнять цикл, пока определенное условие не примет значение True (Ис- тина) Используйте цикл Do с ключевым словом Until. На- пример: Do Giveln = InputBox("Скажите 'Дядя' “) Loop Until Giveln = "Дядя" Выполнять цикл определенное вре- мя Используйте объект типа таймер. Поместить имя в заголовок окна при- ложения Установите для свойства Caption (Надпись) объекта Forml нужное имя.
Создание интерфейса пользователя К $ к 8 Si к & $ & & $ & & а & & & & & & &

урок» 8 : Работа с формами, принтерами и обработчиками ошибок Ж ж ж ж ®\ ж Урок ж рассчитан * на м 45 минут » ж ж ж ж ж ж ж ж ж ж ж Вы научитесь: добавлять новые формы в программу; досылать выходные данные на принтер; обрабатывать ошибочные ситуации при выполнении про- граммы с помощью обработчиков ошибок. В части 2 вы познакомились с рядом полезных операторов функций и структур управления Microsoft Visual Basic, ис- пользуемых в ваших программах. В части 3 мы снова сосре- доточим внимание на интерфейсе пользователя. Вы узнае- те, как создавать различные графические эффекты и надежно работающие приложения. В этом уроке вы узнае- те, как добавлять дополнительные формы в интерфейс вхо- да, выхода и специальных сообщений. Вы также узнаете, как отправлять выходные данные программы на принтер и как пользоваться обработчиками ошибок при возникновении непредвиденных ситуаций.
248 Часть 3. Создание интерфейса пользователя Добавление новых форм в программу Каждая форма имеет уникальное имя и собственный набор объектов, свойств и процедур обработки прерываний. Каждая из ранее написанных вами программ имела только одну форму для входа и выхода. В большинстве случаев этого бывает достаточно для связи с пользователем. Если же вы хотите иметь большее количество ин- формационных панелей в вашей программе, Visual Basic позволяет доба- вить в нее одну или несколько форм. Каждая новая форма считается объектом и содержит собственные объекты, свойства и процедуры обра- ботки прерываний. Первая форма в программе имеет имя Forml, а после- дующие - Form2, Form3 и т.д. В таблице приведены примеры практическо- го использования форм в ваших программах. Форма или формы Описание Экран-заставка Экран, отображающий сообщение-приветствие, заставку или информацию о защите прав разра- ботчика (Copyright). Инструкции программы Экран, отображающий информацию и рекомен- дации при работе программы. Диалоговые окна Диалоговые окна пользователя, в которых осу- ществляется ввод входных и отображение выходных данных. Содержимое документов и графические эффекты Экран, отображающий содержимое одного или нескольких файлов, используемых в программе. Бланки или шаблоны форм Можно создать новую форму, щелкнув на команде Add Form (Добавить форму) в меню Project (Проект). Появится диалоговое окно, в котором вы можете выбрать тип создаваемой формы. Вы можете создать новую, пус- тую форму, или же некую законченную форму, разработанную для спе- циальной задачи. Как использовать формы Формы могут быть модальными и немодальными.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 249 Visual Basic обладает очень гибкой системой использования форм. Вы можете сделать все формы в программе видимыми одновременно, или же загружать и выгружать формы по мере необходимости. Если у вас одно- временно отображается более одной формы, вы должны предусмотреть для пользователя возможность переключаться между формами или уп- равлять порядком использования форм. Форма, которая всегда должна использоваться при ее отображении на экране, называется модальной (формальной) - она остается на первом плане, пока пользователь не щел- кнет на кнопке ОК, на кнопке Cancel (Отмена), или закройте ее другим спо- собом. форма, которую пользователь может отключить, называется немодаль- ной (неформальной). В большинстве приложений в Microsoft Windows для отображения информации используются немодальные формы, посколь- ку они предусматривают большую гибкость использования, поэтому фор- ма принимается немодальной по умолчанию при создании новой формы. Вы также можете задать любое свойство для формы, включая заголовок, размер, тип рамки, цвет фона и символов, шрифт текста и фоновый ри- сунок. Операторы управления формами После того, как вы создали новую форму, вы можете загрузить ее в па- мять и использовать с помощью специальных операторов в процедурах. Для загрузки формы используется следующий оператор: Load имя формы где имя формы указывается для той формы, которую вы хотите загру- зить. Например,, оператор Load Form2 загружает вторую форму программы в память. Оператор Load загружает новую форму в память. Загрузив форму, вы можете использовать ее в любой процедуре обработ- ки прерываний в вашей программе, а также иметь доступ к любому ее свойству. Например, чтобы установить для свойства Caption (Надпись) для второй формы вашей программы значение «Сортировка результатов», вы можете записать следующий оператор: Form2. Caption = "Сортировка результатов" Команда Show отображает загруженную форму на экране.
250 Часть 3. Создание интерфейса пользователя Если вам нужно отобразить загруженную форму, вы можете сделать это с помощью команды Show вне зависимости от того, является форма мо- дальной или немодальной. Синтаксис команды Show следующий: имя формы Show режим где режим имеет значение 0 для немодальных форм (используется по умолчанию) или значение 1 для модальных форм. Например, чтобы ото- бразить форму Form2 как немодальную (по умолчанию), можно использо- вать команду Show следующим образом: Form2.Show По умолчанию новая форма является немодальной. Чтобы отобразить форму Form2 как модальную, следует использовать опе- ратор: Form2.Show1 Примечание. Если вы используете команду Show до использования команды Load, Visual Basic автоматически загрузит и отобразит указанную форму. В Visual Basic предусмотрены отдельные команды Load и Show, чтобы дать возможность программисту предварительно загружать формы в память, дабы команда Show работала быстрее, и пользователи не за- мечали бы задержки, возникающей при загрузке формы. Предвари- тельная загрузка форм весьма полезна, особенно если они содержат несколько объектов или графические эффекты. Как скрыть и выгрузить форму С помощью команды Hide можно сделать форму невидимой. Вы можете скрыть форму с помощью команды Hide, а также выгрузить форму с помощью команды Unload. Эти команды являются противополож- ностью команд Show и Load. При скрытии формы она не отображается на экране, но остается в памяти, чтобы ее можно было использовать в про- грамме в дальнейшем. (Этот процесс аналогичен использованию свойства Visible (Видимость).) При выгрузке формы она удаляется из памяти. Тем самым освобождается оперативная память, куда могут быть загружены объекты и графика для формы, но не память, используемая процедурами обработки прерываний для данной формы. Программный код всегда ос- тается в памяти. Вы можете использовать ключевые слова Hide и Unload для скрытия и выгрузки формы Form2 следующим образом:
Урок 8. Работа с формами, принтерами и обработчиками ошибок 251 ----- Form2.Hide Unload Form2 Qnepam0P Unload удаляет форму из памяти. Важно! I После выгрузки формы все связанные с ней значения и свойства те- I ряются. При повторной загрузке формы она будет содержать ориги- I нальные значения, установленные программой. I Как свернуть форму Вы можете свернуть форму (поместить ее на панель задач) или развер- нуть форму (расширить ее во весь экран) с помощью свойства WindowState (Статус окна). Например, следующий оператор в программе свернет окно формы Forml: Forml .WindowState = 1 Чтобы развернуть форму Forml, следует использовать следующий опе- ратор: Forml .WindowState = 2 Чтобы вернуть нормальные размеры формы, установленные по умолча- нию, используйте оператор: Forml.WindowState = О В программе Alarm из папки \Vb6Sbs\Extras демонстрируется, как работает свойство WindowState (Статус окна). Добавление в программу имеющихся форм Visual Basic позволяет вам повторно использовать ваши формы в но- вых программных проектах. По этой причине вам следует сохранять формы в виде отдельных файлов .frm при выполнении упражнений в книге. Чтобы добавить в проект имеющуюся форму, щелкните на ко- манде Add Form (Добавить форму) в меню Project (Проект) Visual Basic, а затем щелкните на вкладке Existing (Существующие). Будет отобра- жено диалоговое окно, содержащее список всех форм из папки Visual Basic (C:\Program Files\DevStudio\VB). Чтобы добавить существующую фор- му, дважды щелкните на имени файла формы в диалоговом окне. Visual Basic добавит указанную форму в проект, после чего вы смо-
252 Часть 3. Создание интерфейса пользователя жете просматривать форму и менять текст ее процедур обработки прерываний с помощью щелчка на кнопке View Object (Объект) и на кнопке Code (Программа) в окне Project (Проект). Вы можете задать на- чальную форму для вашей программы (она загружается первой), щел- кнув на команде Properties (Свойства) в меню Project (Проект), а затем - на вкладке General (Общие), после чего выбрать соответствующую фор- му в списке Startup Object (Автозагрузка объекта). Если вы изменяете существующую форму в новом проекте, вам необходимо будет преж- де всего сохранить ее под другим именем, в противном случае другие проекты, использующие эту форму, не будут корректно работать. Работа с несколькими формами: программа Italian Следующее упражнение демонстрирует, как можно использовать вторую форму для отображения графики и текста для программы-словаря инос- транного языка с именем Italian. До сих пор в программе использовалась функция MsgBox для отображения значений каждого из слов, но теперь вы модифицируете ее, чтобы в ней для отображения информации исполь- зовалась вторая форма. Запустим программу Italian 1. Запустите Visual Basic. 2. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов. 3. Откройте проект Italian из папки \Vb6Sbs\LessO8. 4. Если форма Italian не открыта, щелкните на форме Italian в окне Project (Проект), а затем щелкните на кнопке View Object (Объект). Появится программный интерфейс пользователя. Попробуйте теперь запустить программу. 5. Щелкните на кнопке Start (Пуск) на панели инструментов. В поле списка формы появится перечень итальянских глаго- лов. Чтобы получить значение слова, дважды щелкните на слове в списке.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 253 6. Дважды щелкните на слове «dormire». В окне сообщения появится значение слова dormire - спать: «luilllllf Выходное значение отображено функцией MsgBox в диалоговом окне, которое выглядит не слишком привлекательно. 7. Щелкните на кнопке ОК, чтобы закрыть диалоговое окно. Диалоговое окно будет закрыто, и вы вернетесь к основной фор- ме. 8. Щелкните на кнопке Выход для выхода из программы. Теперь вы замените функцию MsgBox дополнительной формой, которая будет использоваться для отображения информации. С помощью кнопки Form (Форма) на панели инструментов вы создадите новую форму для программы. Создадим вторую форму для программы 1. В меню Project (Проект) щелкните на команде Add Form (Доба- вить форму).
254 Часть 3. Создание интерфейса пользователя Появится диалоговое окно Add Form (Добавление формы), в ко- тором на вкладке New (Новая) отображены шесть шаблонов форм. 2. Щелкните на кнопке Open (Открыть), чтобы открыть новую, пустую форму в проекте. Пустая форма с именем Form2 появится в программном окружении. 3. Уменьшите размеры второй формы до небольшого прямоу- гольного диалогового окна. Следует уменьшить размеры именно окна Form2, а не окна Projectl, в котором находится форма. 4. Щелкните на кнопке управления Image (Изображение) на па- нели инструментов, затем создайте средних размеров рамку для изображения в левой части формы. Это поле будет использоваться для отображения точечного ри- сунка итальянского флага. 5. Щелкните на кнопке управления Label (Поле метки), затем создайте поле вывода вверху и в середине формы. 6. Щелкните на кнопке управления TextBox (Текстовое поле), затем создайте большое текстовое поле ниже поля вывода в середине формы. 7. Щелкните на кнопке управления CommandButton (Командная кнопка), затем создайте командную кнопку в правой части фор- мы. Установите для вашей новой формы следующие свойства: Объект Свойство Imagel Stretch (Возможность растяжения) Picture (Рисунок) Labell Font (Шрифт) Textl TabStop (Табуляция) Commandl Caption (Надпись) Form2 Caption (Надпись) Установленное значение True (Истина) c:\Vb6Sbs\less08\flgitaly.ico Times New Roman, Bold, 14-point False (Ложь) Закрыть Значение
Урок 8. Работа с формами, принтерами и обработчиками ошибок 255 Примечание. установка значения False (Ложь) для свойства TabStop (Табуляция) для текстового поля предупреждает фокусировку на поле при нажатии пользователем клавиши | Tab |.Если не установить этого свойства при отображении формы в текстовом поле будет присутствовать мигаю- щий курсор. нам... По завершении установки свойств ваша форма должна выгля- деть так, как показано на рисунке: Теперь сохраните новый проект и новую форму. Как вам изве- стно, Visual Basic требует, чтобы каждая форма была сохране- на в виде собственного файла. Тем не менее, форму могут ис- пользовать несколько проектов. Прежде чем сохранить форму Form2,.убедитесь, что она является активной, или выделенной, в программном окружении (как это имеет место сейчас). 8. В меню File (Файл) щелкните на команде Save As (Сохранить как) для Form2. Появится диалоговое окно Save File As (Сохранить файл как). 9. Сохраните форму Form2 под именем MyDef.frm в папке \Vb6Sbs\LessO8.
256 Часть 3. Создание интерфейса пользователя Вторая форма будет сохранена на диске и зарегистрирована в окне Project (Проект). Вы можете переключаться между форма- ми с помощью щелчка мышью или выделением имени формы в окне Project (Проект) и щелчком на кнопке View Object (Объект). . 10. Щелкните на Forml, затем щелкните на команде Save As (Со- хранить как) для Italian.frm в меню File (Файл) для сохранения формы Forml. Введите имя MyWordList.frm, затем нажмите клавишу | Enter |. Теперь сделанные вами изменения в форме Forml не будут от- ражены для проекта Italian. 11. В меню File (Файл) щелкните на команде Save Project As (Со- хранить проект как), затем сохраните проект под именем Myltalian2.vbp. Теперь модифицируем процедуру Text1_DblClick для отображения новой формы. Доступ ко второй форме в процедуре 1. Щелкните на первой форме, затем дважды щелкните на объекте Listl в форме. В окне Code будет отображен текст процедуры обработки пре- рывания Listl _DblClick. В этой процедуре имеется структура ус- ловного выбора Select Case, использующая функцию MsgBox для отображения значения выделенного итальянского слова. Эта структура определяет выбранное слово из списка и присваи- вает переменной Def значение, соответствующее переводу это- го слова. При желании присмотритесь повнимательнее к струк- туре с условием. 2. Прокрутите вниз окно Code с текстом процедуры. Появится следующая строка с использованием функции MsgBox: MsgBox (Def),, Listl .Text 3. Удалите функцию MsgBox и введите вместо нее следующие операторы: Load Form2 Form2.Labell = Listl.Text Form2.Text1 = Def Form2.Show
Урок 8. Работа с формами, принтерами и обработчиками ошибок 257 Объект с именем Form2 соответствует новой форме в вашей программе. Первый оператор загружает форму Form2 в память. (Вы также можете предварительно загрузить форму в процедуре обработки прерывания Form_Load.) После загрузки формы в память вы мо- жете изменить свойства формы и подготовить ее к отображению. Оператор во второй строке помещает копию выделенного италь- янского слова в первое поле вывода формы Form2. В третьей стро- ке переменной Def (хранящей значение слова в переводе) назна- чается текстовое поле новой формы. Текстовое поле используется для вывода в него достаточно длинных значений слов. Если зна- чение занимает поле целиком, появляются полосы прокрутки, дающие возможность просмотреть всю строку. Наконец, команда Show отображает законченную форму на экране. Теперь добавим оператор для кнопки Закрыть в форме Form2, ко- торая служит для закрытия формы. 4. Закройте окно Code, щелкните на форме Form2 (или отобрази- те ее с помощью окна Project (Проект)), затем дважды щелкните на кнопке Закрыть. В окне Code будет отображен текст процедуры обработки пре- рывания Command1_Click. Эта процедура ассоциирована с первой кнопкой формы Form2 - но не с первой кнопкой формы Forml. Объекты в различных формах могут иметь одни и те же имена, но Visual Basic умеет их различать. Тем не менее, если похожие или идентичные имена могут ввести вас в заблуждение, вы все- гда в состоянии изменить их с помощью окна Properties (Свойства). Объекты в разных формах могут иметь одинаковые имена. Примечание. Чтобы изменить имя объекта, выделите объект в форме, а затем вос- пользуйтесь окном Properties (Свойства) для изменения свойства Name (Имя) объекта. Свойство Name (Имя) содержит заголовок, который ис- пользуется Visual Basic для идентификации объекта, поэтому, изме- нив имя объекта, проверьте, чтобы это изменение было сделано во всех местах, где это имя встречается в программе. Имя объекта должно быть достаточно характерным, чтобы вы легко могли запомнить пред- назначение объекта. В именах объектов, как и в именах переменных, можно использовать префиксы, облегчающие их идентификацию. Например, командная кнопка для выхода из программы может быть названа cmdQuit.
258 Часть 3. Создание интерфейса пользователя 5. Введите в текст процедуры следующий оператор: Form2.Hide Этот оператор использует ключевое слово Hide, чтобы сделать форму Form2 невидимой, когда пользователь щелкнет на кноп- ке Закрыть. Поскольку форма Form2 является немодальной, пользователь может переключаться между формами Forml и Form2 в процессе выполнения программы. Пользователь может закрыть форму Form2, щелкнув на кнопке Закрыть. Команда Hide позволяет сделать новую форму невидимой, когда пользо- ватель щелкнет на кнопке Закрыть. 6. Щелкните на кнопке Save Project (Сохранить проект) для со- хранения измененного проекта. 7. Щелкните на кнопке Start (Пуск) для запуска программы. 8. Дважды щелкните на глаголе «cucinare» в списке. Программа отобразит значение слова во второй форме, как по- казано на рисунке. Теперь попробуем переключаться между формами. 9. Щелкните на первой форме, затем дважды щелкните на сло- ве «scrivere». Программа отобразит значение слова «scrivere» (писать) во второй форме. Поскольку формы являются немо- дальными, вы можете переключаться между формами по ва- шему желанию. 10. Щелкните на кнопке Закрыть во второй форме. Программа скроет форму. 11. Щелкните на кнопке Выход в первой форме. Работа програм- мы будет завершена, и Visual Basic выгрузит обе формы. Вы вернетесь в программное окружение. Программа Italian2 находится в папке \Vb6Sbs\LessO8.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 259 Вывод выходных данных программы на принтер Visual Basic позволяет отправлять выходные данные на установленный принтер с помощью команды Print. Об этой команде вы узнали в уроке 6, когда использовали ее в теле цикла для отображения текста в форме. Чтобы отправить данные на подключенный принтер, используйте команду Print для объекта Printer (Принтер). Например, следующий оператор посы- лает строку на установленный в Windows по умолчанию принтер: Printer.Print "Моряки" Объект Printer (Принтер) управляет выводом на принтер. Перед печатью вы также можете использовать объект Printer (Принтер) для задания шрифта символов. Например, следующие команды выводят на печать слово «Моряки» с размером шрифта 14 пунктов. Printer.FontSize = 14 Printer.Print "Моряки" Объект Printer (Принтер) обладает рядом свойств, управляя которыми, вы можете изменять параметры печати. В отличии от форм и объектов, созда- ваемых в качестве средств управления в диалоговых окнах, вы не можете устанавливать свойства объекта Printer (Принтер) с помощью окна Properties (Свойства). Каждое свойство должно быть установлено в тексте программы. Формы MDI: окна с иерархическими связями В большинстве случаев вы будете создавать стандартные формы, че- рез которые пользователь взаимодействует с программой, а также специальные формы для управления входными и выходными данны- ми. Однако Visual Basic поддерживает также иерархические формы, представляющие собой группу взаимосвязанных полей. Такие фор- мы называют MDI-формами (от Multi Document Interface - интер- фейс с несколькими документами). Эти формы, в зависимости от сте- пени иерархии в группе, делятся на родительские и дочерние. Родительская форма создается с помощью команды Add MDI Form (До- бавить MDI-форму) из меню Project (Проект), а дочерня форма созда- ется с помощью команды Add Form (Добавить форму) из меню Project (Проект) с последующей установкой для свойства MDIChild значения True (Истина). В основном MDI-формы при работе программы ведут себя подобно обычным формам, за следующими исключениями.
260 Часть 3. Создание интерфейса пользователя Все дочерние формы отображаются внутри окна их роди- тельской формы. При сворачивании дочерней формы она представляется в виде небольшого прямоугольника в окне формы MDI, а не в виде кнопки на панели задач. При сворачивании родительской формы она и все ее до- черние формы отображаются в виде одной кнопки на па- нели задач. Имена всех дочерних форм отображаются в строке меню родительской формы. При развертывании дочерней фор- мы ее название отображается в строке заголовка родитель- ской формы. Вы можете отобразить все дочерние формы, входящие в родительскую форму, установив для свойства AutoShowChildren (Автоматически отображать дочерние формы) значение True (Истина). Родительские и дочерние формы особенно полезны для так называе- мых документальных приложений, в которых для отображения или редактирования документов используется множество окон. Чтобы побольше узнать о MDI-формах и их применении, обратитесь к спра- вочной системе Visual Basic. (В процедуре обработки прерывания Form_Load вы можете установить стандартные настройки, которые будут использоваться всякий раз при выполнении вашей программы.) Тем не менее, многие свойства и коман- ды для объекта Printer (Принтер) сходны с ключевыми словами, которые вы уже использовали для форм и объектов, создаваемых с помощью па- нели инструментов. В следующей таблице приведены некоторые из наи- более полезных свойств и команд объекта Printer (Принтер) и их назначе- ние. Примечание. Для получения полной информации о свойствах и командах для объек- та Printer (Принтер), воспользуйтесь ключевыми словами Printer object в справочной системе Visual Basic. Вы также можете использовать эти свойства для установки параметров печати для вашего принтера.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 261 Свойство Назначение -—— FontName (Гарнитура шрифта) FontSize (Размер шрифта) FontBold (Полужирный шрифт) Fontltalic (Курсивный шрифт) Page (Страница) Устанавливает гарнитуру шрифта для текста. Устанавливает размер шрифта для текста. Значение True (Истина) определяет полу- жирное начертание шрифта. Значение True (Истина) определяет кур- сивное начертание шрифта. Задает номер страницы для вывода на печать. Команда Назначение Print (Печать) Печатает заданный текст на принтере. NewPage (Новая страница) Осуществляет переход к печати новой стра- ницы. EndDoc (Конец документа) Устанавливает конец печатаемого текст. KillDoc (Конец печати) Завершает текущий процесс печати. В следующем упражнении вы добавите основные операторы для поддер- жки процесса печати в программу Myltalian2, созданную вами ранее в этом уроке. Вы используете свойства FontName, FontSize и FontBold для изменения стиля текста; используете команду Print (печать) для вывода значений слов, а также команду EndDoc для завершения печати. Добавим в программу Myltalian2 возможность вывода на принтер Чтобы выполнить это упражнение, откройте проект МуItalian2e папке Wb6Sbs\LessO8. 1. Откройте файл проекта МуItalian2, если он еще не был открыт. Если вы не создали проект Myltalian2.vbp, можете загрузить файл Italian2.vbp с вашего жесткого диска. 2. Отобразите вторую форму в проекте (MeDef.frm или Def.frm, если вы используете проект Italian2.vbp).
262 Часть 3. Создание интерфейса пользователя В этой форме отображаются значения итальянских слов, кото- рые выбираются пользователем из списка с помощью двойного щелчка мышью. Вы добавите в форму кнопку Печать, чтобы дать возможность пользователю вывести значение слова на печать. 3. Щелкните на кнопке управления CommandButton (Командная кнопка) на панели инструментов, затем создайте командную кнопку слева от кнопки Закрыть. Если для кнопки недостаточно места, расширьте форму и пе- реместите кнопку Закрыть вправо или уменьшите размеры поля метки Labell. По завершении этих действий ваша форма долж- на выглядеть так, как показано на рисунке. 4. Измените надпись для кнопки на Печать с помощью окна Properties (Свойства). 5. Дважды щелкните на новой кнопке Печать, чтобы отредакти- ровать процедуру обработки прерывания. В окне Code будет ото- бражена процедура Command2_Click. 6. Введите в процедуру следующие операторы управления: Printer.Print"" Printer.FontName = “Arial" Printer.FontSize = 18 Printer.FontBold = True Printer.Print Labell.Caption Printer.FontBold = False Printer.Print Textl .Text Printer.EndDoc Использование поддерживаемых Windows шрифтов True Type сделает вашу программу совместимой с большинством типов принтеров. Ниже приведено описание этих операторов. Первый оператор инициализирует объект типа принтер, подготавливая его к выводу информации.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 263 Свойство FontName (Шрифт) устанавливает для печатаемых символов гарнитуру Arial, True Type. Свойство FontSize (Размер шрифта) устанавливает размер шрифта, равный 18 пунктам. Установка для свойства FontBold (Полужирный шрифт) зна- чения True (Истина) включает режим полужирного шрифта. В пятой и седьмой строках используется команда Print для вывода на печать итальянского слова и его значения. Последняя строка завершает работу принтера. Примечание. Если вы хотите, чтобы на одной странице было напечатано несколько значений слов, вы можете отложить использование команды EndDoc, пока пользователь не щелкнет на кнопке Выход для завершения рабо- ты программы. 7. В меню File (Файл) щелкните на команде Save MyDef.frm As (Со- хранить MyDef.frm как), затем сохраните вторую форму под именем MyPrinFrm.frm. Тем самым вы оставите неизменной форму MyDef.frm на диске. 8. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как), затем сохраните новый проект под именем MyPrinFrm.vbp. Законченный проект PrinFrm содержится в папке \Vb6Sbs\LessO8. Поскольку вы не сохранили форму MyWordList.frm под новым именем, она и соответствующие ей процедуры будут совмест- но использоваться как проектом MyPrinFrm.vbp, так и проектом Myltalian2.vbp. В случае изменения файла MyWordList.frm (самой формы или процедуры обработки прерывания) изменения бу- дут отражены в обоих проектах. Запустим программу MyPrinFrm Теперь, если у вас есть подключенный к компьютеру принтер, запустите программу. Ваше приложение будет использовать установленный по умолчанию принтер в папке Windows Printers, поэтому устройство печати может быть локальным принтером, сетевым принтером или факс-моде- мом. Проверьте, чтобы принтер был включен и готов к работе.
264 Часть 3. Создание интерфейса пользователя 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Про- грамма будет запущена в среде программирования Visual Basic. 2. Дважды щелкните на итальянском слове «Ьеге» в списке. Значение слова будет отображено в следующей форме: 3. Щелкните на кнопке Печать в форме, чтобы распечатать зна- чение слова на принтере. Visual Basic отправит ваш документ на установленный по умолчанию принтер. Важно! Если ваш принтер не готов к печати, Visual Basic посылает сообще- ние, что программа не готова к выполнению. Это может привести к ошибке выполнения программы или даже к краху программы. Далее в этом уроке вы узнаете, как обрабатывать ошибки выполнения, свя- занные с дисководами, принтерами и другими устройствами. 4. Щелкните на кнопке Закрыть в окне со значением слова, затем щелкните на кнопке Выход для завершения работы программы. Программа будет остановлена, и вы вернетесь в программное окружение. Как распечатать форму целиком с помощью команды PrintForm Помимо вывода на печать отдельных строк с помощью команды Print, вы можете распечатать все содержимое формы или нескольких форм с по- мощью команды PrintForm. При этом вы можете разместить в форме текст,
Урок 8. Работа с формами, принтерами и обработчиками ошибок 265 графику и элементы интерфейса, а затем отправить всю форму на прин- тер. Вы можете использовать ключевое слово PrintForm самостоятельно для печати текущей формы, или же как имя для печати какой-либо другой формы. Например, чтобы распечатать содержимое второй формы в про- грамме, вы можете ввести оператор Form2. PrintForm в любую процедуру программы. Следующий пример демонстрирует использование команды PrintForm для печати формы, содержащей текст и графику. В большинстве случаев ко- манда PrintForm является простейшим способом вывести графическое изоб- ражение на принтер. Примечание. Команда PrintForm выводит форму на печать с текущим разрешением вашего видеоадаптера, обычно составляющим 96 точек на дюйм. Использование команды PrintForm для печати текста и графики 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК, чтобы создать новое стандартное приложение. 2. Щелкните на кнопке управления Label (Поле метки), затем Л создайте средних размеров поле в центре формы. 3. Щелкните на кнопке управления CommandButton (Командная —' кнопка), затем создайте кнопку в правом нижнем углу формы. 4. Установите следующие свойства для объектов в программе: Объект Свойство Установленное значение Labell Caption (Надпись) Квартальный отчет BackS tyle (Тип фона) Font (Шрифт) Alignment (Выравнивание) Commandl Caption (Надпись) Forml Picture (Рисунок) 0 - Transparent (Прозрачный) MS Sans Serif, Bold, 14-point 2 - Center (по центру) Печатай! C:\Vb6Sbs\Less08\prntout2.wmf
266 Часть 3. Создание интерфейса пользователя 5. Дважды щелкните на кнопке Печатай!, чтобы открыть проце- дуру обработки прерывания. 6. Введите следующий оператор: Forml.PrintForm 7. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов для сохранения формы и проекта. Введите MyPrintWMF в качестве имени формы и проекта. 8. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа отобразит следующую форму: 9. Щелкните на кнопке Печатай! для печати содержимого формы. Законченная программа PrintWMF содержится в папке \Vb6Sbs\LessO8. Visual Basic отправит все содержимое формы (надпись в поле метки, метафайл Windows и командную кнопку) на принтер. В процессе печати документа вы увидите следующее диалоговое окно Visual Basic: Через некоторое время выходные данные программы будут воспроизведены принтером на бумаге.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 267 Команда PrintForm выводит на печать все видимые объекты формы. Внимание! Команда PrintForm выводит на печать только те объекты формы, кото- рые в данный момент являются видимыми. Чтобы не допустить печати нежелательных объектов (например, кнопки Печатай! в последнем при- мере), установите для свойства Visible (Видимость) таких объектов зна- чение False (Ложь) до вызова команды PrintForm. По окончании процесса печати формы вы можете сделать эти объекты видимыми снова. Обработка ошибочных ситуаций с помощью обработчиков ошибок Вы уже сталкивались с ошибками при выполнении программ Visual Basic? Ошибка выполнения, или крах программы (фатальный сбой), представля- ет собой непредвиденное событие, после которого Visual Basic не может корректно управлять ходом программы. Возможно, вы уже столкнулись с крахом программы в этом уроке при попытке вывода на печать, если что- то не сработало так, как надо. (Возможно, в принтере не было бумаги или он был отключен, и вы получили сообщение об ошибке печати от Visual Basic или от Windows.) Ошибка выполнения возникает в тех случаях, когда Visual Basic выполняет оператор, который по какой-либо причине не может быть завершен «как положено». Это не значит, что Visual Basic не в состоянии справиться с задачей; это лишь означает, что компилятор не получил соот- ветствующих указаний на случай, если что-то не так. Обработчики ошибок помогают программе избавиться от ошибок вы- полнения. К счастью, у вас есть средство борьбы со случайно возникающими ошиб- ками, приводящими к краху вашей программы. Visual Basic позволяет вам создавать специальные процедуры, называемые обработчиками ошибок, которые вызываются в случае возникновения ошибки при выполнении. Обработчик ошибок сообщает программе, как ей продолжить работу в случае появления ошибки выполнения одного из операторов. Обработчик ошибок помещается в те же процедуры обработки прерываний, в кото- рых имеются операторы, способные вызвать потенциальный сбой. Обра- ботчик ошибок реагирует на ситуацию с помощью специального объекта для обработки ошибок с именем Err. Объект Err имеет свойство Number (Чис- ло), которое идентифицирует ошибку и позволяет вашей программе пред- принять необходимые действия. Например, если возникает ошибка дис- кеты, обработчик ошибки отображает для пользователя сообщение об
268 Часть 3. Создание интерфейса пользователя ошибке, а затем запрещает операции с диском до тех пор, пока пользова- тель не исправит проблему. Использование обработчиков ошибок Большинство ошибок выполнения вызываются внешними событиями. Вы можете использовать обработчик ошибки в любой ситуации, при ко- торой непредвиденное действие может привести к ошибке выполнения. Обычно обработчики ошибок используются для обработки внешних со- бытий, оказывающих влияние на программу, например, события, вызван- ные сбоем сетевого диска, открытая дверца дисковода или отключенный принтер. В следующей таблице содержится список потенциальных про- блем, которые воспринимаются обработчиками ошибок. Проблема Описание Проблемы с сетью Сбой сетевых дисков или ресурсов. Проблемы с гибким диском Неформатированные или неправильно отформа- тированные диски, открытая дверца дисковода, или плохие сектора на диске. Проблемы с принтером Принтер не подключен, нет бумаги, или другой сбой. Ошибки переполнения Слишком много информации для печати или ри- сования. Ошибки использования памяти Не хватает памяти для ресурса или приложения Windows. Проблемы с Буфером обмена Проблемы с передачей данных или с Буфером обмена Windows. Логические ошибки Синтаксические или логические ошибки, не обна- руженные компилятором и предыдущими про- верками (например, неверное имя файла). Настройка реакции на ошибку с помощью оператора On Error Оператор On Error указывает на обработчик ошибки. Оператор On Error используется для обнаружения ошибки выполнения. Вы помещаете оператор On Error в процедуру перед тем оператором, который
Урок 8. Работа с формами, принтерами и обработчиками ошибок 269 —--------------------------------------------------------1 вызывает ваши опасения. Оператор On Error устанавливает реакцию на событие, сообщая Visual Basic место перехода в программе в случае воз- никновения ошибки. Синтаксис оператора On Error следующий: On Error GoTo метка где метка представляет собой имя вашего обработчика ошибки. Обработчики ошибок помещаются в конце процедуры. Каждый обработ- чик имеет собственную метку, сопровождаемую двоеточием (:) - ErrorHandler: или PrinterError:, например. Обработчик ошибки обычно состо- ит из двух частей. В первой части чаще всего используется свойство Err.Number в структуре с условием (например, If...Then или Select Case), а за- тем отображается сообщение или устанавливается свойство на основе типа ошибки. Во второй части имеется оператор Resume, возвращающий управление в программу для продолжения ее выполнения. Операторы Resume Операторы Resume, Resume Next и Resume метка возвращают управление в программу. Вы можете использовать оператор Resume отдельно, с ключевым словом Next или же с указанием метки, к которой вы хотели бы перейти. Ключевое слово Resume возвращает управление оператору, вызвавшему ошибку (в надежде, что условие для возникновения ошибки пропало, или что она не произойдет снова). Использование ключевого слова Resume оп- равдано, если вы просите пользователя разрешить проблему, например, закрыть дверцу дисковода или подготовить к работе принтер. Ключевое слово Resume Next возвращает управление оператору, следую- щему за оператором, вызвавшим ошибку. Использование ключевого сло- ва Resume Next оправдано, если вы хотите пропустить команду и продол- жить работу. Вы также можете указать метку, к которой должен осуществиться переход. Тем самым у вас появляется дополнительная возможность перейти к требуемому месту в процедуре. Как правило, осу- ществляется переход к последней строке в процедуре. Обработчик ошибок привода гибких дисков В следующем упражнении рассмотрим, как создать обработчик ошибки для идентификации ошибок, связанных с приводом гибких дисков. Вы Добавите обработчик ошибки в программу, которая пытается загрузить метафайл Windows с диска А. Вы можете использовать этот прием для
270 Часть 3. Создание интерфейса пользователя добавления обработчиков ошибок в любую программу Visual Basic - про- сто измените номер ошибки и текст сообщения. Примечание. В следующей программе для определения ошибки выполнения ис- пользуется номер ошибки (из свойства Err.Number). Чтобы получить полный список номеров ошибок, обратитесь к теме errors, numbers в справочной системе Visual Basic. Создание обработчика ошибки привода гибких дисков 1. Откройте проект DriveErr. Форма DriveErr появится в окне Project (Проект). 2. Если форма не видна, щелкните на форме DriverErr в окне Project (Проект), затем щелкните на кнопке View Object (Просмотр объекта). 3. Дважды щелкните на кнопке Проверка диска формы. В окне Code появится процедура Command1_Click. Эта процедура обработки прерывания загружает метафайл Windows с име- нем prntoUt2.wmf из корневой папки диска А, но в данном случае выдает ошибку, что файл не существует или открыта защелка дисковода. 4. Введите следующий оператор в начале процедуры: On Error GoTo DiskError Этот оператор активизирует обработчик ошибки в процедуре и сообщает Visual Basic, куда перейти в случае ошибки выпол- нения. Теперь вы добавите обработчик ошибки DiskError в конец процедуры. Этот обработчик ошибки обрабатывает проблемы с приводом гибко- го диска. 5. Перейдите на одну строку ниже оператора LoadPicture, затем введите следующий текст: Exit Sub 'выход из процедуры DiskError: If Err.Number = 71 Then 'если диск не готов... MsgBox (“Пожалуйста, вставьте дискету."),, _
Урок 8. Работа с формами, принтерами и обработчиками ошибок 271 "Дисковод не готов" Resume Else MsgBox ("Файл prntout2.wmf не найден на A:V),, _ “Файл не обнаружен" Resume StopTrying End If StopTrying: Условное выражение в операторе If... Then обработчика ошибок проверяет, равно ли значение свойства Err.Number 71, которое является кодом ошибки, возвращаемому значению в случае, если привод гибкого диска на работает. Если имеет место ошиб- ка диска, программа дает пользователю возможность разре- шить проблему (закрыть дисковод или вставить новый диск), а затем продолжить попытку загрузки. (Снова вызвать функцию LoadPicture с помощью ключевого слова Resume.) Если ошибка не связана с дисководом, программа подразуме- вает, что диск в порядке, но данного файла нет в корневом ка- талоге диска. В этом случае обработчик переходит к метке StopTrying: в конце процедуры, а также выводит сообщение для пользователя. Вы можете ввести дополнительные операторы Elself и номера ошибок, чтобы сделать действия обработчика более избирательными. Если программа не обнаруживает проблем с диском, или если пользователь разрешил имевшуюся проблему, программа про- должает работу до выхода из процедуры в результате действия одного из операторов Exit Sub. Оператор общего назначения Exit Sub можно использовать для выхода из любой процедуры Visual Basic, не дожидаясь выполнения оператора End Sub. В этом слу- чае оператор Exit Sub препятствует запуску обработчика оши- бок после успешной загрузки программой метафайла Microsoft Windows. Вы можете использовать оператор Exit Sub для пропуска обработчика ошибок в процедуре. 6. В меню File (Файл) щелкните на команде Save DriveErr.frm As (Со- хранить DriveErr.frm как), затем сохраните форму под именем MyFinalErr.frm. 7. В меню File (Файл) щелкните на команде Save Project (Сохранить проект как), затем сохраните проект под именем MyFinalErr.vbp.
272 Часть 3. Создание интерфейса пользователя 8. Воспользуйтесь Проводником Windows (Windows Explorer), чтобы скопировать файл Printout2.wmf из папки Vb6Sbs\LessO8 на гибкий диск А. (Для этого вам понадобится чистая дискета.) 9. Извлеките дискету из дисковода А или откройте защелку дисковода. 10. Щелкните на кнопке Start (Пуск) для запуска программы. 11. Щелкните на кнопке Проверка диска в форме. Visual Basic выдаст ошибку выполения, а обработчик ошибок отобразит сообщение, показанное на рисунке. Зта програмг и проверяет диет А А на наличие на нем Файла prntoutiwmf (Если Файл отсутствует или диск не готов к работе выдается сообщение об ошибке ] Нажмите "Проверку диска когда будете готовы (Нажмите Ctrl+Bieak для прерывания программы) Проверка диска Пожалуйста вставьте дис, ету Дисковод ИО I OHIO 12. Вставьте дискету с метафайлом Windows или закройте дис- ковод. 13. Щелкните на кнопке ОК, чтобы завершить работу обработ- чика ошибок и попытаться повторно осуществить загрузку. Через некоторое время метафайл Windows Printout2.wmf будет отображен в форме, как показано на рисунке.
Урок 8. Работа с формами, принтерами и обработчиками ошибок 273 Р* Drive Te-trr Эта программа проверяет диск ДА на наличие на нем Файла pintout2 wmt (Если Файл отсутствует или диск не готов к работе выдается сообщение об ошибке | Нажмите "Проверку диска когда будете готовы [Нажмите Ctrl+Break для прерывания программы) Совет. Если по-прежнему появляется сообщение об ошибке, то у вас, веро- ятно, имеются в программе и другие ошибки. Попробуйте выполнить программу в пошаговом режиме. Ошибки легко выявить с помощью просмотра значений в окне Quick Watch (Быстрый просмотр). При этом вы сможете понаблюдать, как работает обработчик ошибок. 14. Щелкните на кнопке Close (Закрыть) для завершения рабо- ты программы. Шаг вперед: дополнительные приемы в использовании обработчика ошибок Объект Err имеет несколько свойств, которые могут быть использованы для отображения дополнительной информации в ваших обработчиках ошибок. Свойство Err.Description содержит сообщение об ошибке, возвра- щаемое в Visual Basic при возникновении ошибки выполнения. Вы може- те использовать это сообщение в качестве дополнительного источника Информации для пользователя, независимо от того, планируете ли вы Реагировать в программе на ошибку, или нет. Например, следующий об- работчик ошибки использует свойство Description (Описание) для отобра- жения сообщения об ошибке в случае ее возникновения в процессе заг- рузки графического изображения с дискеты:
274 Часть 3. Создание интерфейса пользователя On Error GoTo DiskError Imagel.Picture = LoadPicture ("a:\prntout2.wmf") Exit Sub 'выход из процедуры DiskError: MsgBox (Err.Description),, “Loading Error" Resume 'повторный запуск функции LoadPicture Вы можете использовать этот прием для выявления проблем с гибким диском; например, при использовании неформатированного диска, отсут- ствии файлов или открытой защелке дисковода. Обработчик ошибки ис- пользует оператор Resume для попытки повторить операцию загрузки пос- ле того, как пользователь устранит проблему и щелкнет на кнопке ОК в окне сообщения. При успешной загрузке файла оператор Exit Sub завер- шает работу процедуры обработки прерывания. Примечание. Если вы не можете выйти из цикла обработки ошибки, нажмите кла- виши | Ctrl | + | Break |. Использование повторных попыток Другой прием, который используется при обработке ошибки, состоит в попытке повторить операцию несколько раз, а в случае, если проблема не была решена, пропустить эту операцию. Например, в следующем обра- ботчике ошибки используется в качестве счетчика попыток переменная с именем Retries. В процессе работы, если операция загрузки дважды ока- залась не выполненной (при этом выдается сообщение об ошибке), про- грамма отказывается от новой попытки. Retries - 0 'инициализация счетчика переменных On Error GoTo DiskError Imagel.Picture = LoadPicture ("a:\prntout2.wmf") Exit Sub 'выход из процедуры DiskError: MsgBox (Err.Description),, "Loading Error" Retries = Retries + 1 'увеличение значения счетчика ошибок If Retries >= 2 Then Resume Next Else Resume End If
Урок 8. Работа с формами, принтерами и обработчиками ошибок 275 Этот способ полезен, если вы обрабатываете ошибку, которая может быть исправлена пользователем. Здесь важно помнить, что команда Resume по- вторяет оператор, вызвавший ошибку, а команда Resume Next пропускает этот оператор. Проследите, чтобы следующий оператор оказался именно тем, который вы хотите выполнить, а при продолжении программы убе- дитесь, что обработчик ошибок не будет запущен снова. Хорошим спосо- бом пропустить обработчик ошибки является использование оператора Exit Sub. Вы также можете использовать команду Resume Next с меткой, ука- зывающую Visual Basic на продолжение выполнения программы - команды, следующей за обработчиком ошибки. Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 9. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Добавить новую фор- му в программу Add Form Щелкните на кнопке Add Form (Добавить форму), затем щелкните на Form (Форма), ши в меню Project (Проект) щелкните на команде Add Form (Добавить форму), затем щелкните на Open (Открыть). Загрузить форму в память Используйте оператор Load, например, Load Form2. Отобразить загру- женную форму Создать модальную форму Скрыть форму Удалить форму из памяти Используйте команду Show, например, Form2.Show. Используйте параметр 1 для команды Show, напри- мер, Form2.Show 1. Используйте команду Hide, например, Form2.Hide. Используйте оператор Unload, например, Unload Form2.
276 Часть 3. Создание интерфейса пользователя Чтобы Сделайте следующее Изменить имя объек- та Измените свойство Name (Имя) для объекта в окне Properties (Свойства). Создать родительс- кую форму MDI Создать дочернюю форму MDI В меню Project (Проект) щелкните на команде Add MDI Form (Добавить форму MDI). В меню Project (Проект) щелкните на команде Add Form (Добавить форму), затем установите для свой- ства МDIChild (Дочерняя) формы значение True (Ис- тина). Отправить строку текста на принтер Используйте объект Printer (Принтер) и команду Print, например, Printer.Print "Моряки". Изменить параметры печати Установите нужные свойства для объекта Printer (Принтер) в ходе выполнения программы. Остановить работу принтера Используйте команду EndDoc, например Printer.EndDoc. Распечатать всю форму Обнаружить ошибки выполнения в вашей программе Обработать ошибки выполнения ошибок Используйте команду PrintForm, например Form2.PrintForm. Подключить обработчик ошибки с помощью опе- ратора On Error GoTo метка, где метка представляет собой имя обработчика ошибки. Создайте процедуру обработки ошибок (обычно включающую в себя операторы If...Then или Select Case) ниже метки-идентификатора обработчика. Обычно обработчик ошибок устанавливает свой- ства и отображает сообщения пользователю с по- мощью функции MsgBox. Продолжить работу программы после воз- никновения ошибки Используйте команду Resume, Resume Next или Resume метка. Выйти из процедуры Используйте команду Exit Sub. до выполнения опера- тора End Sub
УРОК . 9 j Я К К я : Добавление : художественного оформления ®: и специальных : эффектов Урок « рассчитан в на > 55 минут ® --------------------------------- в Вы научитесь: и использовать средства управления Line (Отрезок) и Shape “ (Фигура) для добавления в форму графических элемен- и тов; « « использовать средство управления Image (Изображение) в для создания графических командных кнопок; и поддерживать для вашей программы операцию «перета- щить-и-оставить» (drag-and-drop); в изменять вид указателя мыши; в создавать специальные эффекты с помощью анимации. и ----------------------------------------------------- ж Для большинства разработчиков добавление графических и изображений и специальных эффектов в приложение явля- и ется наиболее увлекательной и интересной составляющей программирования. К счастью, создание выразительных и * полезных графических эффектов с помощью Microsoft
278 Часть 3. Создание интерфейса пользователя Visual Basic не сложно. В этом уроке вы узнаете, как вводить привлека- тельные графические объекты в вашу программу. Вы узнаете, как созда- вать художественные изображения для форм, использовать для команд- ных кнопок графику, а также изменять вид указателя мыши. Вы также познакомитесь с возможностью поддержки операций перетащитъ-и-ос- тавитъ в ваших программах, с созданием простейших эффектов анима- ции с помощью изображений и объектов типа «таймер». Познакомившись с материалом этого урока, вы будете достаточно подготовлены, чтобы со- здать любой интерфейс пользователя. Добавление графических элементов с помощью средств Line (Отрезок) и Shape (Фигура) Средства управления Line (Отрезок) и Shape (Фигура) позволяют созда- вать геометрические фигуры. Вы уже знаете, как добавить в форму точечные рисунки, значки и мета- файлы Windows путем создания рамки и вставки в нее изображения. В Visual Basic достаточно просто можно добавить в вашу программу худо- жественные изображения, и в ходе урока вы в этом попрактикуетесь. Вы узнаете, как создать оригинальный графический элемент в вашей форме с помощью средств управления Line (Отрезок) и Shape (Фигура). Эти по- лезные средства находятся в панели инструментов, и вы можете ими вос- пользоваться для создания разнообразных фигур разных цветов и раз- меров. Объекты, созданные таким способом, имеют ряд ограничений - они не могут использоваться программой в ходе ее выполнения и не могут ото- бражаться поверх других объектов — но все же это простой и быстрый метод создания графических элементов. Средство управления Line (Отрезок) Вы можете использовать средство управления Line (Отрезок) для создания прямой линии в вашей форме. Затем вы можете устано- вить ряд свойств, влияющих на внешний вид созданной линии, как вы это делаете для других объектов. Наиболее важными свой- ствами для объекта «отрезок» являются BorderWidth (Толщина), BorderStyle (Тип линии), BorderColor (Цвет) и Visible (Видимость). Свойство BorderWidth (Толщина) позволяет регулировать толщину линии. Это особенно полезно при создании подчеркивания или линии, отделяю- щей один объект от другого. Свойство BorderStyle (Тип линии) позволяет делать линию сплошной, точечной или пунктирной, а свойство BorderColor
урок 9. Добавление художественного оформления и специальных эффектов 279 (Цвет) — устанавливать для линии любой из используемых в Visual Basic стандартных цветов. Наконец, свойство Visible (Видимость) позволяет скрывать линию или отображать ее по мере необходимости. Вы попробуете использовать средство управления Line (Отрезок) после того, как познакомитесь со средством управления Shape (Фигура). СреДство управления Shape (Фигура) Вы можете использовать средство управления Shape (Фигура) для создания прямоугольников, квадратов, овалов и окружно- стей в вашей форме. Вы создаете нужное изображение с помо- щью средства управления Shape (Фигура), а затем в окне Properties (Свойства) задаете характеристики изображения. Свойство Shape контролирует вид изображения; вы можете выб- рать прямоугольник, прямоугольник со скругленными углами, квадрат, квадрат со скругленными углами, овал или окруж- ность. Сложные изображения могут быть созданы путем отри- совки нескольких фигур и отрезков. Другими важными свойствами для объекта Фигура являются FillColor (Цвет заливки), позволяющее задавать цвет объекта; FillStyle (Тип заливки), по- зволяющее задавать текстуру узора заполнения; и BorderColor (Цвет кон- тура), позволяющее отдельно задавать цвет для контура фигуры. Объект Фигура также имеет свойство Visible (Видимость), дающее возможность скрывать или отображать изображение по мере необходимости. В следующем упражнении вы попрактикуетесь в использовании средств Line (Отрезок) и Shape (Фигура). Вы примените их для создания экранной заставки - для фиктивной компании «Окно в Европу». Эта заставка выг- лядит следующим образом: \-!^:<^КЙ0-»;евройу, : ...... К- I IIIH...
280 Часть 3. Создание интерфейса пользователя Использование средств управления Line (Отрезок) и Shape (Фигура) 1. Запустите Visual Basic. Если Visual Basic уже запущен, щелкните на команде New Project (Создать проект) в меню File (Файл) и откройте новый стандар- тный проект. 2. Увеличьте размеры формы настолько, чтобы она могла вме- стить графические объекты и командные кнопки. 3. Щелкните на кнопке управления Label (Поле метки) на пане- ли инструментов, затем создайте достаточно большое поле в верхней части формы. 4. Откройте окно Properties (Свойства), затем установите для свойства Caption (Надпись) поля метки значение «Окно в Евро- пу». 5. Установите для свойства Font (Шрифт) поля метки значение Times New Roman, Bold, 26-point. Установите для свойства ForeColor (Цвет символов) значение Dark blue (Синий). Поле должно занимать почти всю ширину экрана. При необхо- димости отрегулируйте его ширину и высоту, чтобы название занимало одну строку. 6. Щелкните на кнопке управления Line (Отрезок) на панели инструментов, затем создайте отрезок под названием. Отрезок должен занимать почти всю ширину формы, как и надпись. Созданный отрезок имеет по краям маркеры, которые могут использоваться для изменения размеров отрезка. 7. Щелкните на кнопке Properties Window (Окно свойств), чтобы отобразить окно Properties (Свойства) и установить следующие свойства для объекта Отрезок. Объект Свойство Установленное значение Linel BorderWidth (Толщина) 5 BorderColor (Цвет) Dark blue (Синий) Для нового объекта типа Отрезок с именем Linel установлена тол- щина линии в 5 twips {twips равен 1 /20 пункта, или 1 /1440 дюй- ма.) Свойство BorderColor (Цвет) задает для отрезка синий цвет.
Урок 9. Добавление художественного оформления и специальных эффектов 281 Теперь создадим в форме два графических изображения в виде экранов. 8. Щелкните на кнопке управления Shape (Фигура) на панели инструментов, затем создайте прямоугольник в левой части формы. Этот прямоугольник задает контуры для первого экрана. С по- мощью свойства FillStyle (Тип заливки) вы можете сделать изоб- ражение экрана более натуральным. 9. Снова щелкните на кнопке управления Shape (Фигура), затем создайте второй прямоугольник, частично наложенный на пер- вый. Средство управления Shape (Фигура) по своему действию сходно с обычными инструментами графического редактора или про- граммы рисования. Вы создаете базовый объект, а потом уста- навливаете для него свойства, чтобы он принял желаемый для вас вид. 10. Снова щелкните на кнопке Properties Window (Окно свойств), затем установите для двух фигур следующие свойства. Объект Свойства Установленное значение Shapel Shape 0 - Rectangle (Фигура) (Прямоугольник) FillColor Dark yellow (Цвет заливки) (Оранжевый) FillStyle (Тип заливки) 6 - Cross (Крест) BorderColor Dark yellow (Цвет контура) (Оранжевый) Shape2 Shape (Фигура) 4 - Rounded rectangle (прямоугольник co скруг- ленными углами) FillColor (Цвет заливки) Light blue(Голубой) FillStyle (Тип заливки) 6 - Cross (Крест) BorderColor (Цвет контура) Light blue(Голубой)
282 Часть 3. Создание интерфейса пользователя 11. Создайте поле метки в правой части формы. Постарайтесь сделать так, чтобы надпись в ней располагалась в две строки. Установите следующие свойства. Объект Свойства Установленное значение Label2 Caption (Надпись) Качественные изделия для офиса и дома Font (Шрифт) Times New Roman, Italic, 12-point Alignment (Выравнивание) 2 - Center (По центру) 12. Щелкните на кнопке управления CommandButton (Командная кнопка), затем создайте командную кнопку в правом нижнем углу формы. Создайте вторую кнопку слева от первой. 13. Установите для командной кнопки следующие свойства. Объект Свойства Установленное значение Commandl Caption (Надпись) Выход Commands Caption (Надпись) Дальше 14. Дважды щелкните на командной кнопке Выход, введите End в процедуру обработки прерывания Command1_Click, затем зак- ройте окно Code. Данная форма создается в качестве заставки для программы, но если пользователи не захотят запускать программу, они мо- гут выйти из нее, щелкнув на кнопке Выход. Поскольку в дан- ном случае самой программы не существует, а есть только зас- тавка, вам также придется использовать кнопку ВЫХОД. 15. Измените свойство Caption (Надпись) для формы на «Welcome», затем отрегулируйте размеры объектов и самой формы, чтобы экран выглядел более привлекательно. По завершении ваша форма буду выглядеть следующим обра- зом:
Уро* 9, Добавление художественного оформления и специальных эффектов 283 Вы можете использовать подобную заставку в любой написанной вами программе. Ее назначение - приветствовать пользователей и дать им воз- можность продолжить работу с программой или выйти из нее. Если пользователь щелкнет на кнопке Дальше, программа скроет форму зас- тавки, а затем отобразит основную форму приложения. Запустим программу StartFrm 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Появится форма Welcome, как показано на рисунке: k Welcome & jas* Шв«И«|ИИИ8ИЖИИИ1 ивжяииижимвямвм йвиив«иа»ивя»ааа» 'Z W,,№h’Tgmtl>ei№ll мамннмшм '‘Качественные «зgrp<iuя 7?я офиса и ffOMJ." Дальше | | Вьед J _______________.
284 Часть 3. Создание интерфейса пользователя Законченная программа StartFrm содержится в папке \Vb6Sbs\LessO9. В форме сразу же появятся линия и фигуры. Линии и фигуры всегда появляются быстрее, чем загружаемые с диска графи- ческие изображения. 2. Щелкните на кнопке Выход для завершения работы програм- мы. _ 3. Щелкните на кнопке Save Project (Сохранить проект) на пане- JffiL ли инструментов, затем сохраните вашу форму в папке Less09 под именем MyStartFrm.frm. Сохраните проект под именем MyStar tF rm.vbp. Использование команд рисования для создания фигур Visual Basic поддерживает несколько команд для рисования изобра- жений в ваших программах. Вы можете использовать их для созда- ния специальных визуальных эффектов. С помощью команд рисова- ния вы можете создавать изображения в форме и посылать их на принтер. Недостатком команд рисования является относительная сложность их использования в программе. Вам необходимо выучить синтаксис команд, понять принцип их действия в системе координат формы и периодически обновлять изображения после их перекрытия другими окнами. Тем не менее, вы можете использовать команды рисования для создания некоторых визуальных эффектов, которые невозможно создать с помощью средств управления Line (Отрезок) и Shape (Фигу- ра) (например, рисование дуг окружностей и отдельных пикселов). Наиболее полезными являются следующие команды рисования: Line, которая создает отрезок, прямоугольник, либо замкнутый многоуголь- ник; Circle, создающая окружность, либо эллипс, либо дугу; и PSet, ус- танавливающая цвет для отдельного пиксела экрана. Например, следующая команда Circle рисует в форме окружность ра- диусом 750 twips с координатами центра (х, у), равными (1500,1500): Circle (1500,1500), 750 Чтобы подробнее познакомиться с командами рисования, введите клю- чевые слова «line», «circle» или «pset» в справочной системе Visual Basic.
урок 9. Добавление художественного оформления и специальных эффектов 285 Создание командных кнопок с графическими условными обозначениями Вы уже использовали командные кнопки в упражнениях этой книги. Вам известно, что они создаются с помощью средства управления CommandButton (Командная кнопка), после чего устанавливается свойство Caption (Надпись), которое определяет действие, выполняемое при обра- щении к данной кнопке. Для создания командных кнопок, подобных кнопкам на панели инстру- ментов, вы можете использовать средства управления изображением. Помимо кнопок с текстом, Visual Basic позволяет использовать средство управления Image (Изображение) для создания кнопок с графикой. Гра- фическая кнопка содержит рисунок, который визуально отображает вы- полняемое кнопкой действие. Например, кнопка с изображением диске- ты может представлять команду сохранения информации на диске. Графические кнопки могут размещаться по отдельности, либо быть сгруп- пированными в виде наборов, называемых панелями инструментов. Панель инструментов Visual Basic является примером этого типа кнопок, объединенных в группу. В этом разделе вы узнаете, как создать графи- ческую кнопку, которая «нажимается» и «возвращается в исходное со- стояние» при щелчке на ней мышью, подобно кнопкам, которые вы може- те видеть в других приложениях для Microsoft Windows. Контроль события «щелчок мыши» Чтобы действие графических кнопок было максимально реалистичным, вам бы хотелось, чтобы программа реагировала немедленно, когда пользо- ватель помещает указатель мыши на графическую кнопку и нажимает клавишу. В ваших программах вы уже использовали процедуру обработ- ки прерывания, вызванного щелчком мыши, но в данном случае этого не- достаточно. Ваша программа должна реагировать, когда пользователь первый раз нажимает кнопку мь1ши, а не когда он отпускает эту кнопку. Действия мышью в Visual Basic отслеживаются с помощью прерывания MouseDown. Прерывание MouseDown обнаруживает первое нажатие кнопки мыши. MouseDown представляет собой специальное прерывание (событие), вызы- вающее соответствующую процедуру обработки в любой момент време- Пи, когда пользователь помещает указатель мыши на объект формы и на- нимает кнопку мыши. Если вы напишете специальную процедуру обработки прерывания MouseDown (такую, как lmage1_MouseDown), ваша про-
286 Часть 3. Создание интерфейса пользователя грамма будет предпринимать определенные действия в случае, если ука- затель мыши находится на объекте, и пользователь нажал кнопку мыши. Создавая графическую кнопку, вам бы хотелось, чтобы программа изме- няла ее вид при щелчке мышью, чтобы кнопка имела «нажатое» состоя- ние, а затем выполнялась заданная команда в программе. Примечание. Помимо события MouseDown, ваши программы могут распознавать и событие М OU sell р (генерируемое при отпускании пользователем кноп- ки мыши), и событие MouseMove (генерируемое при перемещении мыши). Переключение состояния кнопки Итак, хотите ли вы, чтобы графическая командная кнопка выглядела на- жатой или отжатой при щелчке на ней мышью? Как ни странно, рисунок на кнопке не изменяется, когда пользователь щелкает на нем мышью; рисунок заменяется на другой, или откачивается, процедурой обработки прерывания MouseDown. Как показано на следующем рисунке, каждая гра- фическая командная кнопка имеет три состояния: нажата, отжата и не действует. Отжата (Bld-up.bmp) Нажата нажата Не действует (Bld-dwn.bmp) (Bid-dis.bmp) Отжатое состояние является обычным состоянием кнопки в покое. Нажа- тое состояние соответствует выбору кнопки (щелчку на ней мышью). Не действующее состояние соответствует недоступности данной кнопки для использования в программе. Некоторые графические командные кнопки никогда не бывают в этом состоянии. Вы можете изменять состояние кнопки с помощью прерывания MouseDown. В программе Visual Basic состояния кнопки отображаются с помощью смены рисунков для объекта типа изображение. Процедура обработки прерывания MouseDown, ассоциированная с данным объектом, обрабаты- вает смену состояния. Корректно написанная процедура обработки пре- рывания должна считать текущее состояние кнопки (нажата, отжата или не действует), изменить состояние на соответствующее действию, а за-
урок 9. Добавление художественного оформления и специальных эффектов 287 .fen выполнить соответствующее действие (например, изменить начер- тание текста на полужирное). Рисунки для кнопки могут быть загружены в проЧессе выполнения программы с помощью функции LoadPicture или определеиы для формы с помощью операции присвоения. Некоторые про- граммисты для ускорения работы программы помещают в форму все три состояния кнопки. Примечание. Вы можете создать графические командные кнопки и панели управ- ления для любой формы Visual Basic, но MDI-формы имеют встроен- ные свойства, облегчающие работу с наборами кнопок. Кроме того, средство управления пользователя Toolbar, входящее в состав версий Visual Basic Professional и Enterprise, помогает создавать и управлять панелями инструментов в ваших формах MDL В следующем упражнении вам предлагается создать программу, в кото- рой используются три графические командные кнопки: Bold (Полужир- ный), Italic (Курсив) и Underline (Подчеркивание) для форматирования тек- ста формы. Для отображения кнопок формы программа использует шесть значков из папки Less09, а также три процедуры обработки прерывания MouseDown для обновления кнопок и форматирования текста. На следую- щем рисунке приведена создаваемая вами форма. 1гпаде4 Images •тадеб Imagel 1таде2 1тадеЗ Image9 Image8 Image? Создадим кнопки панели инструментов Попрактикуйтесь в создании кнопок Bold (Полужирный), Italic (Курсив) и Underline (Подчеркивание).
288 Часть 3. Создание интерфейса пользователя 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК, чтобы создать новый стандартный проект. 2. Измените размеры формы, чтобы она примерно соответство- вала диалоговому окну среднего размера. . 3. Щелкните на кнопке управления Label (Метки), затем создайте § длинное поле метки вдоль верхнего края формы управления. 4. Используйте средство управления Image (Изображение) для Bi создания трех небольших рамок изображения в центре формы под полем метки. Эти рамки будут содержать кнопки Bold (Полужирный), Italic (Курсив) и Underline (Подчеркнутый). 5. Создайте шесть рамок изображений в левой части формы. Их расположение приведено на рисунке на предыдущей стра- нице. Эти рамки изображений будут содержать шесть рисунков, со- ответствующих состояниям основных командных кнопок. (Вы можете загрузить изображения для кнопок с диска или хра- нить изображения, соответствующие состояниям кнопок, в гло- бальных переменных вместе с формой, что более удобно для данного упражнения.) 6. Создайте в середине формы большое поле метки, в котором будет содержаться образец текста. Текст в этом поле вы будете форматировать с помощью кно- пок, изменяя свойства FontBold (Полужирный шрифт), Fontltalic (Курсивный шрифт) и FontUnderline (Подчеркнутый) в процеду- ре обработки прерывания MouseDown. Теперь вы установите свойства для объектов. Прежде всего, сде- лаем шесть рисунков состояний кнопок невидимыми, затем из- меним формат текста в полях меток. Далее запишем состояния кнопок в специальное свойство изображения с именем Тад (Тег). Тег — это свойство (признак), которое можно использовать для описания объектов. Чаще всего тег используется для хранения имени объекта, но в данном случае в нем будет храниться состо- яние кнопки «Ир» («Отжата») или «Down» («Нажата»). Свойство Тад (Тег) позволяет хранить запись, идентифицирующую объект.
урок 9. Добавление художественного оформления и специальных эффектов 289 7. Установите следующие свойства для объектов. Объект Свойство Установленное значение Labell Caption (Надпись) Нажмите кнопку для практи- ки в форматировании текста примера. Label2 Caption (Надпись) Font (Шрифт) Пример текста. Times New Roman, 28-point Forml Caption (Надпись) Graphical Buttons Imagel Picture (Рисунок) Tag(Tep) c:\Vb6Sbs\LessO9\bld-up.bmp Up Image2 Picture (Рисунок) Tag (Tep) c:\Vb6Sbs\LessO9\itl-up.bmp Up Image3 Picture (Рисунок) Tag (Tep) c:\Vb6Sbs\LessO9\ulin-up.bmp Up Image4 Picture (Рисунок) Visible (Видимость) c:\Vb6Sbs\LessO9\bld-dwn.bmp False (Ложь) Image5 Picture (Рисунок) Visible (Видимость) c:\Vb6Sbs\LessO9\itl-dwn.bmp False (Ложь) Image6 Picture (Рисунок) Visible (Видимость) c:\Vb6Sbs\LessO9\ulin-dwn-bmp False (Ложь) Image? Picture (Рисунок) Visible (Видимость) c:\Vb6Sbs\LessO9\bld-up.bmp False (Ложь) Image8 Picture (Рисунок) Visible (Видимость) c:\Vb6Sbs\LessO9\itl-up.bmp False (Ложь) Image9 Picture (Рисунок) Visible (Видимость) c :\Vb6Sbs\LessO9\ulin-up.bmp False (Ложь) Примечание. При установке свойства Picture (Рисунок) рамки изображений регули- руются в соответствии с размером рисунка. По завершении ваша форма должна выглядеть так, как пока- зано на рисунке на следующей странице:
290 Часть 3. Создание интерфейса пользователя ч Graphical Buttons Нажмите кнопку для практики в Форматировании - - текста примера эн.даа EzJTeKCT примера - - Теперь введем текст программы для трех процедур обработки прерывания MouseDown. 8. Дважды щелкните на объекте Imagel (кнопка Bold над образ- цом текста) формы. В окне Code появится процедура Imagel _Click. На этот раз вы на- пишете программу для обработки прерывания MouseDown, а не для Click. Чтобы открыть нужную процедуру обработки преры- вания для объекта, щелкните на соответствующем элементе в открывающемся списке Procedure (Процедура). 9. Откройте список Procedure (Процедура) в окне Code. В списке отображены события (прерывания), которые связаны с объектом типа изображение. х гя | Imagel jrj MouseDown Private Suto Image 1_C lit End Suto KeyUp jjt LinkClose _ LinkError J LinkNotifу 5 s LinkOpen | LostFocus | Private Suto Image 1_C lit End Suto MouseDown 1 1 = MouseMove 1 MouseUp —I OLECompleteDrag r>, OLEDragDrop J ’ OLEDragOver JJJ Private Suto Imagel_Mou: End Suto явям «Г _»fx
урок 9. Добавление художественного оформления и специальных эффектов 291 10. Щелкните на событии MouseDown в списке. q процедуре MouseDown имеются четыре переменные, которые вы жо- jicetne использовать в вашей программе. В окне Code будет отображена процедура lmage1_MouseDown. Эта процедура получает четыре значения относительно события MouseDown: нажатие кнопки мыши, использование клавиши | Al t], | Ctrl | или | Shift I; координата x (горизонтальная) ука- зателя мыши на экране; координата у (вертикальная) указате- ля мыши на экране. Эти значения возвращаются в процедуру обработки прерывания и присваиваются переменным, исполь- зованным вами в тексте процедуры. Хотя вы не будете исполь- зовать переменные процедуры, или параметры, в этой про- грамме, они являются весьма полезным инструментом, и многие процедуры их используют. Об использовании этих параметров в программе DragDrop вы узнаете далее в этой главе. 11. Введите следующие операторы в процедуру Imagel .MouseDown: If Imagel .Tag = "Up" Then Imagel .Picture = Imagel Picture Label2.FontBold = True Imagel .Tag = "Down" Else Imagel.Picture = lmage7.Picture Label2.FontBold = False Imagel .Tag = "Up" End If Свойство FontBold (Полужирный шрифт) управляет полужирным на- чертанием символов. Эта несложная структура с условием If обрабатывает два со- стояния кнопки Bold (Полужирный), которые могут быть. Если кнопка была установлена в отжатое состояние («Up»), проце- дура заменяет рисунок Bld-up.bmp на рисунок Bld-dwn.bmp, из- меняет начертание текста на полужирное и устанавливает • тег для изображения в значение «Down». Если кнопка являет- ся нажатой, процедура заменяет рисунок Bld-dwn.bmp на рису- нок Bld-up.bmp, отменяет полужирное начертание шрифта и ус- танавливает тег в значение «Up». Вне зависимости от текущего состояния кнопки, структура с условием изменяет его на про- тивоположное.
292 Часть 3. Создание интерфейса пользователя 12. Откройте список Object (Объект) в окне Code, затем выберите объект Image2. Откройте список Procedure (Процедура), затем выберите MouseDown. Будет отображена процедура lmage2_MouseDown. 13. Введите следующие операторы: If lmage2.Tag = "Up" Then Image2.Picture = Image5.Picture Label2.Fontltalic = True lmage2.Tag = "Down" Else I mage2. Picture = Image8.Picture Label2.Fontltalic = False lmage2.Tag = "Up- End If Свойство Tag (Тег) используется для установки текущего состояния кнопки. Эта структура с условием управляет кнопкой Italic (Курсив). Текст почти идентичен процедуре Imagel JVIouseDown. Единствен- ное отличие состоит в разных именах для изображений и ис- пользовании свойства Fontltalic (Курсивный шрифт) вместо FontBold (Полужирный шрифт). 14. Откройте список Object (Объект), затем выберите объект Image3. Откройте список Procedure (Процедура), затем выберите MouseDown. Когда появится процедура lmage3_MouseDown, введите следующие операторы: If ImageS.Tag = "Up" Then Images.Picture = lmage6.Picture Label2.Fontunderline = True ImageS.Tag = "Down" Else Image3.Picture = Image9. Picture Label2.Fontunderline = False ImageS.Tag = "Up" End If Свойство Picture (Рисунок) используется для переключения состояния кнопок.
урок 9. Добавление художественного оформления и специальных эффектов 293 Эта структура с условием управляет кнопкой Underline (Подчер- кнутый). Она почти идентична первым двум процедурам. Про- грамма закончена, поэтому ее следует сохранить на диске. 15. Щелкните на кнопке Save Project (Сохранить проект) на пане- дИ ли инструментов. Сохраните форму под именем MyButtons.frm в папке \Vb6Sbs\LessO9. Сохраните ваш проект под именем MyButtons.vbp в этой же папке. Теперь запустим программу. Запустим программу и проверим действие кнопок „ . 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа MyButtons будет запущена, как показано на следую- щем рисунке: Законченная программа Buttons содержится в папке \Vb6Sbs\LessO9. В форме появятся инструкции, кнопки инструментов и обра- зец текста. Вы можете использовать три кнопки в любом по- рядке и любое число раз. 2. Щелкните на кнопке Italic (Курсив). При нажатии кнопки мыши кнопка Italic (Курсив) перейдет в «нажатое» состояние, а текст образца будет отображен курси- вом. 3. Щелкните на кнопке Underline (Подчеркнутый). Ваш экран должен выглядеть, как показано на рисунке на сле- дующей странице:
294 Часть 3. Создание интерфейса пользователя Примечание. Если вы хотите, чтобы действие по форматированию выполнялось после отпускания кнопки мыши, то вы можете управлять переключе- нием рисунков кнопок в процедуре MouseDown, но для изменения шрифта использовать прерывание MouseUp. Как программист, вы мо- жете задать действие кнопок на начертание текста. 4. Щелкните снова на кнопках Italic (Курсив) и Underline (Подчер- кнутый). Кнопки перейдут в «отжатое» состояние, а начертание текста вновь станет обычным. 5. Поэкспериментируйте с кнопкой Bold (Полужирный), чтобы оценить ее действие. Попробуйте различные кнопки в различ- ных сочетаниях. 6. Закончив проверку действия кнопок, щелкните на кнопке End (Конец) на панели инструментов. Программа будет завершена, и вы вернетесь в среду програм- мирования. Добавление в вашу программу поддержки операции «перетащить-и-оставить» Поддержка операции «перетащитъ-и-оставитъ» сделает ваш интер- фейс пользователя более удобным. В приложениях для Windows пользователи исполняют большинство ко- манд щелчком на кнопке или элементе меню. Visual Basic предусматри- вает использование другой операции для выполнения ряда действий в
урок 9. Добавление художественного оформления и специальных эффектов 295 ваших программах - перетащитъ-и-оставитъ (drag-and-drop). Для ее осуществления пользователь должен, удерживая нажатой кнопку мыши, перетащить объект из одного места в другое, а затем отпустить кнопку мыши- Одним из применений операции перетащить-и-оставить являет- ся перемещение фрагмента текста в программе текстового редактора. Другое применение - перетаскивание ненужных элементов в «корзину» для удаления их с экрана. Для управления операциями «перетащить-и-оставить» вы можете исполь- зовать несколько свойств и две процедуры обработки прерываний. Уста- новив для свойства объекта DragMode (Режим перетаскивания) значение 1, вы разрешаете пользователю перетаскивать объект. С помощью свойства Dragicon (Значок при перетаскивании) вы можете задать отображение ука- зателя мыши в виде изображения перемещаемого объекта при его пере- таскивании. При помещении (оставлении) объекта в форме Visual Basic реагирует на это событие вызовом процедуры обработки прерывания DragDrop для данного объекта. При помещении объекта на другой объект формы Visual Basic выполняет процедуру обработки прерывания DragOver для объекта, на который помещается перетаскиваемый объект. Процедура обработки прерывания DragDrop вызывается при помещении перетаскиваемого объекта на новое место. «Перетащить-и-оставить» шаг за шагом Чтобы добавить в вашу программу поддержку операции «перетащить-и- оставить», вам нужно выполнить следующие действия. 1. Разрешить для объекта действие «перетащить-и-оставить». Visual Basic требует, чтобы разрешение операции «перета- щить-и-оставить» для каждого из объектов задавалось инди- видуально. Для этого нужно установить для свойства DragMode соответствующего объекта значение 1 с помощью программ- ных операторов или в окне Properties (Свойства). 2. Выбрать значок при перетаскивании. Visual Basic исполь- зует прямоугольник для представления объекта при перетас- кивании, но вы можете задать и другой значок по вашему вы- бору. Для этого следует установить для свойства Dragicon объекта соответствующее точечное изображение или значок в тексте программы или с помощью окна Properties (Свойства). 3. Написать процедуру обработки прерывания DragDrop или DragOver для объекта назначения. Напишите процедуру об- работки прерывания для объекта-адресата, или места на-
296 Часть 3. Создание интерфейса пользователя значения, операции перетаскивания. Visual Basic выполняет процедуру обработки прерывания для объекта, на который по- мещается перетаскиваемый объект. Процедура выполнит все сопутствующие операции перетаскивания действия, такие как перемещение и удаление следа объекта при перетаскивании, выполнение команды или изменение вида объекта-адресата. Вы открываете процедуру обработки прерывания щелчком на объекте-адресате в форме, а после открытия окна Code щелка- ете на элементе DragDrop или DragOver в списке Procedure (Проце- дура). На следующем рисунке графически представлены зти три дей- ствия. « Have a nice day! 1 2 image? (объект2- источник) Указатель мыши в процессе перетаскивания Image? (объект- адресат) FormLoad 11magel.Picture = LoadPicture ("C:\Vb6Sbs\Less09\face03.ico") 2 Imagel.DragMode = 1 3 Imagel.Dragicon = LoadPicture (''C:\Vb6Sbs\Less09\face01.ico") lmage2_DragDrop 4 ImageLVisible = False Программа DragDrop Следующая программа демонстрирует, как вводить операцию «перета- щить-и-оставить» в ваши приложения. Программа позволяет пользова- телю перетащить три элемента в горящую бочку с нефтью в вашей фор- ме, где они будут уничтожены. Горящая бочка похожа на Корзину (Recycle Bin) в Microsoft Windows 95 или на Мусорный бак (Trash) для Macintosh. Вы можете использовать горящую бочку в ваших программах для удаления различных объектов, включая ненужные документы, файлы, картинки, сообщения электронной почты, сетевые соединения, элементы экрана и т.д. Для экранных элементов программа использует рамки изображений, а скрывается отображение объектов путем установки для их свойств Visible (Видимость) значения False (Ложь).
урок 9. Добавление художественного оформления и специальных эффектов 297 Использование метода «перетащить-и-оставить» для создания горящей бочки 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК для создания нового ис- полняемого файла. 2. Измените размеры формы, чтобы они соответствовали раз- мерам среднего диалогового окна. 3. Щелкните на кнопке управления Label (Поле метки) на пане- ли инструментов и создайте в верхней части формы поле по всей ее ширине. В этом поле будут отображаться инструкции пользователю. 4. С помощью средства управления Image (Изображение) создай- те шесть рамок изображений, показанных на следующем ри- сунке. Проверьте, чтобы рамки изображений создавались в представленном на рисунке порядке. (Первым создается объект Imagel, потом Image2 и т.д.) Image4 Image5 Image2 Image3 Image6
298 Часть 3. Создание интерфейса пользователя 5. Установите свойства для объектов согласно приведенной ниже таблице. Обратите при этом внимание на значение «Огонь» для свойства Image3 Тад. Вы используете этот же тег для проверки в процессе перетаскивания пользователем элемента в горящую бочку. Тег «Огонь» помогает определить вид значка бочки. I Примечание. I Для правильной установки размеров значков вы должны установить I свойство Stretch (Изменение размера) до установки свойства Picture (Ри- I сунок). Объект Свойство Установленное значение Labell Caption (Надпись) Font (Шрифт) Выбросьте мусор, а затем по- дожгите. Times New Roman, Bold, 10-point Forml Caption (Надпись) Burn Barrel Imagel Stretch (Изменение размера) Picture (Рисунок) True (Истина) c:\Vb6Sbs\Less09\trash02a.ico Image2 Picture (Рисунок) Dragicon (Значок при перетаскивании) DragMode (Режим перетаскивания) c:\Vb6Sbs\Less09\cdrom02.ico c: \ Vb6Sbs\LessO 9 \cdrom02.ico 1 - Automatic (Автоматический) Image3 Picture (Рисунок) Dragicon (Значок при перетаскивании) DragMode (Режим перетаскивания) Tag (Тег) c:\Vb6Sbs\Less09\fire.ico c:\Vb6Sbs\Less09\fire.ico 1 - Automatic (Автоматический) Fire Image4 Picture (Рисунок) Dragicon (Значок при перетаскивании) c: \Vb6Sbs\LessO 9\gaspump.ico c:\Vb6Sbs\Less09\gaspump.ico DragMode (Режим перетаскивания) 1 - Automatic (Автоматический)
урок 9- Добавление художественного оформления и специальных эффектов 299 Объект Свойство Установленное значение Image5 Picture (Рисунок) Dragicon (Значок при перетаскивании) DragMode (Режим перетаскивания) c:\Vb6Sbs\Less09\pointl l.ico c:\Vb6Sbs\Less09\pointll.ico 1 - Automatic (Автоматический) Image6 Stretch (Изменение размера) Picture (Рисунок) Visible (Видимость) True (Истина) с: \Vb6Sbs\LessO 9\trash02b.ico False (Ложь) По завершении установки свойств ваша форма будет выгля- деть следующим образом: 6. Дважды щелкните на объекте Imagel (пустой бочке) в форме. В окне Code появится процедура )mage1_Click. 7. Откройте список Procedure (Процедура) в окне Code, затем щел- кните на элементе DragDrop. Появится процедура lmage1_DragDrop. Оператор Sub в процеду- ре имеет три параметра (аргумента), которые возвращаются при перетаскивании объекта: Source, X и Y. Параметр Source оп- ределяет объект-источник для перетаскивания. Вы использу- ете этот параметр, чтобы скрыть объект-источник в вашей фор- ме при его удалении. Параметры X и Y в данной процедуре использоваться не будут.
300 Часть 3. Создание интерфейса пользователя Процедура обработки прерывания DragDrop возвращает три парамет- ра, которые вы можете использовать в вашей программе: Source, X и Y. 8. Введите следующие программные операторы в процедуру: Source.Visible = False If Source.Tag = "Fire" Then Imagel.Picture = ImageS.Picture End If Эти операторы являются единственными в программе. В пер- вой строке используется переменная Source и свойство Visible (Видимость) для скрытия перетаскиваемого объекта. Тем са- мым, объект появляется только в том случае, если он помеща- ется «в горящую бочку». В остальных строках проверяется при- знак и устанавливается требуемый значок для изображения горящей бочки. Переменная Source определяет объект, перетаскиваемый в боч- ку. Обратите внимание, что при установке свойств для этой програм- мы вы используете свойство Тад (Тег) для объекта 1гпадеЗ, для которого значение «Fire» (Огонь) соответствует появлению пла- мени в бочке. Структура с условием If...Then использует Тад (Тег) для проверки этого признака, и в случае совпадения со значени- ем «Fire» «зажигает огонь», копируя значок с изображением го- рящей бочки на значок с изображением пустой бочки. д—д 9. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов. Сохраните форму MyDragDrop.frm в папке \Vb6Sbs\LessO9. Сохраните в этой же папке проект под именем MyDragDrop.vbp. Запустим программу MyDragDrop 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа MyDragDгор отобразит форму, приведенную на сле- дующем рисунке.
урок 9. Добавление художественного оформления и специальных эффектов 301 Законченная программа DragDrop содержится в папке \Vb6Sbs\LessO9. 2. Перетащите значок CD-ROM на изображение бочки и отпус- тите кнопку мыши. В процессе перетаскивания указатель мыши принимает вид значка CD-ROM (работает свойство DragMode). При отпускании кнопки мыши, когда объект находится поверх значка бочки, указатель мыши возвращается к своему обычному виду, а ори- гинальный значок CD-ROM исчезает. Значок перетаскивания появляется, когда вы перетаскиваете объект мышью. 3. Перетащите значок с изображением зажигалки и значок с изображением банана в бочку. При перетаскивании указатель мыши принимает вид переме- щаемого объекта. (Пламя зажигалки остается.) 4. Теперь поместим объекты в бочку. При отпускании кнопки мыши над бочкой появляется пламя, как показано на рисунке.
302 Часть 3. Создание интерфейса пользователя Совет. Техника «перетащить-и-оставить» имеет несколько применений. Она весьма удобна, если вы хотите, чтобы пользователь визуально наблю- дал процесс обработки или удаления объекта. Например, вы можете заменить значок бочки на другой и использовать операцию «перета- щить-и-оставить» для обработки графики, печати файлов, отправки факсов или электронных сообщений, работы с базами данных или же управления сетевыми ресурсами. 5. Щелкните на кнопке Close (Закрыть) для завершения работы программы. Изменение вида указателя мыши В программе DragDrop вы познакомились с использованием свойства Drag Icon для изменения вида указателя мыши в процессе осуществле- ния операции «перетащить-и-оставить». Вы также можете изменить вид указателя мыши на один из 12 видов, определенных для свойства MousePointer (Указатель мыши), или же вы можете загрузить свой соб- ственный вид указателя с помощью свойства Mouseicon (Значок мыши). Установленные виды указателей мыши позволяют информировать пользователя о предстоящем использовании мыши. Если вы устано- вите свойство MousePointer (Указатель мыши) для объекта формы, то при помещении указателя на этот объект он будет принимать задан- ный вид. Если вы установите свойство MousePointer (Указатель мыши)
урок 9. Добавление художественного оформления и специальных эффектов 303 для формы целиком, то указатель будет иметь заданный вид в любой точке формы, независимо от того, над каким объектом он находится. В следующей таблице приведено несколько видов указателей, кото- рые могут быть определены с помощью свойства MousePointer. (Полный список вы можете получить в окне Properties (Свойства).) Если задать значение 99, то Visual Basic будет использовать вид указателя, задан- ный для свойства Mouseicon (Значок мыши). Вид указателя Значение MousePointer Описание + 2 Перекрестье для рисования. I 3 Курсор ввода для тексто- вых приложений. *$* 5 Размерный указатель (указывает на направле- ние изменения размера). § 11 Песочные часы, указы- вающие на необходи- мость ожидания. о 12 Запрещающий знак, ука- зывающий на невозмож- ность выполнения данно- го действия пользователем. Добавление в вашу программу эффектов анимации Смена значков и перетаскивание объектов создает визуальные эффек- ты, но для программистов больший интерес с точки зрения графических эффектов представляет анимация. Анимация представляет собой созда- ние эффекта движения за счет быстрого отображения на экране соответ- ствующих изображений объекта. В частном случае операция «перета- Щить-и-оставить» является грубым видом анимации, поскольку при этом объект перемещается из одного места к другому месту в форме. Настоя- щая анимация включает в себя программное управление движением объекта. При этом часто происходит изменение размеров изображения или его вида при его перемещении.
304 Часть 3. Создание интерфейса пользователя В этом разделе вы узнаете, как вводить простейшие эффекты анимации в ваши программы. Вы познакомитесь с командой Move, с изменением свойств рамки изображения Тор (Сверху) и Left (Слева), а также научи- тесь управлять режимом анимации с помощью объекта типа таймер. Использование системы координат формы Принцип действия процедуры анимации состоит в перемещении изобра- жения в относительной системе экранных координат формы. В Visual Basic каждая форма имеет свою систему координат. Точка отсчета системы координат, или начало, находится в верхнем левом углу формы. По умол- чанию система координат состоит из строк и столбцов, измеряемых в спе- циальных единицах «twip». (Twip равен 1/20 пункта, или 1/1440 дюйма.) Система координат в Visual Basic представляет собой сетку из строк и столбцов, наложенную на форму. В системе координат Visual Basic строки соответствуют оси х (горизон- тальной оси), а столбцы - оси у (вертикальной оси). Точка в системе коор- динат определяется пересечением нужной строки и столбца, а ее коорди- наты записываются в виде (х, у). Независимо от выбора единиц измерения, координатами (х, у) верхнего левого угла формы всегда являются (0, 0). На следующем рисунке показано, как описывается местоположение объекта в системе координат Visual Basic. х = 1000 Ось х : __ | «F,,,ml гг р'ВН1МЯ Перемещение объектов в системе координат В Visual Basic имеется специальная команда Move, которая дает возмож- ность перемещать объекты в системе координат. Основное правило ее использования следующее:
урок 9. Добавление художественного оформления и специальных эффектов 305 объект.Move слева, сверху где объект представляет собой имя объекта в форме, который вы хотите переместить, а слева и сверху являются координатами нового местополо- жения объекта на экране. Значение слева представляет собой расстояние между левой границей формы и объектом, а значение сверху - расстоя- ние от верхней границы формы до объекта. (Команда Move также позво- ляет вам регулировать высоту и ширину объекта. См. раздел «Шаг впе- ред» в конце этого урока в качестве примера.) Оператор Visual Basic Picture"! .Move 1440,1440 перемещает объект Picture в точку с координатами (1440, 1440) на экране, или ровно на 1 дюйм от верхнего края формы и на 1 дюйм от ее левого края. Относительное перемещение задается с помощью свойств Left и Тор объекта. Вы также можете использовать команду Move для задания относительно- го перемещения. Относительное перемещение представляет собой рас- стояние между предполагаемым местоположением объекта и его теку- щим местоположением. При задании относительного перемещения вы используете свойства Left (Слева) и Тор (Сверху) объекта (значения зада- ют координаты х и у) и операторов + (плюс) или — (минус). Например, оператор Picture1 .Move Picturel .Left - 50, Picture1 .Top - 75 перемещает объект Picturel из его текущей позиции в позицию на 50 еди- ниц (twips) ближе к левому краю и на 75 единиц ближе к верхнему краю. Примечание. I Команда Move чаще используется для объектов-рисунков, поскольку I при этом в меньшей степени ощущается мерцание экрана, чем для I объектов-изображений. I Создание эффектов анимации с помощью команды Move и объекта типа таймер Объект таймер устанавливает скорость движения объекта в программе. Секрет создания эффектов анимации в программе состоит в том, что вы помещаете одну или несколько команд Move в процедуру обработки пре-
306 Часть 3. Создание интерфейса пользователя рывания от таймера, чтобы объект или объекты перемещались по экрану с интервалом времени, задаваемым таймером. В уроке 6 вы узнали, как использовать объект типа таймер для создания программы часов, кото- рые каждую секунду отображают значение точного времени. При созда- нии эффектов анимации вы устанавливаете значение для свойства Interval (Интервал) таймера, соответствующее более короткой выдержке време- ни - 1/5 секунды (200 миллисекунд), 1/10 секунды (100 миллисекунд) или меньше. Выбор значения зависит от того, насколько быстро вы хотите изменять изображение (степень анимации). Другой секрет состоит в использовании свойств Тор (Сверху) и Left (Слева) для установки отступов от границ формы. Используя зти значения в про- цедуре обработки прерывания, вы можете остановить анимацию (запре- тить работу таймера), когда объект достигает границы формы. При исполь- зовании свойства Тор (Сверху), свойства Left (Слева) или обеих свойств в структуре с условием If...Then или Select Case, вы можете добиться также эффекта «отскакивания» объекта от одной или нескольких границ формы. Добавим в программу DragDrop облако дыма Для создания эффектов анимации можно использовать команду Move. В следующем упражнении демонстрируется, как можно «оживить» кар- тинку в вашей программе с помощью команды Move и объекта типа тай- мер. Вы добавите в программу DragDrop облако дыма. Оно становится ви- димым, когда пользователь помещает элемент в горящую бочку. Вы используете команду Move и объект-таймер, чтобы облако дыма будто бы двигалось по ветру, пока не выйдет за границы формы. Создание движущегося облака дыма 1. В меню File (Файл) щелкните на команде Save MyDragDrop.frm As (Сохранить MyDragDrop.frm как), а затем сохраните форму DragDrop под именем MySmoke.frm. 2. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как), затем сохраните проект DragDrop под именем MySmoke.vbp. Сохранение формы и проекта в виде новых файлов предотвра- тит изменение оригинальной программы DragDrop на диске. 3. Щелкните на кнопке управления PictureBox (Рисунок) на па- нели инструментов, затем нарисуйте небольшой прямоуголь- ник чуть выше изображения бочки.
урок 9. Добавление художественного оформления и специальных эффектов 307 В эту рамку будет помещен рисунок в процессе установки свойств. 4. Щелкните на кнопке управления Timer (Таймер) на панели инструментов, затем создайте объект таймер в левом нижнем углу формы. Размеры объекта таймера Timer) регулируются в форме авто- матически. 5. Установите для рисунка и для таймера следующие свойства. Объект Свойство Picturel Appearance (Внешний вид) BackColor (Цвет фона) BorderStyle (Тип рамки) Picture (Рисунок) Visible (Видимость) Timerl Enabled (Включен) Interval (Интервал) По завершении установки сво деть следующим образом: Установленное значение О - Flat (Плоский) Light gray (Светлосерый) О - None (Нет) c:\Vb6Sbs\Less09\cloud.ico False (Ложь) False (Ложь) 65 ств ваша форма будет выгля-
308 Часть 3. Создание интерфейса пользователя 6. Дважды щелкните на изображении пустой бочки (объект Imagel) для редактирования соответствующей процедуры пре- рывания. В окне Code будет отображена процедура lmage1_DragDrop. 7. Внесите в текст процедуры следующие изменения. (Четвер- тая и пятая строка являются вновь вводимыми.) Source.Visible = False If Source.Tag = "Fire" Then Imagel.Picture = lmage6.Picture Picture) .Visible = True Timer) .Enabled = True End If Новые операторы делают значок облака видимым при «заго- рании» бочки и запускают таймер для имитации движения об- лака. Поскольку ранее вы уже установили для таймера интер- вал в 65 миллисекунд, он готов к работе. Остается добавить команду Move. 8. Откройте список Object (Объект) в окне Code, затем щелкните на объекте Timer). В окне Code появится процедура Timer)-Timer. 9. Введите следующие программные операторы: If Picture) .Тор > 0 Then Picture).Move Picture).Left- 50, Picture) .Top - 75 Else Picture) .Visible = False Timer) .Enabled = False End If Поскольку таймер включен, структура с условием If...Then вы- полняется каждые 65 миллисекунд. В первой строке процеду- ры проверяется, достигло ли облако верхней границы формы. Если нет (значение свойства Тор (Сверху) по-прежнему поло- жительно), процедура использует команду относительного пе- ремещения Move для передвижения облака на 50 единиц в на- правлении левой границы формы и на 75 единиц в направлении верхней границы формы. Чтобы заставить облако двигаться вниз или вправо, используйте в ко- манде Move операцию сложения.
урок 9. Добавление художественного оформления и специальных эффектов 309 Как вы можете увидеть, запустив программу, в процессе дви- жения создается иллюзия перемещения облака по ветру. Что- бы заставить облако двигаться вправо, вам надо лишь добавить положительное значение к значению свойства Left (Слева). Что- бы заставить облако двигаться вниз, вам нужно добавить по- ложительное значение к значению свойства Тор (Сверху). Ког- да облако достигает верхней границы формы, операторы в условии Else в процедуре Timer1_Timer делают рисунок невиди- мым и запрещают работу таймера. Запрет работы таймера ос- танавливает анимацию. 10. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект) на панели инструментов, чтобы сохранить внесенные вами изменения. Теперь запустим программу. 11. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа MySmoke будет запущена в среде программирова- ния. 12. Перетащите значок CD-ROM, зажигалку и банан в горящую бочку. Законченная программа Smoke содержится в папке \Vb6Sbs\LessO9. Над бочкой появится пламя, а также облако дыма, которое нач- нет перемещаться, как показано на рисунке: ч Burn Barrel Выбрось мусор, а затем подожги.
310 Часть 3. Создание интерфейса пользователя Через некоторое время облако выйдет за пределы экрана, и анимация будет остановлена. Анимация останавливается, если облако достигает верхней границы, формы. 13. Щелкните на кнопке End (Конец) для останова программы. Поздравляем! Вы добавили анимацию - и ряд других полезных приемов - к вашему умению работать с графикой. Можете продолжить ваши экспе- рименты с графикой Visual Basic по собственному усмотрению. Вы лучше освоите процесс программирования, а пользователям наверняка придут- ся по душе результаты вашей работы. Примечание. Чтобы рассмотреть другой пример использования команды Move, за- пустите программу StepUp из папки \Vb6Sbs\LessO1. Программа StepUp отображает падение вниз динамитной шашки, а затем отображает об- лако дыма при взрыве динамита. (Текст, описывающий анимацию, со- держится в процедуре обработки прерывания от таймера.) Как вы помните, программа StepUp использовалась в качестве заставки при работе с одним из упражнений в первом уроке. С тех пор вы прошли немалый путь! Увеличение и уменьшение размеров объектов в процессе выполнения программы Хотите научиться использовать еще один эффект? Помимо манипулиро- вания свойствами Left (Слева) и Тор (Сверху) Visual Basic предусматрива- ет возможность управлять свойствами Height (Высота) и Width (Ширина) для большинства объектов формы. С помощью воздействий на эти свой- ства вы можете увеличивать и уменьшать размеры объекта в процессе выполнения программы. В следующем упражнении показано, как это можно делать. Свойства Height и Width позволяют вам увеличивать и уменьшать раз- меры объекта. Как увеличить размер рисунка в ходе выполнения программы 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК, чтобы открыть новое стандартное приложение.
урок 9. Добавление художественного оформления и специальных эффектов 311 3. Щелкните на кнопке управления Image (Изображение) на па- нели инструментов, а затем создайте небольшую рамку изоб- ражения в верхнем левом углу формы. 3. Установите следующие свойства для формы и изображения. При установке свойств для изображения обратите внимание на текущие значения свойств Height (Высота) и Width (Ширина). (Вы также можете установить их в процессе конструирования фор- мы.) Объект Свойство Установленное значение Imagel Stretch True (Истина) (Изменение размера) Picture (Рисунок) c:\Vb6Sbs\Less09\earth.ico Forml Caption (Надпись) Приближаем Землю 4. Дважды щелкните на объекте Imagel в форме. В окне Code появится процедура lmage1_Click. 5. Введите следующие операторы в процедуру обработки пре- рывания: Imagel .Height = Imagel .Height + 200 Imagel .Width = Imagel .Width + 200 Эти два оператора увеличивают высоту и ширину значка с изображением Земли на 200 единиц каждый раз, когда пользо- ватель щелкает на изображении. Наблюдаемый эффект мож- но рассматривать, например, как процесс приближения к Зем- ле космического корабля. Прирост значений свойств Height и Width для значка с изображением Зем- ли заставляет ее увеличиваться в размерах. 6. Закройте окно Code, затемщелкните на кнопке Start (Пуск) для запуска программы. В форме появится изображение Земли, как показано на рисун- ке.
312 Часть 3. Создание интерфейса пользователя 7. Щелкните на значке с изображением Земли несколько раз для увеличения ее размеров на экране. Законченная программа Zoom содержится в папке \Vb6Sbs\LessO9. После 10 или И щелчков ваш экран будет выглядеть, как по- казано на рисунке. 8. Когда вы приблизитесь достаточно для «перехода на стан- дартную орбиту», щелкните на кнопке Close (Закрыть) для вы- хода из программы. Программа будет остановлена, а вы верне- тесь в программное окружение. 9. Щелкните на кнопке Save Project (Сохранить проект), а затем сохраните форму под именем MyZoom.frm. Сохраните проект под именем MyZoom.vbp.
Уро* g. Добавление художественного оформления и специальных эффектов 313 ц|аг вперед: присвоение имен объектам в программе Присвоение имен объектам интерфейса поможет вам идентифициро- вать их в тексте программы. В этом уроке вы создали программу MyButtons, демонстрирующую про- цесс создания и обработки командных графических кнопок в программах Visual Basic. В программе содержится девять объектов изображений (от Imagel до I mage9) и три процедуры обработки прерываний, отображающих кнопки и обрабатывающих действия над ними. Помимо демонстрации ис- пользования графических командных кнопок в вашей программе, в этом упражнении показана неадекватность использования имен объектов по умолчанию для управления этими объектами в программе. Если вы (либо другой программист) через несколько недель вновь обратитесь к програм- ме MyButtons, наверное, понадобится немало времени, чтобы определить, какой именно объект обрабатывается данным оператором в программе. Решение проблемы состоит в присвоении каждому объекту уникального имени с помощью свойства Name (Имя). Имя для объекта (как и любое имя для переменной) должно быть присвоено так, чтобы оно ясно указывало на назначение объекта в программе. Уникальные и интуитивно присво- енные имена для объектов помогут вам идентифицировать их в форме и в тексте программы. Поскольку имена объектов включаются в имена для процедуры обработки прерываний и в устанавливаемые в тексте програм- мы свойства, вы должны установить свойство Name (Имя) для объекта сразу же после создания объекта. С ттолюгцъю свойства Name (Имя)вы можете задавать понятные и легко запоминающиеся имена для объектов. Присваиваемое объекту имя дол- жно начинаться с буквы и не может содержать более 40 символов. Imagel Image2 Image3 images-[7] [>кТеКСТ--1Ц)И МО |J.d !тадеб-_| ц | . • "у ; Image? 1таде8 Image9
314 Часть 3. Создание интерфейса пользователя ImgBldBtn ImgltalBtn ImageUndBtn Соглашения при задании имен объектов По соглашению программисты в Visual Basic используют для иденти- фикации объектов префикс из трех символов. В Visual Basic принято соглашение использовать префикс из трех симво- лов для используемых в программе имен объектов. Эти стандартные пре- фиксы помогают программистам идентифицировать действие, произво- димое создаваемым объектом. Вы можете использовать соглашение при создании объектов в вашей программе, чтобы облегчить чтение и пони- мание смысла отдельных объектов в программе другими разработчика- ми программ на Visual Basic. Уяснение правил присвоения имен также поможет вам лучше понять образцы программ, поставляемые с Visual Basic. Кроме того, согласно этим правилам объекты располагаются в ал- фавитном порядке, т.е. группируются, в списке Object (Объект) в окне Code. В следующей таблице приведены соглашения по именам объектов, вклю- чая примеры для каждого из них. Вы можете попрактиковаться в приме- нении соглашений в следующем упражнении. Объект Префикс Пример Комбинированное поле cbo cboEnglish Поле флажка chk chkReadOnly Командная кнопка cmd cmdCancel Диалоговое окно dig dlgOpen Данные dat datBiblio Поле данных с ограничением dbc dbcEnglish Список данных с ограничением dbl dblPolicyCode
урок 9. Добавление художественного оформления и специальных эффектов 315 Объект Префикс Пример Доле списка каталогов dir dirSource доле списка дисков drv drvTarget Доле списка файлов fil filSource фрейм fra fraLanguage форма frm frmPrintForm Горизонтальная полоса прокрутки hsb hsbVolume Доле изображения img imgEmptyBarrel Поле метки Ibl Ibllnstructions Строка lin linUnderline Поле списка 1st IstPeripherals Меню mnu mnuFileOpen OLE-объект ole oleObjectl Кнопка выбора opt optFrench Поле рисунка pic picSmokeCloud Фигура shp shpWireScreen Поле текста txt txtGetName Таймер tmr tmrRunAnimation Вертикальная полоса прокрутки vsb vsbTemperature Совет. При использовании Visual Basic для приложений, когда язык програм- мирования включается в Microsoft Word, Microsoft Excel, Microsoft Access, Microsoft PowerPoint и Microsoft Project, программисты часто используют соглашение по присвоению имен для идентификации ти- пов переменных и внутренних констант, поддерживаемых приложе- ниями Microsoft Office. Использование свойства Name Для изменения имен объектов 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК. 2. С помощью кнопки управления Label (Поле метки) создайте два объекта типа «поле с меткой» в центре формы, один — у вер- хнего края формы, а второй — в середине формы.
316 Часть 3. Создание интерфейса пользователя 3. Щелкните на кнопке Properties Window (Окно свойств) на пане- ли инструментов, а затем установите следующие свойства для полей метки и формы. Используйте соглашение по присвоению имен. Объект Свойство Установленное значение Labell Caption (Надпись) Добро пожаловать в программу! Name (Имя) IblWelcome Label2 Caption (Надпись) Для выхода из программы на- жмите «Выход» Name (Имя) Lbllnstructions Forml Caption (Надпись) Изменение имен Name (Имя) FrmMainForm При установке свойства Name (Имя) новые имена объектов от- ражаются как в окне Properties (Свойства), так и в программе. Префиксы 1Ъ1 и frm идентифицируют объекты как поля метки или форму, а основная часть имени идентифицирует объект в программе. 4. Используйте кнопку CommandButton (Командная кнопка) для создания командной кнопки ниже объекта 1ЫInstructions. 5. Щелкните на кнопке Properties Window (Окно свойств) на пане- ли инструментов, а затем установите следующие свойства для командной кнопки. Объект Свойство Установленное значение Commandl Caption (Надпись) Выход Name (Имя) CmdQuit Префикс cmd указывает, что объект является командной кноп- кой, a Quit (Выход) указывает на назначение кнопки в программе. 6. Дважды щелкните на кнопке cmdQuit, чтобы открыть проце- дуру прерываний для объекта. В окне Code появится процедура cmdQuit_Click. Visual Basic ис- пользует имя, введенное вами в качестве имени объекта. 7. Откройте список Object (Объект) в окне Code. В поле списка будут отображены имена объектов, как показа- но на рисунке.
урок 9. Добавление художественного оформления и специальных эффектов 317 ЛК Project! - ItniMainFotni (Code] ОН В | cmdQuit General) I Click jtmdQuit Form Ibllnstructions IhtWelcome cmdQuit Clic>“~, Теперь вы видите, насколько удобным оказался процесс при- своения имен для объектов. Вы легко можете определить, ка- кому имени соответствует какой объект в программе. Это дос- таточно легко могут сделать и другие программисты. 8. Нажмите клавишу | Esc | для закрытия списка Object (Объект), а затем введите End в текст процедуры cmdQuit_Click. 9. Закройте окно Code, а затем щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Законченная программа NameConv содержится в папке \Vb6Sbs\LessO9. Ваш экран будет выглядеть подобно следующему: < И jmchciimc имен Добро пожаловать в программу1 Для выхода из программы нажмите "Выход"
318 Часть 3. Создание интерфейса пользователя 10. Щелкните на кнопке ВЫХОД для останова программы. Работа программы будет завершена, вы вернетесь в среду програм- мирования. 11. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов, а затем сохраните форму под именем MyNameConv.frm в папке \Vb6Sbs\LessO9. Сохраните проект под именем MyNameConv.vbp. Внимание! Назначение интуитивно понятных имен для объектов окажет вам нео- ценимую услугу, если вы будете писать достаточно большую програм- му или работать совместно с другими программистами. В общем слу- чае, если в вашей форме имеется более двух объектов одинакового типа, вам стоит использовать соглашения по присвоению имен для объектов. Чтобы повысить производительность Не пожалейте нескольких минут и поработайте с утилитой «Броузер» (browser.vbp) в папке \Vb6Sbs\Extras на вашем жестком диске. Я написал эту программу как расширение программы Magnify, чтобы дать вам возмож- ность попрактиковаться в работе с принтерами, формами и методом Drag- and-drop, которые используются в уроках 8 и 9. Программа позволяет просматривать до трех растровых изображений одновременно, а также печатать их. Эта программа удобна, когда вам приходится просматривать десятки небольших растровых изображений, например, при создании кно- пок меню и графических элементов интерфейса. Вы можете доработать программу или использовать ее в ее нынешнем виде. «й. Увеличитель растровых картинок | I । Программа увеличения и печати растровых картинук Миниатаоы Печать Области
урок 9. Добавление художественного оформления и специальных эффектов 319 Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 10. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Кнопка Создать в форме прямую линию Используйте кнопку управления Line (От- резок) на панели инструментов. "'> Создавать в форме прямоугольники квадраты, овалы и круги Используйте кнопку управления Shape (Фигура) для задания вида фигуры и ее 1? параметров. Создать графичес- кую командную кнопку Создайте одну или более рамок изобра- жений в форме и загрузите в них точеч- ные изображения (значки), введите про- граммные операторы, обрабатывающие щелчок мыши, в процедуру обработки прерывания MouseDown для данного изоб- ражения. Ввести в вашу про- грамму поддержку операции перета- Щить-и-оставить Разрешите для объекта операцию пере- тащить-и-оставить, установив для свой- ства DragMode значение 1. При желании вы можете выбрать значок, который бу- дет отображаться при перемещении объекта. Напишите процедуру обработ- ки прерывания DragDrop или DragOver для объекта, на который будет помещен Изменить вид ука- зателя мыши перетаскиваемый объект. Установите для свойства MousePointer формы один из 12 имеющихся видов ука- зателя мыши.
320 Часть 3. Создание интерфейса пользователя Чтобы Сделайте следующее Задать собствен- ный вид указателя мыши Установите для свойства MousePointer значение 99, а затем задайте нужный вам вид указателя с помо- щью свойства Mouseicon. Переместить объект в форме Задайте координаты конечного местоположения объекта в команде Move, например: Picture 1 .Move 1440, 1440. Создать эффект анимации для объекта Поместите одну или несколько команд Move в про- цедуру обработки прерывания от таймера. Скорость анимации регулируется с помощью свойства Interval (Интервал) таймера. Увеличить или уменьшить разме- ры объекта при вы- полнении програм- мы Измените значение свойства Height или Width. Присвоить имя объекту Задайте уникальное имя объекта с помощью свой- ства Name. Используйте соглашения по присвоению имен для облегчения идентификации объекта.
чдеть « Управление корпоративными данными ж & ж & ш ж ж ш а ш & ж ж ж & ж № ж ж ж

урок >1 10; Ж Ж ж ж в Использование : модулей и процедур ©: в Урок « рассчитан в на к 55 минут • Вы научитесь: создавать стандартные модули; создавать собственные общие переменные и процедуры; вызывать глобальные переменные и процедуры в проце- дурах обработки прерываний. Изучив материал и выполнив упражнения уроков с 1 по 9, вы смело можете считать себя среднего уровня программи- стом на Visual Basic. Вы освоили основы программирования на Microsoft Visual Basic и получили необходимые навыки для создания собственных полезных утилит. В части 4 вы узнаете, как писать более сложные программы на Visual Basic. Начинается урок с создания стандартных модулей. Стандартный модуль представляет собой некое хранилище в программе, содержащее глобальные переменные, функции и подпрограммы. В этом уроке вы узнаете, как создавать соб- ственные глобальные переменные и процедуры и как их вы- зывать в процедурах обработки прерываний. Полученные вами знания будут весьма полезны для больших программ- ных проектов и при работе в составе группы программис- тов.
324 Часть 4. Управление корпоративными данными Работа со стандартными модулями При работе над большими программами у вас скорее всего будет несколько форм и процедур обработки прерываний, в которых будут использовать- ся одни и те же, т.е. общие, переменные и подпрограммы. По умолчанию переменные являются локальными для процедуры обработки прерыва- ний, т.е. они могут быть прочитаны или изменены только в той процедуре в которой они были созданы. Аналогичным образом, процедуры обработ- ки прерываний являются локальными для формы, в которой они были созданы - вы не можете, например, вызвать процедуру обработки пре- рывания cmdQuit_Click из формы Form2, если эта процедура ассоциируется с формой Forml. Стандартные модули позволяют вам совместно использовать перемен- ные и процедуры в программе. Чтобы сделать переменные и процедуры доступными для всех форм и процедур обработки прерываний в проекте, вам необходимо объявить их в одном или в нескольких стандартных модулях проекта. Стандартный модуль, или модуль программы, представляет собой особый файл с рас- ширением .bas. Он содержит переменные и процедуры, которые могут быть использованы в любом месте программы. Так же как и формы, стан- дартные модули приводятся в отдельном списке в окне Project (Проект); стандартный модуль может быть сохранен на диске с помощью команды Save Modulel As (Сохранить Modulel как) из меню File (Файл). В отличие от форм, однако, стандартные модули не содержат объектов или устанав- ливаемых свойств - только текст программы, который может быть ото- бражен и отредактирован в окне Code. На следующем рисунке показано, как объявленная в стандартном моду- ле глобальная переменная может быть использована в другой процедуре обработки прерываний проекта Visual Basic. Примечание. В противоположность стандартным модулям, объекты и процедуры обработки прерываний, ассоциированные с формой, хранятся в лго- дуле формы, а новый объект создается в модуле группы.
Урок 10. Использование модулей и процедур 325 Сначала объявляем пере- менную как глобальную > hi Projectl - Forml (Code) [(General) (Declarations) иеий Затем присваиваем ей значение RunnigTot-al End Sub Потом используем ее при выполнении действий Создание стандартного модуля Чтобы создать в программе новый стандартный модуль, вы должны щел- кнуть на направленной вниз стрелке рядом с кнопкой Add Form (Добавить форму) на панели инструментов, а также щелкнуть на Module (Модуль) или же на команде Add Module (Добавить модуль) в меню Project (Проект). Когда вы создаете новый стандартный модуль, он немедленно появляет- ся в окне Code. Первый стандартный модуль в программе получает по умол- чанию имя Module!, но вы можете изменить это имя при сохранении моду- ля на диске. Теперь попробуем создать в вашем проекте стандартный модуль. Создадим и сохраним стандартный модуль 1. Запустите Visual Basic, щелкните на команде Add Module (До- бавить модуль) в меню Project (Проект), а затем щелкните на Open (Открыть). Visual Basic добавит стандартный модуль с именем Module! в ваш проект. Модуль появляется в окне Code:
326 Часть 4. Управление корпоративными данными -Piojectl - Modulel (Code} Г” Содержимое полей списка Object (Объект) и Procedure (Процеду- ра) указывает, что открыт раздел общих (General) объявлений (Declarations) в стандартном модуле. Объявляемые здесь про- цедуры и переменные будут доступны для всей программы. (Позднее вы попробуете объявить переменные и процедуры.) 2. Дважды щелкните на строке заголовка окна Project (Проект), чтобы увидеть все окно. Окно будет выглядеть следующим образом: Project Project! [Project 1 (Project 1 Й- аг 3 Forms & Forml (Forml) S Modules I- Modulel (Modulel) Имя файла модуля Имя объектного модуля
Урок 10. Использование модулей и процедур 327 В окне Project (Проект) содержится список стандартных моду- лей, добавленных вами в программе. Эти модули содержатся в отдельной папке. Имя Module 1 в скобках представляет собой имя файла модуля по умолчанию. Имя объектного модуля (имя мо- дуля в программе) отображается слева от скобок. Далее вы из- мените оба этих имени. 3. В меню File (Файл) щелкните на команде Save Module! As (Со- храните Module! как) для сохранения пустого стандартного модуля на диске. 4. Выделите папку \Vb6Sbs\Less10, если она еще не была выделе- на. Введите MyTestMod.bas и нажмите клавишу | Enter |. Стандартный модуль будет сохранен на диске как файл .bas, а имя файла модуля в окне Project (Проект) будет обновлено. Файлы стандартных модулей имеют расширение .bas. Примечание. Вы можете загрузить файл с этим именем в другой проект, восполь- зовавшись командой Add File (Добавить файл) в меню Project (Проект). 5. Дважды щелкните на строке заголовка окна Properties (Свой- ства). Появится полноразмерное окно Properties (Свойства), как пока- зано на рисунке: Properties - Modulel Modulel Module Alphabetic | Categorized | {Returns the name used in code to Identify a .form, control, or data access object. Поскольку в стандартном модуле нет объектов, он имеет един- ственное свойство Name (Имя). Свойство Name (Имя) позволяет вам задавать имя объекта для модуля, которое вы можете ис- пользовать для различения одного модуля от другого, если вы
328 Часть 4. Управление корпоративными данными создаете более одного модуля. По соглашению имена модулей имеют префикс mod. 6. Измените значение свойства Name (Имя) на modVariables, затем нажмите клавишу | Enter |. Объектное имя стандартного модуля в окнах Properties (Свой- ства), Project (Проект) и Code будет обновлено. Свойство Name (Имя) позволяет вам устанавливать объектное имя мо- дуля. Как вы можете видеть, работа со стандартными модулями в проекте весь- ма похожа на работу с формами. В следующем упражнении вы добавите в созданный вами стандартный модуль глобальную переменную. Примечание. Чтобы удалить стандартный модуль из проекта, щелкните на модуле в окне Project (Проект), а затем щелкните на команде Remove (Удалить) в окне Project (Проект). Удаление не уничтожает модуль на вашем же- стком диске, а лишь удаляет связь между данным модулем и теку- щим проектом. Работа с глобальными переменными Объявление глобальной переменной в стандартном модуле весьма про- сто - вы вводите ключевое слово Public, а за ним - имя переменной. После того, как вы объявили переменную, вы можете читать ее, изменять или отображать ее в любой процедуре в вашей программе. Например, про- граммный оператор Public RunningTotal объявляет глобальную переменную с именем RunningTotal в стандартном модуле. Глобальные переменные могут быть использованы во всех процедурах программы. По умолчанию глобальные переменные в модулях объявляются с типом вариант, но вы можете задать другой тип переменной с помощью ключе- вого слова As. Например, оператор Public LastName As String объявляет глобальную строковую переменную LastName в вашей программе-
Урок 10, Использование модулей и процедур 329 В следующем упражнении демонстрируется, как можно использовать глобальную переменную с именем Wins в стандартном модуле. Вы откор- ректируете программу Счастливая семерка (Lucky Seven)- первую програм- му, написанную вами при изучении этой книги, а затем используете пе- ременную Wins для записи в нее количества вращений, которые были сделаны для достижения выигрышного результата. Программа Счастливая семерка из урока 2. Откорректируем проект Счастливая семерка 1. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов, затем щелкните на кнопке No (Нет), чтобы раз- решить внесение изменений, а потом откройте проект Lucky.vbp из папки \Vb6Sbs\LessO2. 2. Если форма Счастливая семерка невидима, выделите строку Lucky.frm в окне Project (Проект), затем щелкните на кнопке View Object (Просмотр объекта). (При необходимости измените раз- меры окна формы.) Будет отображен следующий интерфейс пользователя: 3. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. 4. Щелкните на кнопке Вращать шесть или семь раз, затем щел- кните на кнопке Конец.
330 Часть 4. Управление корпоративными данными В первых пяти вращениях вы выиграете (каждый раз будет появляться семерка), а затем удача от вас отвернется. Как вы помните, в программе используется функция Rnd для генера- ции трех случайных чисел при каждом щелчке мышью на кноп- ке Вращать. Если одна из цифр является семеркой, процедура обработки прерывания для кнопки Вращать (Command1_Click) ото- бразит стопку монет и выдаст звуковой сигнал. Вы внесете в программу изменения, введя в форму новое поле с меткой и добавив глобальную переменную для записи в нее числа ваших выигрышей. 5. В меню File (Файл) щелкните на команде Save Lucky.frm As (Со- хранить Lucky.frm как). Выберите папку \Vb6Sbs\Less10, а затем сохраните форму на диске под именем MyWins.frm. 6. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Выберите папку \Vb6Sbs\Less10, а затем сохра- ните проект на диске под именем MyWins.vbp. Теперь отредактируем форму Победы (Wins) и добавим стандартный мо- дуль, чтобы создать новую программу. Добавим стандартный модуль 1. Измените поле метки Счастливая семерка таким образом, чтобы оно занимало меньше места в форме. 2. Щелкните на кнопке управления Label (Поле метки), затем со- здайте прямоугольное поле метки ниже метки Счастливая семер- ка. 3. Установите свойства, как показано в следующей таблице, для новой метки и формы в целом. Чтобы облегчить идентифика- цию новой метки в тексте программы, вы измените имя для но- вой метки на IblWins. Объект Свойство Установленное значение Labell Alignment (Толщина) Caption (Надпись) Font (Шрифт) ForeColor (Цвет букв) Name (Имя) 2 - Center (По центру) Побед: 0 Arial, Bold Italic, 12-point Green (Зеленый) IblWins Forml Caption (Надпись) Счастливая семерка
Урок 10. Использование модулей и процедур 331 По завершении установки свойств ваша форма будет выгля- деть так, как показано на следующем рисунке: Поле _ метки IbIWins Теперь добавим в проект стандартный модуль. 4. Щелкните на команде Add Module (Добавить модуль) в меню Project (Проект), затем щелкните на Open (Открыть). В окне Code появится модуль с именем Modulel. 5. Введите Public Wins в стандартный модуль, затем нажмите клавишу | Enter |. Этот программный оператор объявляет пе- ременную типа вариант в стандартном модуле вашей програм- мы. При работе программы каждая из процедур обработки пре- рываний будет иметь доступ к этой переменной. Ваш стандартный модуль должен выглядеть так:
332 Часть 4. Управление корпоративными данными 6. В меню File (Файл) щелкните н команде Save Modulel As (Со- хранить Modulel как), введите MyWins.bas, затем нажмите кла- вишу | Enter | для сохранения модуля на диске. 7. В окне Project (Проект) щелкните на Forml (MyWins.fгm), щелк- ните на кнопке View Object (Просмотр объекта), а затем дважды щелкните на кнопке Вращать. 8. Введите ниже команды Веер следующие операторы в програм- му обработки прерывания: Wins = Wins + 1 IbIWins.Caption = "Побед: “ & Wins Глобальная переменная Wins введена в процедуру обработки прерыва- ния. Эти операторы увеличивают значение глобальной переменной Wins, если в результате вращения появилась семерка. Второй оператор использует действие конкатенации (&) для присвое- ния объекту IbIWins надписи в формате Побед: X, гдеХ — количе- ство выигрышей. Полностью процедура будет выглядеть сле- дующим образом: /Ж Projectl - Forml (Code] Load Private Sub Commandl_Click() False Int(Rnd * Int(Rnd * Int(Rnd * Imagel.Visible = Labell.Caption = Label2.Caption = Label3.Caption = ' если како-либо значение*5" If (Labell.Caption = 7) Or Or (Label3.Caption = 7) Then Imagel.Visible = True Beep Wins = Wins + 1 IbIWins.Caption = "Побед: " & Wins End.If End Sub • ' скрыть K'jHS!';’.! 10) ' выбор номеров Ю) 10) показать иоиечн и подать : (Labe 12.Caption = 7) Эти операторы используют глобальную переменную Wins
Урок 10. Использование модулей и процедур 333 9. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект) для сохранения проекта на диске. 10. Щелкните на кнопке Start (Пуск) для запуска программы. 11. Щелкните на кнопке Вращать 10 раз. В поле метки Победы (Wins) будет фиксироваться количество джек-потов. При каждом вашем выигрыше отображаемое зна- чение будет увеличиваться на единицу. После 10 вращений у вас будет 6 выигрышей, как показано на следующем рисунке: Поле метки Победы после Ю вращений 12. Щелкните на кнопке Конец для выхода из программы. В переменной Wins хранится общее количество ваших джек-потов при игре. Глобальная переменная здесь весьма полезна, поскольку она использу- ется 10 раз при вызове процедуры обработки прерывания Command1_Click. Если бы вы объявили переменную Wins в процедуре Command1_Click как локальную, то ее значение каждый раз обнулялось бы, подобно сбросу показаний одометра вашего автомобиля. Использование глобальной пе- ременной в стандартном модуле позволяет вам избежать такого сброса показаний.
334 Часть 4, Управление корпоративными данными Создание процедур общего назначения Помимо объявлений глобальных переменных в стандартных модулях могут содержаться процедуры общего назначения, которые могут быть вызваны из любого места в программе. Процедуры общего назначения не похожи на процедуры обработки прерываний, поскольку не ассоцииру- ются с определенным событием (прерыванием) в ходе выполнения про- граммы или с объектом, созданным вами с помощью панели инструмен- тов. Процедуры общего назначения близки к внутренним операторам и функциям Visual Basic - они вызываются по имени, могут иметь аргу- менты и каждая из них выполняет определенное действие. Например, представим себе программу, в которой имеется три средства для вывода на печать рисунков точечной графики — команда меню Print (Печать), кнопка Print (Печать) на панели инструментов и печать методом «перетащить-и-оставить» с использованием значка принтера. Вы може- те поместить одну и ту же подпрограмму печати в каждую из трех проце- дур обработки прерываний, или же вы можете обрабатывать запросы при печати для всех трех методов с использованием одной процедуры в стан- дартном модуле. Процедуры общего назначения позволяют экономить ваше время, делают программы более компактными и удобочитаемыми, упрощают работу программ. В стандартном модуле вы можете создать три вида процедур общего на- значения. Процедуры типа Function (Функция). Процедуры типа Function (Фун- кция) вызываются по имени из процедур обработки прерываний или других процедур. Они могут содержать аргументы, через которые по- лучают входные значения, а также возвращать значение в виде име- ни функции. Обычно используются для вычислений. Процедуры типа Function и Sub, помещенные в стандартный модуль, по- зволяют вам создавать процедуры общего назначения. Процедуры типа Sub (Подпрограмма). Процедуры типа Sub (Подпрог- рамма) вызываются по имени из процедур обработки прерываний или из других процедур. Они также могут содержать аргументы, получать входные значения, выполнять определенные действия и возвращать значения. В отличие от функций, процедуры типа Sub (Подпрограмма) обычно используются для получения или обработки входных данных, отображения выходных данных, или установки свойств. Процедуры типа Property (Свойство). Процедуры типа Property (Свой- ство) используются для создания определяемых пользователем
Урок 10, Использование модулей и процедур 335 свойств в программе и манипулирования ими. Это полезно, если вам требуется создать средство, позволяющее использовать имеющиеся средства управления Visual Basic и расширить возможности языка Visual Basic. Для более подробной информации о процедурах типа Property (Свойство) обратитесь к теме property get statement в оперативной справочной системе Visual Basic. Преимущества процедур общего назначения Процедуры общего назначения дают вам возможность ассоциировать часто используемые подпрограммы с определенным именем в стан- дартном модуле. Процедуры общего назначения обладают следующи- ми преимуществами. Позволяют избежать повторных строк в вашей программе. Вы мо- жете определить процедуру один раз, после чего программа будет выполнять ее столько раз, сколько это необходимо. Делают программу более удобочитаемой. Программа делится на несколько небольших частей, чтобы легче было представить струк- туру программы и понять ее работу, что особенно важно для боль- ших программ. Существенно упрощают процесс разработки программы. Програм- мы, поделенные на логические блоки, гораздо проще разрабаты- вать, писать и отлаживать. Кроме того, если вы работаете над про- граммой в составе группы программистов, работая с отдельными модулями и процедурами, впоследствии бывает легче «собрать» программу. Могут быть использованы и в других программах. Вы легко може- те включить процедуры из стандартных модулей в другие про- граммные проекты. Позволяют расширить возможности языка Visual Basic. Процедуры общего назначения могут выполнять действия, которые невозмож- но исполнить с помощью отдельных ключевых слов Visual Basic. Создание процедур типа Function (Функция) Функция выполняет служебное действие, например вычисление, и воз- вращает значение.
336 Часть 4. Управление корпоративными данными Процедура типа Function (Функция) представляет собой группу операто- ров, содержащихся между оператором Function и оператором End Function в стандартном модуле. Операторы в функции обрабатывают текст, управ- ляют входными данными или вычисляют значения. Вы выполняете, или вызываете, функцию в программе, помещая имя функции в программ- ный оператор с указанием требуемых аргументов. (Аргументы представ- ляют собой данные, используемые при работе функции.) Другими слова- ми, использование процедуры типа Function (Функция) аналогично использованию внутренних функций, таких как Time, int или Str. I Примечание. Функции, объявленные в стандартных модулях, по умолчанию явля- ются общедоступными и могут использоваться в любой процедуре обработки прерывания. Синтаксис процедуры типа Function (Функция) Основной синтаксис процедуры типа Function (Функция) следующий: Function Имя Функции ([аргументы]) [As Туре] операторы функции End Function Функции могут иметь тип данных. В квадратных скобках ([]) указа- ны возможные параметры. Элементы, которые не заключены в скоб- ки, являются обязательными. Важными являются следующие элементы синтаксиса. Имя Функции представляет собой имя функции, которую вы создаете в стандартном модуле. Аргументы представляют собой список возможных аргументов (раз- деленных запятыми), которые будут использоваться функцией. As Туре является опцией, задающей тип данных для возвращаемого функцией значения (по умолчанию используется тип Variant (Вариант)). Операторы функции представляют собой блок операторов, выполня- ющих действия функции. Функции всегда возвращают значение вызвавшей их процедуре в виде имени функции (Имя Функции). По этой причине последний оператор функции часто является оператором присвоения, назначающим оконча- тельный результат вычисления функции описанию Имя Функции. На-
Урок 10. Использование модулей и процедур 337 пример, процедура TotalTax, приведенная ниже, вычисляет налоги штата (StateTax) и городские налоги (CityTax) для элемента, а затем присваивает результат имени TotalTax: Function TotalTax (Cost) StateTax = Cost * 0.05 'Налоги штата 5% CityTax = Cost * 0.015 'Городские налоги 1.5% TotalTax = StateTax + CityTax End Function TotalTax является простой функцией с одним аргументом. Внимание! Я рекомендую вам присваивать значение имени функции каждый раз, I когда вы пишете функцию. Тем самым вы всегда будете уверены, что I результат вычисления будет возвращен в программу. I Вызов процедуры типа Function (Функция) Чтобы вызвать функцию Т о tai Тах в процедуре обработки прерывания, сле- дует использовать оператор, подобный следующему: IbITaxes.Caption = TotalTax (500) Значение функции обычно присваивается переменной или свойству. Этот оператор вычисляет общую сумму налога с дохода в 500$, а затем присваивает результат свойству Caption (Надпись) объекта IbITaxes. В ка- честве аргумента функции TotalTax может быть использована и перемен- ная, как в следующем операторе: TotalCost = SalesPrice + TotalTax (SalesPrice) В этой строке функция TotalTax используется для определения налогов с дохода, значение которого содержится в переменной SalesPrice, а затем вычисленный налог суммируется со значением SalesPrice для получения полной стоимости. Не правда ли, использование функции делает текст программы существенно яснее? Использование функции для выполнения вычисления В следующем упражнении вы добавите функцию в программу Счастливая семерка, чтобы она подсчитывала вероятность выигрыша в игре (количе- ство вращений в процентах, в которых появляется одна или более семе- рок). Для этого вы введете функцию с именем Rate и глобальную перемен-
338 Часть 4. Управление корпоративными данными ную Spins в стандартный модуль. Затем вы будете вызывать функцию Rate каждый раз при щелчке на кнопке Вращать. Результаты будут отражены в новом поле метки, которое вы создадите в форме. Создадим функцию расчета вашего рейтинга в игре 1. Откройте окно Project (Проект). В окне Project (Проект) появятся составляющие проекта MyWins.vbp. Вы сохраните проект под именем MyRate, чтобы предотвратить внесение изменений в программу MyWins. 2. Щелкните на форме MyWins.frm. В меню File (Файл) щелкните на команде Save MyWins.frm As (Сохранить MyWins.frm как). Со- храните форму на диске под именем MyRate.frm в папке \Vb6Sbs\Less10. 3. Щелкните на стандартном модуле MyWins.bas в окне Project (Проект). В меню File (Файл) щелкните на команде Save MyWins.bas As (Сохранить MyWins.bas как). Сохраните модуль на диске под именем MyRate.bas. 4. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Сохраните проект под именем MyRate.vbp. 5. Если форма не видима, щелкните на форме MyRate.ftm в окне Project (Проект), а затем щелкните на кнопке View Object (Про- смотр объекта). Появится интерфейс пользователя для про- граммы Счастливая семерка. 6. Переместите поле метки Победы ближе к метке Счастливая се- мерка, чтобы освободить место для нового поля метки. При не- обходимости измените размеры этих полей меток. 7. С помощью кнопки управления Label (Поле метки) создайте новое поле метки ниже метки Победы. Установите для нее сле- дующие свойства: Объект Свойство Установленное значение Label5 Alignment (Выравнивание) 2 - Center (По центру) Caption (Надпись) 0.0% Font (Шрифт) Arial, Bold Italic, 12-point ForeColor (Цвет букв) Red (Красный) Name (Имя) IblRate Ваша форма должна выглядеть примерно так, как рисунок на следующей странице.
Урок 10. Использование модулей и процедур 339 Поле метки IblRate 8. В окне Project (Проект) щелкните на модуле MyRate.bas, а затем щелкните на кнопке View Code (Просмотр программы) в окне Project (Проект). В окне Code будет отображен стандартный модуль Modulel. 9. Введите объявление следующей глобальной переменной ниже оператора Public Wins: Public Spins В стандартном модуле теперь объявлены две глобальные пе- ременные (Wins и Spins), которые будут доступны для всех про- цедур в программе. Переменная Spins будет хранить количество сделанных оборотов. 10. Теперь введите следующее объявление функции: Function Rate(Hits, Attempts) As String Percent = Hits/Attempts Rate = Format(Percent, ''0.0%'') End Function Функция Rate описана в стандартном модуле Modulel. После того как вы ввели первую строку в описание функции, Visual Basic откроет в стандартном модуле новую процедуру, в которой будет содержаться описание функции. После того, как вы введете остальной текст, ваш экран будет выглядеть, как показано на рисунке.
340 Часть 4. Управление корпоративными данными открывающийся список процедур I -. Project! -Module! (Code) Г"И | (General) ;ЯЙ|дНМе । Public Wins Public Spins_______________________________ Function Rate(Hits, Attempts) As String Percent = Hits / Attempts Rate = Format(Percent, ”0.04") End Function Функция Rate определяет относительное количество выигры- шей в процентах путем деления аргумента Hits на аргумент Attempts и последующего представления результата в формате процентов с помощью функции Format. Функция Rate (возвра- щаемое ей значение) объявлена как текстовая строка, посколь- ку функция Form at возвращает строку текста. Аргументы Hits и Attempts в процессе вызова функции заменяются на две пере- менные, значения которых и используются при вычислении функции. В качестве аргументов функции Rate могут использо- ваться любые числа или переменные, а не только переменные Wins и Spins. 11. Закройте окно Code, затем дважды щелкните на кнопке Вра- щать в форме Счастливая семерка, чтобы перейти к тексту проце- дуры Command1_Click. 12. Под четвертой строкой процедуры обработки прерывания (третий оператор, содержащий функцию Rod), введите следу- ющий оператор: Spins = Spins + 1 Этот оператор инкрементирует (увеличивает на единицу) зна- чение переменной Spins каждый раз, когда пользователь щел- кает на кнопке Вращать, и в окошках появляются новые цифры- 13. Прокрутите вниз окно Code, а затем введите следующий опе- ратор в качестве последней строки процедуры обработки пре- рывания Command1_Click, между операторами End If и End Sub:
Урок 10. Использование модулей и процедур 341 IblRate.Caption = Rate(Wins, Spins) [jpu вызове функции используются две переменные. При вводе функции Rate обратите внимание, что Visual Basic автоматически отображает имена аргументов для функции. Этот оператор вызывает функцию Rate, используя в качестве аргументов переменные Wins и Spins. Результат возвращается в виде текстовой строки в формате процентов, а затем присваи- вается свойству Caption (Надпись) метки IblRate формы. Это при- своение осуществляется после каждого нового вращения. 14. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект), чтобы обновить файлы вашего проекта. Теперь запустим программу. Запустим программу MyRate 1. Щелкните на кнопке Start (Пуск) для запуска программы. 2. Щелкните на кнопке Вращать 10 раз. При первых 5 щелчках рейтинг выигрыша составляет 100.0%. Каждый раз имеет место джек-пот. При последующих щелч- ках, однако, рейтинг падает до 83.3%, 71.4%, 75.0% (вы снова выиграли), 66.7% и 60.0% (всего 6 выигрышей при 10 попытках). После 10 вращений ваш экран будет выглядеть следующим образом:
342 Часть 4. Управление корпоративными данными Законченная программа Rate.vbp содержится в папке \Vb6Sbs\Less10. Если вы продолжите попытки, то рейтинг упадет до 28%. Фун- кция Rate показывает вам, насколько вы были удачливы на те- кущий момент, но через некоторое время устанавливается ре- альная вероятность выигрыша. Реальная вероятность выигрыша в игре Счастливая семерка состав- ляет около 28%. 3. Чтобы завершить работу программы, щелкните на кнопке Конец. Программа будет остановлена, и вы вернетесь в программное окружение. Примечание. Если вы хотите, чтобы программа при работе использовала случай- ное количество вращений, поместите в процедуру обработки преры- вания Form_Load оператор Randomize. Для руководства к действию см. раздел «Шаг вперед: дополнение к программе» из урока 2. Создание процедур типа Sub (Подпрограмма) Процедура типа Sub (Подпрограмма) похожа на процедуру типа Function (Функция), за исключением того, что она не возвращает значения, ассо- циированного со своим именем. Процедуры типа Sub (Подпрограмма) обыч- но используются для получения входных данных от пользователя, ото- бражения или вывода на печать информации, или манипулирования несколькими свойствами с учетом условия. Подпрограммы также исполь- зуются для'обработки данных и возврата значений нескольких перемен- ных после вызова процедуры. Большинство функций может возвращать лишь одно значение, а процедуры типа Sub (Подпрограмма) могут воз- вращать несколько значений. Процедуры типа Sub (Подпрограмма) обрабатывают информацию. Синтаксис описания процедуры типа Sub (Подпрограмма) Основной синтаксис для описания процедур типа Sub (Подпрограмма) следующий:
Урок 10. Использование модулей и процедур 343 Sub Имя Процедуры ([аргументы]) операторы процедуры End Sub Важными являются следующие элементы. g Имя Процедуры представляет собой имя процедуры типа Sub (Под- программа), которую вы создаете. Аргументы представляют собой список возможных аргументов (раз- деленных запятыми, если их более одного), используемых в процедуре. Операторы процедуры представляют собой блок операторов, выпол- няемых при работе процедуры. При вызове процедуры количество и тип аргументов, передаваемых в процедуру типа Sub (Подпрограмма), должно соответствовать количеству и типу аргументов, указанных в объявлении процедуры. Если передан- ные в процедуру типа Sub (Подпрограмма) значения переменных будут модифицированы (изменены) в ходе выполнения процедуры, эти изме- ненные значения возвращаются в программу. По умолчанию процедуры типа Sub (Подпрограмма), объявленные в стандартном модуле, являются общедоступными, поэтому они могут быть вызваны из любой процедуры обработки прерываний. Аргументы при вызове процедуры должны соответствовать аргумен- там в объявлении процедуры типа Sub (Подпрограмма). Внимание! Передача переменной процедуре называется передачей аргумента по ссылке, поскольку переменная может быть модифицирована в ходе выполнения процедуры и возвращена в программу. Передача лите- рала (например, строки в кавычках) в процедуру называется переда- чей аргумента по значению, поскольку значение не может быть моди- фицировано в ходе выполнения процедуры. Вы можете передавать переменные по значению, если используете специальную нотацию. Об этом вы подробнее узнаете в разделе «Передача переменных по зна- чению» далее в этом уроке. Вы можете использовать приведенную ниже процедуру типа Sub (Под- программа) для добавления имен в список формы в ходе выполнения про- граммы. Передача строковой переменной осуществляется по ссылке. Если Процедура типа Sub (Подпрограмма) объявлена в стандартном модуле, она Может быть вызвана из любой процедуры обработки прерываний в про- грамме.
344 Часть 4. Управление корпоративными данными Sub AddNameToListBox (person$) If person$ <> "Then Forml.Listl.Additem person$ Msg$ = person$ & "Добавлены в список." Else Msg$ = "Имя не определено" End If MsgBox (Msg$),, "Добавить имя" End Sub Процедура AddNameToListBox получает имя, которое будет добавлено в спи- сок, через аргумент реrsoп$. Эта строковая переменная передается в про- цедуру по ссылке. Если значение persoп$ не пусто, или не нулевое, данное имя добавляется в объект «поле со списком» Listl с помощью команды Add Item, а подтверждающее сообщение отображается с помощью функ- ции MsgBox. Если аргумент нулевой, процедура пропускает команду Additem и отображает сообщение «Имя не определено». Эта процедура типа Sub (Подпрограмма) получает аргумент person$. Примечание. При установке свойств в тексте процедуры, размещенной в стандар- тном модуле, вам необходимо в качестве префикса к каждому из объектов указывать имя формы с точкой. (Forml. в этом примере.) Тем самым вы даете знать Visual Basic, на какую из форм вы ссылаетесь. Вызов процедуры типа Sub (Подпрограмма) Чтобы вызвать процедуру типа Sub (Подпрограмма), вам нужно указать имя процедуры, а затем - список требуемых аргументов. Например, что- бы вызвать процедуру AddNameToListBox с использованием литеральной строки (вызов по значению), вам нужно ввести оператор следующего типа: AddNameToListBox “Kimberly" Для передачи аргументов по значению используются литералы. Вы также можете вызвать процедуру с использованием переменной (вы- зов по ссылке), введя оператор следующего типа: AddNameToListBox NewName$ Для передачи аргументов по ссылке используются переменные. В обоих случаях процедура AddNameToListBox добавит заданное имя в поле списка. В данной процедуре типа Sub (Подпрограмма) передача по значе-
Урок 10. Использование модулей и процедур 345 длю и по ссылке приводит к одинаковому результату, поскольку аргу- мент в ходе выполнения процедуры не изменяется. Значение процедур типа Sub (Подпрограмма) для экономии места, занима- емого текстом вашей программы, станет понятно, если вам потребуется вызывать процедуру многократно, как показано в следующем примере. AddNameToListBox "Кимберли" 'Всегда добавляют два имени AddNameToListBox "Речел" до 'разрешение использовать дополнительные имена NewName$ = 1при(Вох("Ввести название списка.", "Добавить имя") AddNameToListBox NewName$ Loop Until NewNameS ='"' Пользователю разрешается многократно вводить имена в список. В сле- дующем упражнении вы используете процедуру типа Sub (Подпрограм- ма) для управления входными данными в программе. Использование процедуры типа Sub (Подпрограмма) для управления входными данными Процедуры типа Sub (Подпрограмма) часто используются для обработки входных данных программы в том случае, если информация поступает от двух или более источников и должна быть представлена в одинаковом формате. В следующем упражнении вы создадите процедуру типа Sub (Подпрограмма) с именем AddName, которая будет предлагать пользова- телю ввести данные, а затем отформатирует текст таким образом, чтобы он отображался в текстовом поле в несколько строк. Эта процедура по- зволит вам сэкономить время, поскольку вы будете использовать ее в двух процедурах обработки прерываний, каждая из которых связана со своим полем ввода, и вам не придется записывать одни и те же операторы дваж- ды. Так как процедура будет объявлена в стандартном модуле, вам пона- добится описать ее лишь один раз. Создадим текстовое поле с помощью процедуры типа Sub (Подпрограмма) 1. В меню File (Файл) щелкните на команде New Project (Создать проект), а затем щелкните на кнопке ОК для открытия нового стандартного проекта. Появится новая пустая форма. а 2. С помощью кнопки управления TextBox (Текстовое поле) со- здайте два текстовых поля, одно рядом с другим, в средней ча- сти формы.
346 Часть 4. Управление корпоративными данными Вы будете использовать эти поля для ввода и отображения имен служащих двух отделов. 3. С помощью кнопки управления Label (Метка) создайте две мет- ки выше текстовых полей. В них будут отображены названия отделов. 4. С помощью кнопки управления CommandButton (Командная кнопка) создайте командную кнопку под каждым текстовым полем и отдельную командную кнопку в нижней части формы. Первые две кнопки вы будете использовать для добавления имен сотрудников в список соответствующего отдела. Третья кнопка будет использоваться для выхода из программы. 5. Установите указанные в таблице свойства для объектов в про- грамме. Поскольку текстовые поля будут состоять из несколь- ких строк, следует установить для их свойств Multi Line (Несколь- ко строк) значение Т rue (Истина), а для свойств Scroll Bars (Полосы прокрутки) установить значение Vertical (Вертикальная). Нужно также установить для свойств ТabStop (Табуляция) значение False (Ложь), а для свойств Locked (Заблокировано) значение True (Ис- тина), чтобы невозможно было модифицировать данные. Эти параметры установки, как правило, используются в тех случа- ях, когда текстовое поле состоит из нескольких строк. Эти параметры являются типичными для текстовых полей, служа- щих для отображения нескольких строк текста. Объект Свойство Установленное значение Textl Text (Текст) Empty (Пусто) MultiLines True (Истина) (Несколько строк) ScrollBars 2-Vertical (Вертикальная) (Полосы прокрутки) TabStop False (Ложь) (Табуляция) Locked True(Истина) (Заблокировано) Name (Имя) txtSales Text2 Text (Текст) Empty (Пусто) MultiLines True (Истина) (Несколько строк)
Урок 10. Использование модулей и процедур 347 Объект Свойство Установленное значение ScrollBars 2-Vertical (Полосы прокрутки) (Вертикальная) TabStop (Табуляция) False (Ложь) Locked (Заблокировано) True (Истина) Name (Имя) txtMkt Labell Caption (Надпись) Продаж Font (Шрифт) Bold Name (Имя) IblSales Label2 Caption (Надпись) Маркетинга Font (Шрифт) Bold Name (Имя) IblMkt Commandl Caption (Надпись) Добавить имена Name (Имя) cmdSales Command2 Caption (Надпись) Добавить имена Name (Имя) cmdMkt Commands Caption (Надпись) Выход Name (Имя) cmdQuit Forml Caption (Надпись) Назначение в отделы По завершении ваша форма должна выглядеть подобно при- веденной на рисунке:
348 Часть 4. Управление корпоративными данными Теперь вы добавите стандартный модуль и создадите проце- дуру общего назначения AddName типа Sub (Подпрограмма). 6. В меню Project (Проект) щелкните на команде Add Module (До- бавить модуль), затем щелкните на Open (Открыть). В окне Code появится новый стандартный модуль. 7. Введите в стандартном модуле текст процедуры AddName. Sub AddName(Team$, ReturnString$) Prompts = "Прием в отдел." & Team$ Nm$ = lnputBox(Prompt$, “Окно ввода") WrapCharacterS = Chr(13) + Chr(10) ReturnString$ = Nm$ & WrapCharacter$ End Sub Используйте операторы Chr(13) и Chr(10) для создания новой строки в текстовом поле. Процедура общего назначения типа Sub (Подпрограмма) исполь- зует функцию InputBox для запроса пользователю на ввод имени сотрудника. При вызове процедура получает два аргумента: Теат$ - строка, содержащая название отдела; Return String $ - пустая строковая переменная, возвращающая отформатированное имя сотрудника вызвавшей процедуре обработки прерывания. К каждому имени сотрудника добавляются символы возврата каретки и перехода на другую строку, поэтому каждое имя в текстовом поле появляется на отдельной строке. Этот прием можно использовать при работе с любым текстовым полем. Ваше окно Code должно иметь следующий вид:
Урок 10. Использование модулей и процедур 349 8. Закройте окно Code, а затем дважды щелкните на первой из кнопок Add Name формы (кнопке под текстовым полем Продаж). Введите следующие строки в текст процедуры обработки пре- рывания cmdSales_Click: AddName “Продаж1', SalesPosition$ txtSales.Text = txtSales.Text & Sales Positions При вызове процедуры-подпрограммы AddName один аргумент заменяется по значению на «Продаж», а второй аргумент за- меняется по ссылке на переменную SalesPosition$. Во второй стро- ке используется переданный по ссылке аргумент для добавле- ния текста в поле txtSales. Оператор конкатенации (&) связывает новое имя с остальным текстом в поле. 9. Откройте список Object (Объект) в окне Code и щелкните на объекте cmdMkt. Введите следующие строки в процедуру обра- ботки прерывания cmdMkt_Click: AddName "Маркетинга", MktPositionS txtMkt.Text = txtMkt.Text & MktPosition$ Эта процедура аналогична процедуре cmdSales_Click, только здесь в процедуру посылается значение «Маркетинга» и обновляется текст в поле tXtMkt. Имя возвращаемой локальной переменной изменено, чтобы сделать его интуитивно более понятным. 10. Откройте список Object (Объект) и щелкните на объекте cmdQuit. Введите оператор End в процедуру обработки преры- вания cmdQuit_Click, а затем закройте окно Code. 11. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов. Выберите папку \Vb6Sbs\Less10 и сохраните стандартный модуль под именем MyTeams.bas. Сохраните вашу форму под именем MyTeams.frm, а затем сохраните проект под именем MyTeams.vbp. Дело сделано! Теперь запустим программу MyTeams. Запустим программу MyTeams 1. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. 2. Щелкните на кнопке Добавить имя под текстовым полем Про- даж, а затем введите в поле ввода Мария Палермо. Ваше поле ввода должно выглядеть следующим образом:
350 Часть 4. Управление корпоративными данными Законченная программа Teams.vbp содержится в папке \Vb6Sbs\Less10. 3. Щелкните на кнопке ОК, чтобы добавить имя в текстовое поле Продаж. Имя появится в текстовом поле. 4. Щелкните на кнопке Добавить имя под текстовым полем Марке- тинга, введите Генри Джеймс в поле ввода, затем нажмите кла- вишу | Enter |. Имя появится в текстовом поле Маркетинга. Ваш экран будет выглядеть подобно представленному на рисунке: 5. Введите четыре или пять имен в каждое текстовое поле. Каждое имя появляется в отдельной строке текстового поля. Прокрутка текстовых полей не осуществляется автоматичес- ки, поэтому вы не увидите все введенные вами имена, если и* больше, чем количество имен, которые могут поместиться в тек- стовом поле. Чтобы увидеть все имена, воспользуйтесь поло- сой прокрутки.
Урок 10. Использование модулей и процедур 351 6. По завершении щелкните на кнопке ВЫХОД, чтобы закончить работу программы. Ц1аг вперед: передача аргументов по значению При обсуждении процедур типа Sub (Подпрограмма) вы узнали, что аргу- менты передаются процедуре по ссылке или по значению. Если пере- менная передается по ссылке (по умолчанию), любое совершенное над переменной изменение передается в вызвавшую процедуру. Вы восполь- зовались этим преимуществом в программе MyTeams, когда использовали передачу переменной по ссылке для добавления имени в текстовое поле. Передача по ссылке обладает значительными преимуществами, но при этом надо следить, чтобы значение переменной в процедуре не было не- предумышленно изменено. Например, рассмотрим следующее описание процедуры типа Sub (Подпрограмма) и действие по ее вызову: Sub CostPlusInterest (Cost, Total) Cost= Cost * 1.05‘добавить 5% стоимости...(add 5% to cost...) Total = Int (Cost) 'then make integer and return End Sub Price = 100 Total = 0 CostPlusInterest Price, Total Print Price; "при 5% комиссионных это"; Total В этом примере программист передает две переменные по ссылке в про- цедуру CostPlusInterest: Price и Total. Программист планирует использовать обновленную переменную Total в последующей команде вывода на печать Print, но он забыл, что переменная Price также была обновлена в ходе вы- полнения процедуры. (Поскольку переменная Price была передана по ссыл- ке, изменение в переменной Cost автоматически приводит к аналогично- му изменению в переменной Price.) В процессе выполнения программы будет выведен следующий ошибочный результат: 105 при 5% комиссионных это 105 Будьте внимательны при передаче переменных по ссылке, не попадите впросак.
352 Часть 4. Управление корпоративными данными Ключевое слово By Vai Лучший способ избежать этой проблемы - никогда не менять передан- ную переменную в процедуре. Но это решение усложняет программы и не всегда надежно, если вы работаете в составе группы из нескольких программистов. Лучшее решение заключается в использовании ключе- вого слова ByVai в списке аргументов при объявлении процедуры. Тем са- мым вы сообщаете Visual Basic, чтобы он сохранил копию оригинала ар- гумента и вернул ее неизменной по окончании процедуры - даже если переменная была модифицирована в ходе выполнения процедуры. Клю- чевое слово ByVai используется в списке аргументов следующим образом: Sub CostPluslnterest(ByVal Cost, Total) При объявлении аргумента Cost с указанием ключевого слова ByVai про- грамма отобразит правильный результат: 100 при 5% комиссионных это 105 Передача переменной по значению Если вы не хотите полагаться на ключевое слово ByVai, то можете исполь- зовать альтернативный метод для предотвращения модификации пере- менных: вы можете преобразовать их в литерал, заключив в скобки. Этот довольно редко используемый прием всегда срабатывает в Visual Basic, а вызов процедуры становится более наглядным. Если вы таким образом задали передачу переменной по значению, каждому будет ясно, что вы имели в виду. Это также весьма эффективный путь для передачи пере- менной по временам. Синтаксис вызова процедуры CostPlusInterest с пере- дачей переменной Price по значению следующий: CostPlusInterest (Price), Total Если рассмотренная процедура в программе будет вызываться таким об- разом, то будет получен правильный результат: 100 при 5% комиссионных это 105 Вы можете передать переменную по значению, заключив ее в скобки. В этом уроке вы познакомились с глобальными переменными, функция- ми и подпрограммами, используемыми для управления и обработки дан- ных в программе. По мере увеличения сложности ваших программ вЫ оцените сполна все преимущества этих конструкций. Они позволят вам существенно сэкономить время и могут быть использованы в ваших даль- нейших проектах.
Урок 10. Использование модулей и процедур 353 £Сли вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 11. £сли вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Присвоить имя объекту Задайте уникальное имя для свойства Name (Имя), используйте соглашения по присвоению имен для облегчения идентификации элемента по его имени. Создать новый модуль Щелкните на направленной вниз стрелке кнопки Add Form (Добавить форму), а затем щелкните на строке Module (Модуль) в открывшемся списке; или щелкните на команде Add Module (Добавить модуль) в меню Project (Проект); Сохранить новый модуль Выделите модуль в окне Project (Проект), а затем щелкните на команде Save Modulel As (Сохранить Modulel как) в меню File (Файл). Удалить модуль из программы Выделите модуль в окне Project (Проект), а затем щелкните на команде Remove (Удалить) в меню Project (Проект). Добавить суще- ствующий модуль В меню Project (Проект) щелкните на команде Add File (Добавить файл). в программу Создать глобаль- ную переменную Объявите переменную с заданием ключевого слова Public в стандартном модуле, например: Public TotalSales As Integer. Создать общедос- тупную функцию Поместите операторы функции между ключевым словом Function и ключевым словом End Function в стан- дартном модуле. Функции по умолчанию являются общедоступными, например:
354 Часть 4. Управление корпоративными данными Чтобы Сделайте следующее Function Rate(Hits, Attempts) As String Percent = Hits / Attempts Rate = Format(Percent, "0.00%") End Function Вызвать функцию, определенную пользователем Введите имя функции с необходимыми для нее ар- гументами в операторе процедуры обработки преры- вания, например: IblRate.Caption = Rate(NumHits, NumTrys). Создать процеду- ру типа Sub (Подпрограмма) Поместите операторы процедуры между ключевым словом Sub и ключевым словом End Sub в стандарт- ном модуле. Процедуры-подпрограммы по умолча- нию являются общедоступными, например: Sub CostPluslnterest(Cost, Total) Cost = Cost * 1.05 Total = Int(Cost) End Sub Вызвать процеду- ру типа Sub (Подпрограмма) Введите имя процедуры с необходимыми аргумен- тами в операторе процедуры обработки прерывания, например: CostPlusInterest PriceTag, TotalPrice. Установить или использовать свойство объекта в процедуре общего назначения Укажите имя формы с точкой (.) перед именем объек- та, например: Forml.Labell.Caption = “Поездка в Германию!" Передать аргу- мент по значению Укажите переменную, поместив ее в скобки, или за- дайте в качестве аргумента процедуры литерал, на- пример: Calculatelnterest (Price) или Calculatelnterest 500. Передать аргу- мент по ссылке Задайте в качестве аргумента процедуры перемен- ную: Calculatelnterest 500
урок 11 Работа с наборами элементов и массивами Урок рассчитан на 45 минут Вы научитесь: работать с наборами; обрабатывать наборы с помощью цикла For Each... Next; организовывать переменные в массивы. Объекты формы могут быть объединены в группу, называе- мую набором. В этом уроке вы познакомитесь со стандарт- ными наборами Microsoft Visual Basic, а также узнаете, как обрабатывать наборы с помощью специальных циклов For Each...Next. Вы также узнаете, как организовывать перемен- ные в группы, называемые массивами. Массивы облегчают управление данными в программе, упрощают работу с ба- зами данных (подробнее об этом см. урок 13). Работа с наборами объектов Вы уже знаете, что объекты формы хранятся все вместе в одном файле. Но известно ли вам, что Visual Basic считает все объекты формы единой группой? В терминологии Visual Basic вся группа объектов в форме называется набором Controls (Средства-управления). Набор Controls (Средства уп- равления) создается автоматически при открытии новой
356 Часть 4. Управление корпоративными данными формы и пополняется при добавлении объектов в форму. Фактически Visual Basic определяет несколько стандартных наборов объектов, кото, рые вы можете использовать при написании программ. В первом разделе урока вы познакомитесь с основными навыками, необходимыми для ра. боты с наборами. Набор представляет собой группу взаимосвязанных объектов. Описание наборов Каждый набор в программе имеет собственное имя, поэтому вы можете ссылаться на него в тексте программы. Например, как вы только что уз- нали, набор, содержащий все объекты формы, называется Controls (Сред- ства управления). Тем не менее, поскольку у вас в программе может быть более одной формы (и, следовательно, более одного набора Controls), вам необходимо включать имя формы в описание наборов Controls (Средства управления) в программах, содержащих более одной формы. Например, для ссылки на набор Controls (Средства управления) формы Forml вы мо- жете использовать следующее имя в тексте вашей программы: Forml.Controls Каждая форма имеет собственный набор Controls (Средства управления). Точка между именем объекта Forml и ключевым словом Controls делает эту запись похожей на запись свойства, но программисты на Visual Basic опи- сывают набор Controls (Средства управления) как объект, содержащийся в объекте Forml. Отношения, или иерархия, между объектами немного похожи на отношения между папками; вы снова увидите такую нотацию при работе с объектами-приложениями в уроке 14. Помимо возможностей работы с объектами и наборами в ваших програм- мах, Visual Basic позволяет вам просматривать вашу систему в поисках других объектов приложений и использовать их в ваших программах. Эту тему мы снова затронем в уроке 14, когда вы познакомитесь с использо- ванием средства Visual Basic Object Browser (Обзор объектов). Ссылка на объект в наборе Вы можете ссылаться на объекты в наборе или на отдельный элемент на- бора несколькими способами. Первый из них - это непосредственно задать объект, указав его имя в операторе присвоения. Например, оператор Forml. Controls! LabeH. Caption = "Служащие"
Урок 11. Работа с наборами элементов и массивами 357 уделяет объект Labell из набора Controls (Средства управления) и уста- яавливает для его свойства Caption (Надпись) значение «Служащие». Вос- клицательный знак (!) используется для привязки объекта Labell к набо- ру Controls (Средства управления). Хотя этот оператор для компилятора иоясет показаться «труднопроизносимым», он дает точное описание иерархии внутри набора. gw можете ссылаться на группу объектов целиком или на отдельный объект в группе. Второй способ адресации объекта в наборе - это указать индексную по- зицию объекта в группе. Visual Basic хранит объекты набора в порядке, обратном порядку их создания, поэтому вы можете использовать «поря- док рождения» объектов для ссылки на индивидуальный объект или же использовать цикл для обработки нескольких объектов. Например, что- бы задать последний созданный в форме объект, вы должны указать ин- декс 0 (нулевой), как в следующем примере: Forml .Controls(O). Caption = "Профессия" Этот оператор устанавливает для свойства Caption (Надпись) последнего объекта формы значение «Профессия». (Объект, предшествующий после- днему объекту, имеет индекс 1, третий с конца объект имеет индекс 2 и т.д.) Использование циклов For Each...Next Хотя вы можете сослаться на индивидуальный элемент набора, полезнее работать с объектами набора, обрабатывая их как группу. В действитель- ности причиной существования наборов является эффективность обра- ботки группы объектов в них. Например, вы можете отобразить, переме- стить, отсортировать, переименовать или изменить размеры для всех объектов в наборе за один раз. Для выполнения таких задач существует специальный цикл For Each... N ext, обрабатывающий объекты набора за одну операцию. Цикл For Each...Next напоминает цикл For...Next, с которым вы познакомились в уроке 7. При использовании цикла For Each...Next для набора Controls (Средства управ- ления) он будет выглядеть следующим образом: For Each Control in Имя Формы.Controls действия над объектом Next Control Циклы For Each...Next предназначены для обработки наборов.
358 Часть 4. Управление корпоративными данными Control здесь представляет особую переменную, представляющую теку, щий объект набора, а Имя Формы является именем формы. Тело цикла используется для обработки отдельных объектов набора. Например, вы можете захотеть изменить свойства Enabled (Включен), Left (Слева), Тор (Сверху), Caption (Надпись) или Visible (Видимость) объектов набора или отобразить в виде списка имена всех объектов. Переменная Control представляет текущий объект в цикле For Each.. .Next. Перемещение набора объектов В следующем упражнении вы используете набор Controls (Средства уп- равления) для перемещения группы с левой части формы в правую за одну операцию. Программа использует цикл For Each... Next для перемеще- ния объектов после щелчка мышью на командной кнопке Переместить объек- ты. Некоторые объекты в наборе иногда требуют специальных действий. В следующем упражнении вы узнаете, как модифицировать программу, чтобы были перемещены все объекты, кроме командной кнопки. Используем цикл For Each...Next для обработки набора Controls (Средства управления) 1. Запустите Visual Basic. Откроется диалоговое окно New Project (Создание проекта). 2. Щелкните на вкладке Existing (Существующие), а затем от- кройте проект Move.vbp в папке \Vb6Sbs\Less11. 3. Выберите форму Move.frm в окне Project (Проект), а затем щел- кните на кнопке View Object (Просмотр объекта). В среде програм- мирования появится форма Работа с наборами (Working With Collections). Набор Controls (Средства управления) содержит все объекты формы
Урок 11. Работа с наборами элементов и массивами 359 Эта форма содержит пять объектов, являющихся частью на- бора Controls (Средства управления). Для объектов были уста- новлены свойства Picture (Рисунок), Name (Имя) и Caption (Над- пись), но вам нужно добавить операторы, перемещающие набор на экране. 4. Дважды щелкните на кнопке Переместить объекты в форме. В окне Code появится процедура прерывания cmdButton_Click. 5. Введите следующие программные операторы: For Each Ctrl In Controls Ctrl.Left = Ctrl.Left + 200 Next Ctrl Каждый раз, когда пользователь щелкает на кнопке Переместить объекты, выполняется цикл For Each... Next для перемещения объек- тов набора Controls (Средства управления) одного за другим на 200 единиц вправо. (Чтобы переместить объекты на 200 единиц влево, вам необходимо вычесть число 200.) Переменная Ctrl соот- ветствует текущему объекту в наборе и содержит те же уста- новленные значения свойств, что и представляемый ей объект. В этом цикле вы изменяете свойство Left (Слева), определяющее позицию объекта относительно левой границы формы. Цикл For Each... Next используется для изменения свойства Left (Слева) для каждого объекта, т.е. перемещения группы объектов. 6. В меню File (Файл) щелкните на команде Save Move.frm As (Со- хранить Move.frm как). Сохраните форму под именем MyMove.frm. 7. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Сохраните проект под именем MyMove.vbp. 8. Закройте окно Code, а затем щелкните на кнопке Start (Пуск) на панели инструментов. Программа начнет работу, и в левой части формы появятся четы- ре значка. Командная кнопка появится в нижней части формы. 9. Щелкните на кнопке Переместить объекты несколько раз. Каждый раз, когда вы щелкаете на кнопке, объекты в форме смещаются вправо. Кнопка Переместить объекты также будет пе- ремещаться вправо, поскольку и она является частью набора Controls (Средства управления).
360 Часть 4. Управление корпоративными данными Кнопка Переместить объект также перемещается после щелчка на ней. 10. Щелкните на кнопке End (Конец) на панели инструментов для завершения работы программы. Перемещать все объекты вместе не обязательно. Visual Basic позволяет вам обрабатывать элементы набора по вашему желанию. В следующем упражнении вы узнаете, как оставить кнопку Переместить объекты на мес- те, перемещая остальные объекты вправо. Использование свойства Тад (Тег) в цикле For Each...Next Если вам требуется обработать один или более элементов набора спосо- бом, отличным от того, каким вы обрабатываете все остальные элементы набора, воспользуйтесь свойством Тад (Тег). Вы устанавливаете свойство Тад (Тег) для тех объектов, которые вы хотите обрабатывать иначе, чем остальные. Ваша программа анализирует значение свойства Тад (Тег) в ходе выполнения цикла For Each...Next; в зависимости от этого значения программа обрабатывает объект как обычно или же по-другому. Свойство Тад (Тег) позволяет вам идентифицировать объекты, требу- ющие особой обработки в ходе выполнения цикла. Например, вы присвоили свойству Тад (Тег) объекта imgBanana слово «Slow» в программе MyMove. Вы можете использовать оператор If...Then, чтобы проанализировать тег и выявить объект imgBanana в ходе выполнения цик- ла, а затем переместить значок с изображением банана на меньшее рас- стояние, чем другие объекты. Совет. Если вы хотите, чтобы несколько видов объектов по-разному тракто- вались в ходе выполнения цикла For Each...Next, то можете использо- вать оператор Elself в структуре с условием If...Then, или же использо- вать структуру с условием Select Case. В следующем упражнении вы установите для свойства Тад (Тег) объекта cmdButton значение «Кнопка», чтобы в ходе выполнения цикла For Each... Next командная кнопка не перемещалась вправо.
Урок 11. Работа с наборами элементов и массивами 361 Используем тег для индивидуальной трактовки объекта в наборе 1. В меню File (Файл) щелкните на команде Save MyMove.frm As (Сохранить MyMove.frm как). Сохраните форму под именем MyTag.frm. Прежде, чем вносить изменения в программу, вы сохраните ее под новым именем, чтобы оставить неизменным оригинальный проект MyMove. 2. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Сохраните проект под именем MyTag.vbp. 3. Щелкните на кнопке Переместить объекты в форме, а затем от- кройте окно Properties (Свойства). 4. Установите для свойства Тад (Тег) объекта cmdButton значе- ние «Кнопка». 5. Дважды щелкните на кнопке Переместить объекты формы. В окне Code появится процедура обработки прерывания cmdButton_Click, как показано на следующем рисунке: JW Project! - Form! (Code) х| Т] |ciick |cmdBirtton Private Sub cmdButton_Click() For Each Ctrl In Controls If Ctrl.Tag О "Кнопка" Then Ctrl.Left = Ctrl.Left + 200 End If Next Ctrl End Suh 6. Измените процедуру обработки прерывания таким образом, как показано ниже. (Третья и пятая строки являются новыми, а для четвертой строки увеличен отступ.) Private Sub cmdButton_Click() For Each Ctrl In Controls If Ctrl.Tag о "Кнопка" Then Ctrl.Left = Ctrl.Left+ 200 End If Next Ctrl End Sub
362 Часть 4. Управление корпоративными данными Оператор If...Then проверяет тег «Кнопка». Новой особенностью цикла For Each...Next является оператор If.. .Then, проверяющий для каждого элемента набора, не содер- жится ли в его свойстве Тад (Тег) значение «Кнопка». Если это значение обнаружено, операция по перемещению данного объекта опускается. Само значение «Кнопка» — это просто сло- во, выбранное для идентификации командной кнопки в про- грамме. С тем же успехом можно было бы использовать значе- ние тега «Не перемещать» или «Оставь на месте». 7. Закройте окно Code, а затем щелкните на кнопке Start (Пуск) ► на панели инструментов. Программа начнет работу, и в форме будут отображены пять объектов. Законченная программа Тад содержится в папке \Vb6Sbs\Less 11. 8. Щелкните на кнопке Переместить объекты семь или восемь раз. После щелчка на кнопке значки в форме смещаются на экране. Кнопка Переместить объекты, однако, остается на своем месте: Свойство Тад (Тег) позволяет по-разному трактовать различные объекты Задание для определенного объекта набора специального спо- соба обработки может быть весьма полезным. В данном случае, использование тега в цикле For Each...Next позволяет улучшить пользовательский интерфейс и сделать взаимодействие с ним более корректным. Вы можете использовать свойство Тад (Тег) и для других видов наборов в Visual Basic.
Урок 11. Работа с наборами элементов и массивами 363 9. Щелкните на кнопке End (Конец) на панели инструментов для завершения работы программы. 10. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов для сохранения изменений в проекте MyTag.vbp. Другие наборы Visual Basic В Visual Basic, помимо набора Controls (Средства управления), поддержи- ваются и другие наборы. Чтобы получить о них более подробную инфор- мацию, обратитесь к теме collections в справочной системе Visual Basic. Набор Описание Набор Forms (Формы) Набор всех загруженных форм в программе. С помощью цикла For Each... Next вы можете устанав- ливать характеристики одной или нескольких форм, а также одного или более объектов, содержа- щихся в этих формах. Набор Printers (Принтеры) Набор всех доступных принтеров в вашей системе. С помощью средства For Each... Next и команды Additem вы можете отобразить имена всех доступных прин- теров в списке и дать возможность пользователю выбрать принтер для вывода на печать. Набор Database (База данных) Различные наборы, связанные с доступом к данным и управлением базой данных. Особенно полезными наборами являются Columns (Столбцы), Containers (Блоки), Indexes (Индексы) и Databases (Базы данных). Более подробно о базах данных вы узнаете в следу- ющем уроке. Набор Visual Basic для приложений Если в будущем вам придется составлять макросы для приложений Microsoft Office, то вы обнаружите, что наборы играют большую роль в объектном моделировании, используемом в Microsoft Word, Excel, Access, PowerPoint и некоторых других приложениях, которые поддерживают язык программирования Visual Basic for Applications. В Microsoft Word, например, все открытые в текстовом процессоре документы хранятся в наборе Documents (Документы), а абзацы - в наборе Paragraphs (Абзацы). Вы можете управлять этими наборами с помощью цикла For...Each точно так ’Не, как вы это делали в предыдущем упражнении.
364 Часть 4, Управление корпоративными данными К примеру, приведенный ниже код представляет собой часть макроса, ко- торый проверяет все открытые документы в наборе Documents (Документы) в поисках файла MyLetter.doc. Если файл с таким именем найден, макрос де- лает его активным документом с помощью метода Activate. Если файл не най- ден в наборе, макрос загружает его из папки Samples на диске С:. Dim aDoc, docFound, docLocation DocLocation = "c:\samples\myletter.doc” For Each aDoc In Documents If lnStr(1, aDoc.Name, “myletter.doc", 1) Then aDoc. Activate Exit For Else DocFound = False End If Next aDoc If docFound = False Then Documents.Open FileName:=docLocation Важно. Я включил этот пример макроса для Word 97, чтобы показать вам, как пользоваться наборами в Visual Basic for Applications, но исход- ный код был разработан для Microsoft Word, а не для компилятора Visual Basic. Чтобы использовать его, вам придется открыть Microsoft Word 97 и ввести код в специальном редакторе макросов для Word. (Если вы находитесь не в редакторе Word, то набор Documents (Доку- менты) компилятор проигнорирует.) Макрос начинается с объявления трех переменных типа вариант. Пере- менная aDoc представляет текущий элемент набора в цикле For... Each. Пе- ременной docFound будет присвоено значение булевой переменной False, если документ не найден в наборе Documents. В переменной docLocation бу- дет храниться путь к файлу Му Letter. d о с. (Эта процедура удостоверяет, что файл MyLetter.doc находится в гипотетической папке Samples на диске С.) Цикл For... Each проверяет все документы, находящиеся в наборе Documents. Если функция InStr обнаруживает файл MyLetter.doc (она проверяет, содер- жится ли одна строка в другой), то файл делается активным документом. Если файл не обнаружен, макрос открывает его с использованием метода Open (Открыть) над объектом типа Document. Обратите внимание на оператор Exit For, который используется для выхо- да из цикла For... Each после того, как файл был найден и сделан активным- Exit For - это специальный программный оператор, который вы можете
Урок 11. Работа с наборами элементов и массивами 365 использовать для того, чтобы выйти из циклов For... Next или For... Each, когда продолжение их выполнения может вызвать неожиданные резуль- таты. В нашем примере поиск после того, как файл найден, просто бес- смысленен, и использование этого оператора позволяет завершить цикл как можно раньше. работа с массивами переменных В уроке 7 вы использовали метод «вырезать-и-вставить» для создания группы элементов управления, состоящей из нескольких изображений, связанных с одним и тем же объектом. В этом наборе каждый элемент группы ссылался на одинаковое имя объекта, поэтому у вас была возмож- ность обрабатывать всю группу изображений с помощью цикла For...Next. В этом разделе вы узнаете, как использовать подобные приемы для рабо- ты с массивами. Подобно наборам элементов или средств управления, массивы переменных (называемые просто массивами) позволяют вам ссы- латься на всю группу значений с указанием одного имени, а затем обра- батывать значения индивидуально или как группу с помощью цикла For...Next или Do. Массив представляет собой набор значений, связанных с одним именем. Массивы полезны при обработке большого количества данных, когда ис- пользование традиционных переменных неэффективно и непрактично. Например, представим себе таблицу счета для бейсбольного матча, состо- ящего из девяти иннингов. Чтобы хранить счет в каждом иннинге игры, вам понадобилось бы создать две группы из 9 переменных (всего 18 перемен- ных) в программе. Вы, наверное, присвоили бы им имена, типа Inningl HomeTeam, Inning 1AwayTeam и т.д. Индивидуальная работа с каждой пе- ременной потребовала бы от вас больших затрат времени, к тому же это сильно усложнило бы вашу программу. К счастью, Visual Basic позволяет организовывать подобные группы переменных в массивы, имеющие общее имя и индексную адресацию к каждому элементу. Например, вы можете создать двумерный массив (2 на 9) с именем Scoreboard, в котором будет хра- ниться счет игры для всех девяти иннингов. Посмотрим, как это сделать. Создание массива Прежде, чем вы сможете использовать массив, его необходимо объявить. Вы создаете, или объявляете, массивы в вашей программе точно так же, как вы объявляете переменные, а место, в котором вы объявляете мас- сив, определяет в свою очередь, в каких местах программы вы можете
366 Часть 4. Управление корпоративными данными использовать данный массив. Если массив объявлен локальным, его можно использовать только в той процедуре, в которой он объявлен. Если мас- сив объявлен как глобальный в стандартном модуле, он может быть ис- пользован в любом месте в программе. При объявлении массива вы дол- жны включить в оператор объявления следующую информацию: Информация, помещаемая Описание массива в оператор объявления Имя массива Имя, которое вы будете использовать для пред- ставления массива в программе. В общем слу- чае для имен массивов применяются те же пра- вила, что и для имен переменных. (См. урок 5.) Тип данных Тип данных, который будет использоваться для элементов массива. В большинстве случаев все переменные в массиве имеют один и тот же тип данных. Вы можете задать один из основных ти- пов данных. Если вы пока точно не знаете, ка- кой тип данных будет использоваться в масси- ве, или если в массиве будут храниться данные различных типов, вы можете задать тип Variant. Размерность Количество измерений вашего массива. Боль- шинство массивов являются одномерными (список значения) или двумерными (таблица значений), но при необходимости работы со сложными математическими моделями, напри- мер, трехмерными фигурами, вы можете задать и большее количество измерений массива. Количество элементов Количество элементов, которые будут содер- жаться в массиве. Номера элементов в вашем массиве соответствуют их индексам. По умол- чанию первый элемент массива имеет индекс 0 (нуль), как это имеет место и для наборов эле- ментов управления. Примечание. Массивы, которые содержат строго определенное количество элемен- тов, называются массивами с фиксированной границей. Массивы, ко- торые содержат переменное количество элементов (массивы, разме- ры которых могут увеличиваться в процессе выполнения программы), называются динамическими.
Урок 11. Работа с наборами элементов и массивами 367 — — Объявление массивов с фиксированными границами Основной синтаксис для объявления глобальных массивов с фиксирован- ными границами следующий: Public Имя Массива (Dim 1 Elements, Dim2Elements,...) As Тип Данных Важными являются следующие аргументы: Ключевое слово Public создает массив для общего использования, или гло- бальный массив. Public является ключевым словом для создания глобальной перемен- ной. Имя Массива представляет собой имя переменной типа массив. DimlElements представляет собой число элементов массива в про- странстве его первой размерности. Dim2Elements представляет собой число элементов массива в про- странстве его второй размерности (могут быть включены и дополни- тельные размерности). Тип Данных заменяется на ключевое слово, соответствующее типу данных элементов массива. Поскольку массив является общедоступным, его объявление необходимо сделать в стандартном модуле проекта (вместе с другими общедоступ- ными, или глобальными, переменными). Примечание. Чтобы объявить массив как локальный для процедуры обработки пре- рывания, замените ключевое слово Public на ключевое слово Static и сделайте объявление в процедуре обработки прерывания. Локальные массивы могут использоваться только внутри той процедуры, в кото- рой они были объявлены. Например, чтобы объявить одномерный массив строковых переменных с именем Employees, состоящий из 10 имен сотрудников, вам необходимо вве- сти в стандартном модуле следующий оператор: Public Employees(9) As String При создании массива Visual Basic выделяет под него место в памяти. На СлеДующем рисунке представлена условно структура массива. Элемен- ты массива из 10 составляющих нумеруются числами от 0 до 9, а не от 1 До 10, поскольку для первого элемента массива используется индекс 0,
368 Часть 4, Управление корпоративными данными если только вы не использовали оператор Option Base. (См. врезку «Опера- тор Option Base» далее в этом уроке.) По умолчанию первый элемент в массиве имеет индекс (порядковый но- мер) 0. Чтобы объявить двумерный массив с именем Scoreboard, состоявший из двух строк и девяти столбцов с данными типа вариант, вам необходимо ввести в стандартном модуле следующий оператор: Public Scoreboard(1, 8) As Variant При объявлении двумерного массива Visual Basic выделяет под него мес- то в памяти. Далее в программе вы можете пользоваться массивом, как если бы он представлял собой таблицу значений, представленную на сле- дующем рисунке. (В данном случае элементы массива нумеруются чис- лами от 0 до Г и от 0 до 8.) Двумерные массивы требуют два индекса. Столбцы 01 2345678 Строки 1 2 ’ Работа с элементами массива После объявления массива с указанием ключевого слова State или Public вы готовы к использованию его в вашей программе. Чтобы сослаться на
Урок 11, Работа с наборами элементов и массивами 369 элемент массива, вам необходимо указать имя массива и индекс элемен- та в скобках. Индекс должен иметь целое значение; например быть про- стым числом или переменной типа integer (целая). (В качестве индекса часто используется счетчик цикла For...Next.) Следующий оператор при- сваивает значение «Луиза» элементу 5 из массива Employees, описанного выше: Employees(5) = “Луиза" Массивы всегда хранятся в системной памяти, или RAM, в ходе выпол- нения программы. Результат выполнения этого оператора для нашего массива Em ployees мож- но представить следующим образом: Аналогичным образом, следующий оператор присваивает значение 4 эле- менту в строке 0, столбце 2 (первое значение для третьего иннинга) мас- сива Scoreboard, описанного ранее: Scoreboard(0, 2) = 4 Результат выполнения этого оператора для нашего массива Scoreboard можно представить следующим образом: Столбцы 01 2345678 4 Строки 1 2 Вы можете использовать индексы указанным выше способом для при- своения значений или выборки любого элемента массива.
370 Часть 4. Управление корпоративными данными Оператор Option Base Если вам хотелось бы сделать вашу программу более удобной для вос- приятия, заменив индекс первого элемента каждого массива на 1 вме- сто 0, поместите в стандартный модуль следующий оператор Option Base: Option Base 1 Этот оператор связывает первый элемент - или базу - всех массивов в программе с номером 1. В следующей программе вы используете для этой цели оператор Option Base. Создание массива с фиксированными границами для хранения значений температуры В следующем упражнении вы используете одномерный глобальный мас- сив с именем Temperatures для записи наибольших в течение дня значений температур в ходе семидневной недели. Программа демонстрирует, как вы можете использовать массив и обрабатывать набор связанных значений. Значения температуры присваиваются элементам массива с помощью функции InputBox в цикле For...Next. Счетчик повторений циклов использу- ется для ссылки на каждый элемент массива. Содержимое массива затем отображается в форме с помощью цикла For... Next и команды Print, после чего подсчитывается и отображается среднее значение температуры. В программе FixArray используется массив для хранения значений тем- ператур в течение недели. Использование массива с фиксированными границами 1. В меню File (Файл) щелкните на команде New Project (Создать проект), затем щелкните на кнопке ОК. 2. Используйте кнопку управления CommandButton (Командная кнопка) для создания трех командных кнопок в нижней части формы. 3. Установите следующие свойства для командных кнопок и формы.
Урок 11. Работа с наборами элементов и массивами 371 Объект Свойство Установленное значение Commandl Caption (Надпись) Name (Имя) Ввод температуры cmdEnterTemps Command2 Caption (Надпись) Name (Имя) Показ температуры cmdDisplayTemps Commands Caption (Надпись) Name (Имя) Выход cmdQuit Forml Caption (Надпись) AutoRedraw (Автоматическая перерисовка) Значения температуры True (Истина) Внимание! Всегда устанавливайте для свойства формы AutoRedraw (Автоматичес- кая перерисовка) значение True (Истина), если используете команду Print для отображения информации в форме. При этом Visual Basic будет перерисовывать (обновлять) экран, если окно формы оказыва- ется закрытым другим окном. 4. Ваша форма должна выглядеть подобно представленной на рисунке: 5. В меню Project (Проект) щелкните на команде Add Module (До- бавить модуль), затем щелкните на Open (Открыть) для созда- ния стандартного модуля и объявления в нем массива. В окне Code появится стандартный модуль.
372 Часть 4. Управление корпоративными данными 6. Введите в стандартный модуль следующие операторы: Option Base 1 Public Temperatures(7) As Variant Оператор Option Base изменяет индекс первого элемента масси- ва с 0 на 1 для всех массивов в программе. Второй оператор со- здает общедоступный массив с именем Temperatures (с типом Variant (Вариант)), состоящий из семи элементов. Поскольку массив объявлен как общедоступный, к нему можно будет об- ратиться из любой точки программы. Оператор Option Base устанавливает значение 1 для начального индекса массива. 7. Закройте окно Code со стандартным модулем, затем дважды щелкните на кнопке Ввод температуры. В окне Code появится процедура обработки прерывания cmdEnterTemps_Click. 8. Введите следующие программные операторы, предлагающие пользователю ввести значения температуры и загружающие эти входные значения в массив: Cis Prompt$ = "Введите наибольшую температуру." For i% = 1 То 7 Title$ = "День" & i% Temperatures(i%) = lnputBox(Prompt$, TitleS) Next i% Примечание. Команда Cis в начале процедуры очищает форму от информации, вы- веденной на экран предшествующими командами Print, так что вы мо- жете вводить более одного набора температур. В цикле For... Next переменная счетчика циклов i% используется в качестве индекса для загрузки значений температуры в эле- менты массива от 1 до 7. Входные данные получаются с помо- щью функции InputBox, использующей переменные Prompts и Title$ в качестве аргументов. Переменная счетчика циклов i% используется в качестве индекса мас- сива.
Урок 11. Работа с наборами элементов и массивами 373 9. Откройте список Object (Объект) в окне Code, а затем щелкни- те на объекте cmdDisplayTemps. Введите в процедуру обработки прерывания cmdDisplayTemps_Click следующие операторы: Print "Наибольшее значение температуры за неделю:" Print For i% = 1 То 7 Print "Деньi%, Temperatures(i%) Total! = Total! + Temperatu res(i%) Next i% Print Print "Среднее значение температуры:Total! 17 Эта процедура обработки прерывания использует команду Print для отображения информации, хранящейся в массиве Temperatures в форме. Она использует цикл For...Next для выбор- ки элементов массива и вычисляет сумму значений темпера- тур с помощью оператора Total! = Total! + Temperatures(i%) Последняя строка процедуры отображает среднее значение наивысших температур за неделю, получаемое путем деления суммы на количество дней. Законченный проект FixArray.vbp содержится в папке \Vb6Sbs\Less11. 10. Откройте список Object (Объект) в окне Code, а затем щелк- ните на объекте cmdQuit. Введите следующий оператор в проце- дуре обработки прерываний cmdQuit_Click: End 11. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов для сохранения стандартного модуля, фор- мы и проекта на диске. Выберите папку \Vb6Sbs\Less11 и сохра- ните каждый файл, используя имя MyFixArray. 12. Щелкните на кнопке Start (Пуск) для запуска программы. 13. Щелкните на кнопке Ввод температуры, а затем введите семь различных значений температур, запрашиваемых функцией InputBox. Диалоговое окно функции InputBox должно выглядеть подобно приведенному на следующем рисунке.
374 Часть 4. Управление корпоративными данными 14. Введя значения температуры, щелкните на кнопке Показ тем- пературы. Visual Basic использует команду Print для отображения каждо- го значения в форме и выведет среднее значение температуры внизу. Ваш экран должен выглядеть подобно следующему: День 1 72 День 2 74 День 3 7В День 4 82 День 5 77 'Дейь'8 $8 День 7 89 Среднее значение температуры 74,28571 Ввод температуры | Показ температуры ]| 15. Щелкните на кнопке Выход для завершения работы програм- мы. Создание динамических массивов Как вы убедились, массивы весьма удобны для работы со списками чи- сел, особенно если вы обрабатываете их с помощью цикла For...Next. Но как поступить, если вы не знаете до запуска программы, какого размера массив вам понадобится? К примеру, если вам нужно, чтобы пользова- тель сам выбрал количество введенных значений температуры? Размер динамических массивов определяется в ходе выполнения про- граммы.
Урок 11. Работа с наборами элементов и массивами 375 Visual Basic позволяет эффективно решить эту проблему с помощью ди- намических массивов. Размер динамических массивов определяется в процессе выполнения программы либо при задании этого размера пользо- вателем, либо определяется логически самой программой в зависимости от заданных условий. Задание размера динамического массива произво- дится в несколько этапов, но поскольку этот размер не может быть точно определен до начала выполнения программы, вы должны предваритель- но «зарезервировать» под него место на начальном этапе. Для создания динамического массива выполните следующие основные действия: 1. Задайте имя и тип массива в программе на начальном этапе разработки, опустив количество элементов в массиве. Напри- мер, чтобы создать общедоступный динамический массив с именем Temperatures, введите оператор Public Temperatures() as Variant 2. Добавьте фрагмент программы для определения количества элементов, которые будут содержаться в массиве в ходе вы- полнения программы. Вы можете выдать запрос пользователю с использованием функции InputBox, либо вычислить размер необходимого пространства с помощью свойств или иных ло- гических операций. Например, следующий оператор запраши- вает размер массива у пользователя и присваивает это значе- ние переменной Days: Days = InputBoxf'CKonько дней?'1, "Создание массива") 3. Используйте переменную в операторе ReDim для задания раз- мера массива. Например, следующий оператор устанавливает размер массива Temperatures в ходе выполнения программы, ис- пользуя переменную Days: ReDim Temperatures(Days) 4. Используйте это число в качестве верхней границы в цикле For...Next для обработки элементов массива, если необходимо. Например, в следующем цикле For... Next используется перемен- ная Days в качестве верхней границы: For i% = 1 То Days Tem peratures(i%) = lnputBox(Prom pt$, Title$) Next i% В следующем упражнении вы используете эти четыре действия для вне- сения изменений в программу MyFixArray, чтобы она могла обрабатывать любое количество значений температуры с помощью динамического мас- сива.
376 Часть 4. Управление корпоративными данными Использование динамического массива для хранения значений температур 1. Откройте окно Project (Проект) и щелкните на MyFixArray.frm. Вы сохраните каждый из файлов проекта MyFixArray под но- вым именем, чтобы предохранить оригиналы от внесения в них изменений. 2. В меню File (Файл) щелкните на команде Save MyFixArray.frm As (Сохранить MyFixArray.frm как). Введите MyDynArray.frm в диалоговом окне Save File As (Сохранить файл как), затем щелк- ните на кнопке Save (Сохранить). 3. Щелкните на модуле MyFixArray.bas в окне Project (Проект). Да- лее, в меню File (Файл) щелкните на команде Save MyFixArray.bas As (Сохранить MyFixArray.bas как). Затем введите MyDynArray.bas в диалоговом окне Save File As (Сохранить файл как), а затем щелкните на кнопке Save (Сохранить). 4. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как), а затем введите MyDynArray.vbp. Щелкните на кнопке Save (Сохранить) по завершении. __ t 5. Щелкните на Modulel а затем щелкните на кнопке View Code ~rJ (Просмотр программы), чтобы открыть окно Code. 6. Удалите число 7 из оператора объявления массива, чтобы объявить массив Temperatures как динамический. Оператор бу- дет выглядеть следующим образом: Public Temperatures() As Variant 7. Введите в стандартном модуле следующее объявление гло- бальной переменной: Public Days As Integer Глобальная переменная целого типа Days будет использовать- ся для хранения введенных пользователем данных, определя- ющих размер динамического массива в процессе выполнения программы. __ 8. Закройте стандартный модуль. Щелкните на Forml в окне Project (Проект), щелкните на кнопке View Object (Просмотр объек- та), а затем дважды щелкните на кнопке Ввод температуры. Мо- дифицируйте процедуру прерывания cmdEnterTemps_Click, что- бы она выглядела следующим образом. (Изменяемые элементы выделены полужирным шрифтом.)
Урок 11, Работа с наборами элементов и массивами 377 Cis Days = 1при(Вох("0колько дней?", "Создание массива") If Days > 0 Then ReDim Temperatures(Days) Prompt$ = "Введите наибольшую температуру." For i% = 1 To Days Title$ = "День" & i% Temperatures(i%) = lnputBox(Prompt$, TitleS) Next i% Вторая и третья строки предлагают пользователю ввести ко- личество значений температуры, которое необходимо сохра- нить. Это число будет в дальнейшем использоваться в качестве задания размера динамического массива. Оператор If.. .Then ис- пользуется для проверки условия, что количество дней боль- ше 0. (Объявление массива с размером, равным 0 или меньшим 0, приведет к ошибке выполнения программы.) Переменная D ays также используется в качестве верхней границы для цикла For... Next. 9. Откройте список Object (Объект), а затем щелкните на объек- те cmdDisplayTemps. Модифицируйте процедуру обработки пре- рывания cmdDisplayTemps_Click, чтобы она выглядела следующим образом. (Изменяемые элементы выделены полужирным шрифтом.) Print "Наибольшее значение температуры:" Print For 1% = 1 То Days Print "Деньi%, Temperatures(i%) Total! = Total! + Temperatures(i%) Next I % Print Print "Среднее значение температуры:Total! I Days Переменная Days заменила в процедуре обработки прерывания число 7. 10. Закройте окно Code, затем щелкните на кнопке Save Project (Сохранить проект) для сохранения внесенных изменений. 11. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. 12. Щелкните на кнопке Ввод температуры, а затем введите 5 в ответ на предложение ввести количество дней, значения тем- ператур для которых вы хотели бы записать.
378 Часть 4. Управление корпоративными данными 13. Введите пять значений температур в ответ на запрос. 14. Закончив ввод значений температур, щелкните на кнопке Показать температуру. Законченная программа DynArray.vbp содержится в папке \Vb6Sbs\Less11. Программа отобразит пять значений температур в форме и выведет их среднее значение. Ваш экран будет выглядеть по- добно представленному на следующем рисунке: 15. Щелкните на кнопке End (Конец) на панели инструментов для завершения работы программы. Поздравляю! Вы научились хранить неограниченное количество значе- ний с помощью массива, а также обрабатывать их с помощью цикла For...Next. Эти навыки будут весьма полезными для вас при необходимос- ти хранения больших объемов информации в памяти в процессе работы программы. В следующем уроке вы узнаете, как сохранять информацию в виде текстовых файлов и баз данных. Шаг вперед: использование многомерных массивов Помимо одномерных массивов, где информация хранится в виде списков, Visual Basic допускает использование многомерных массивов, в которых информация хранится в виде одной или нескольких таблиц. На первых порах работа с многомерными массивами может вам показаться доволь- но сложной, однако в ряде случаев вы значительно сэкономите время и силы, особенно при работе с большими таблицами данных.
Урок 11. Работа с наборами элементов и массивами 379 g многомерных массивах информация представляется в виде одной или более таблиц данных. В следующем упражнении вы используете двумерный массив с именем Scoreboard для записи счета в ходе воображаемого бейсбольного матча между командами «Моряки Сиэтла» и «Янки Нью-Йорка». Вы будете ис- пользовать массив 2-на-9, уже рассмотренный нами ранее. Освоив рабо- ту с двумерными массивами, вы можете затем поэкспериментировать с трехмерными или четырехмерными массивами, что будет для вас непло- хой тренировкой. (Эти абстрактные массивы часто используются в ком- пьютерной графике и различных научных приложениях.) Создание таблицы счета бейсбольного матча с помощью двумерного массива Я 1. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов. 2. Откройте проект Baseball,vbp из папки\Vb6Sbs\Less11. Програм- ма будет загружена, а файлы проекта появятся в окне Project (Проект). 3. Щелкните на форме Baseball.frm, а затем щелкните на кнопке View Object (Просмотр объекта). Появится форма Scoreboard, пред- ставленная ниже: й Scoreboard | □) Х| Табло результатов по бейсболу Янки с Морякаг 1и Явки Морят I '< > 1 иннинг 1 Янг.н | Моряки Следующий | . Выход j В форме Scoreboard имеются два текстовых поля и две команд- ные кнопки для отображения счета в игре из девяти иннингов. Команда Моряки является хозяином поля, а команда Янки — гостем. При желании вы можете использовать имена ваших
380 Часть 4. Управление корпоративными данными ► любимых команд. Информация отображается в таблице с по- мощью команды Print, а данные хранятся программой в виде двумерного общедоступного массива с именем Scoreboard. 4. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа начнет работу, а в поле Янки в нижней части формы появится мигающий курсор ввода. Метка над текстовым полем указывает, что программа готова к записи счета первого иннинга игры. Вы создадите счет в во- ображаемой игре. 5. Введите 0, затем нажмите клавишу | Tab |. Курсор перейдет в текстовое поле Моряки. 6. Введите 0, затем щелкните на кнопке Следующий. Счет 0-0 будет записан в таблицу счета в форме. 7. Продолжите ввод счета иннингов бейсбольного матча для всех девяти иннингов. При желании вы можете щелкнуть на кнопке Следующий более одного раза. В этом случае данный счет будет записан для не- скольких иннингов. | Scoreboatd I «iOjio регулы .чтон по Сейсоопу Янки с Моряками Моряки !':» *J иннин! .1 Янки: |о Моряки £> 1 2 3 4 5 6 7 8 9 Финал 002002410 9 000101202 6 По завершении ваш экран должен выглядеть подобно представ- ленному ниже. В данном случае в таблице отображен счет пер- вой игры в серии матчей американской лиги в 1995 г., когда ко- манда Нью-Йорка победила команду Сиэтла (у «Моряков» не ладилось с подачей).
Урок 11. Работа с наборами элементов и массивами 381 8. Щелкните на кнопке Выход для выхода из программы. Теперь взглянем на текст программы и посмотрим, как создается и ис- пользуется массив Scoreboard. 9. Щелкните на стандартном модуле Baseball.bas в окне Project (Проект), а затем щелкните на кнопке View Code (Просмотр про- граммы). Появится окно Code, содержащее раздел объявления переменных в стандартном модуле и начало процедуры AddUpScores, как показано на следующем рисунке: Scoreboard является общедоступным двумерным массивом Основными заслуживающими внимания компонентами здесь являются: оператор Option Base, оператор объявления общедос- тупного двумерного массива (2x9) с именем Scoreboard, объяв- ление общедоступной переменной с именем Inning, и процедура общего назначения с именем AddUpScores. Массив Scoreboard объявлен в виде таблицы значений в памяти, в которой строки соответствуют названиям команд, а столбцы - девяти иннин- гам игры. Подобная структура похожа на таблицу счета, ис- пользуемую при записи протокола игры. Переменная Inning ис- пользуется для ссылки на значения в столбцах (номер иннинга) массива.
382 Часть 4. Управление корпоративными данными Стандартный модуль может содержать общедоступные массивы, пе- ременные и процедуры. 10. Рассмотрите более внимательно текст процедуры AddUpScores. Процедура AddUpScores используется для суммирования счета по иннингам и его отображения. Поскольку процедура объяв- лена в стандартном модуле как общедоступная, она может быть вызвана из любой точки в программе. 11. Теперь закройте стандартный модуль, а затем дважды щел- кните на кнопке Следующий в форме Baseball.frm. Процедура обработки прерывания, ассоциированная с данной кнопкой, записывает значения счета из полей ввода для обеих команд в массив Scoreboard и отображает таблицу счета в фор- ме. При ссылке на элемент массива Scoreboard требуются два индекса: один для указания на строку, а второй для указания на столбец. При отображении информации в таблице счета тре- буется значительная осторожность при помещении курсора в требуемую позицию х, у. Свойства Current X и Current Y опреде- ляют координаты курсора в форме и требуют представления значений в экранных единицах измерения. Поскольку один дюйм состоит из 1440 единиц, вы можете с достаточной точно- стью установить курсор в любом месте формы. Свойства Current X и Current Y определяют положение курсора в таблице отображения счета. 12. Прокрутите вниз окно Code с процедурой обработки преры- вания Form_Load. Процедура обработки прерывания Form_Load инициализирует для переменной Inning значение 1 и отображает заголовок таб- лицы счета. До использования команды Print требуется выпол- нить команду Show. Обычно команда Print используется для ото- бражения информации самостоятельно, но поскольку форма еще не загружена полностью, в процессе загрузки формы (пре- рывание Form_Load) для вывода данных требуется использова- ние команды Show. В процессе загрузки формы для вывода данных необходимо использовать команду Show. 13. Изучите программу Бейсбол (Baseball) - может быть, что-то оттуда пригодится вам в дальнейшем для ваших собственных
Урок 11. Работа с наборами элементов и массивами 383 программ, - затем, при желании, снова запустите программу. Закончив работу, можете перейти к следующему уроку. Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 12. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке No (Нет). Краткое содержание урока Чтобы Сделайте следующее Обработать объекты в наборе Используйте цикл For Each...Next для адресации к каждому элементу набора, например: For Each Ctrl In Controls Ctrl.Visible = False Next Ctrl Переместить объек- ты набора Controls (Средства управле- ния) с левой части эк- рана в правую Модифицируйте свойство Control.Left для каждого из объектов набора с помощью цикла For Each.. .Next, например: For Each Ctrl In Controls Ctrl.Left = Ctrl.Left + 200 Next Ctrl Задать особую трак- товку для объекта в наборе Установите значение для свойства Tag (Тег), что- бы распознать данный объект, а затем используй- те цикл For Each... Next для проверки этого значения, например: For Each Ctrl In Controls If Ctrl.Tag о “Кнопка" Then Ctrl.Left = Ctrl.Left + 200 End If Next Ctrl Создать общедоступ- ный массив Задайте размер массива с указанием ключевого слова Public в стандартном модуле, например: Public Employees(9) As String
384 Часть 4. Управление корпоративными данными Чтобы Сделайте следующее Создать локальный массив Задайте размер массива с указанием ключевого сло- ва Static в процедуре обработки прерывания, напри- мер: Static Employees(9) As String Присвоить значе- ние элементу мас- сива Укажите имя массива, индекс элемента массива и присваиваемое ему значение, например: Employees (5) = "Луиза" Установить базовое значение индекса для массива Введите в стандартный модуль оператор Option Base, например: Option Base 1 Очистить экран от информации, выве- денной командой Print Используйте команду Cis. Создать динами- ческий массив Задайте имя и тип массива в процессе разработки программы, но не указывайте количество элементов. В процессе выполнения программы задайте размер массива с помощью оператора ReDim, например: ReDim Temperatures(Days) Обработать эле- менты в массиве Примените цикл For...Next с использованием пере- менной счетчика циклов для адресации каждого эле- мента массива, например: For i% = 1 То 7 Total! = Total! + Temperatures(i%) Next i% Установить курсор в определенную по- зицию в форме (для команды Print и дру- гих команд) Установите значения для свойств Current X и Current Y формы. Свойства Current X и Current Y представляют координаты X, У курсора в экранных единицах.
урок» & & К » Работа : с текстовыми $ : файлами • и строками Урок и рассчитан ж на к 40 минут Вы научитесь: отображать текстовые файлы с помощью объекта типа «текстовое поле»; сохранять записки и заметки в виде текстового файла; работать с текстовыми строками; шифровать текстовые файлы. В этом уроке вы узнаете, как работать с информацией, пред- ставленной в виде текстовых файлов. Вы узнаете, как от- “ крывать текстовый файл и отображать его содержимое с н помощью объекта типа «текстовое поле», а также как созда- " вать новые файлы на диске. Вы научитесь работать с тек- st стовыми строками: сортировать их, извлекать заданные сим- волы, шифровать.
386 Часть 4. Управление корпоративными данными Отображение текстовых файлов с помощью объекта типа «текстовое поле» Простейший способ отобразить текстовый файл в программе — это ис- пользовать объект типа текстовое поле. Вы можете создать текстовое поле любого размера, а если содержимое текстового файла столь объем- но, что не помещается в текстовом поле целиком, вы можете добавить к текстовому полю полосы прокрутки, чтобы пользователь мог просмотреть весь файл, прокручивая содержимое текстового поля. Чтобы загрузить содержимое текстового файла в текстовое поле, вам потребуется исполь- зовать три оператора и одну функцию Visual Basic. В приведенной ниже таблице содержатся ключевые слова, которые будут использованы в пер- вом упражнении этого урока. Ключевое слово Описание Open Открывает текстовый файл для чтения или записи. Line Input Считывает строку из текстового файла. EOF Проверяет достижение конца файла. Close Закрывает текстовый файл. Открытие текстового файла для чтения Текстовый файл содержит символы текста. Текстовый файл состоит из одной или нескольких строк с цифрами, сло- вами или символами. Текстовые файлы отличаются от файлов докумен- тов, которые содержат элементы форматирования, и от исполняемых файлов с инструкциями для операционной системы. Типовые текстовые файлы в вашей системе идентифицируются MicrosoftWindows Explorer (Про- водник Microsoft Windows) как «Text documents» («Текстовые докумен- ты») и могут иметь расширения .txt, .ini, .log, .inf, .dat или .bat. Поскольку текстовые файлы содержат только распознаваемые символы, вы можете легко отобразить их с помощью объекта типа текстовое поле. Чтобы пользователь мог указать, какой текстовый файл необходимо от- крыть, программа выдает ему в диалоговом окне запрос на выбор пути к файлу. Объекты типа диалоговое окно поддерживают команду ShowOpen, отображающую диалоговое окно Open (Открытие) на экране. Путь к файлу, указанный пользователем в диалоговом окне, возвращается в программу в виде значения свойства FileName (Имя файла). Это имя вы можете в даль- нейшем использовать для открытия файла. Стандартный объект типа ди- алоговое окно не открывает файл, а лишь возвращает имя пути к файлу.
Урок 12. Работа стекстовыми файлами и строками 387 Стандартный объект типа диалоговое окно отображает стандарт- ное диалоговое окно Open (Открытие). Оператор Open Получая от пользователя путь к файлу, вы открываете файл с помощью оператора Орел. Синтаксис оператора Орел следующий: Open путь For mode As #filenumber Важными являются следующие аргументы: путь представляет корректное для Microsoft Windows указание пути к файлу; mode представляет ключевое слово, указывающее на способ (режим) использования открываемого файла. (В этом уроке вы будете исполь- зовать режимы Input и Output.) filenumber представляет целое число от1 до 255. Номер файла filenumber будет ассоциироваться с данным файлом в тече- нии всего времени, пока он будет открыт. Вы можете использовать этот номер файла в тексте вашей программы, если вам потребуется ссылка на данный открытый файл. Номера файлов не несут никакой смысловой на- грузки; Visual Basic использует их только для идентификации различ- ных файлов, открываемых в вашей программе. Типовой оператор Open, используемый для объекта типа диалоговое окно, выглядит следующим образом: Open CommonDialogl.FiieName For Input As #1 Здесь свойство CommonDialogl.FiieName представляет имя пути к файлу, ключевое слово Input - режим использования файла, а 1 - номер файла. Примечание. Текстовые файлы, открываемые таким образом, называются файла- ми с последовательным доступом, поскольку доступ к их содержи- мому может осуществляться только в последовательном порядке. В отличии от текстовых файлов, доступ к информации в базе данных осуществляется в произвольном порядке. Базы данных рассмотрены в уроке 13. В следующем упражнении демонстрируется, как вы можете использо- вать стандартный объект типа диалоговое окно и оператор Open для от- крытия текстового файла. В упражнении также показано, как использо-
388 Часть 4. Управление корпоративными данными вать ключевые слова Line Input и EOF для отображения содержимого тек- стового файла в текстовом поле и как использовать ключевое слово Close для закрытия файла. Запустим программу просмотра текстового файла 1. Запустите Visual Basic, если он еще не был запущен. 2. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов. 3. Выберите, а затем дважды щелкните на имени файла ShowText. Программа ShowText будет загружена. Программа ShowText содержится в nanKe\Vb6Sbs\Less12. 4. Если форма не видима, выделите форму ShowText в окне Project (Проект), а затем щелкните на кнопке View Object (Просмотр объекта). Появится форма ShowText, какпоказано на следующем рисунке: и. Просмотр тек сто Файл Форма содержит большое текстовое поле с полосами прокрут- ки. В ней также содержится стандартный объект типа диало- говое окно, метка с инструкцией пользователю и меню File (Файл), содержащее команды Open (Открыть), Close (Закрыть) и Exit (Выход). Для формы установлены свойства, представлен-
Урок 12. Работа стекстовыми файлами и строками 389 ные в следующей таблице. (Обратите внимание на свойства для текстового поля.) Объект Свойство Установленное значение TxtFile Enabled (Включен) Multiline (Несколько строк) Name (Имя) ScrollBars (Полосы прокрутки) Text (Текст) False (Ложь) True(Истина) TxtFile 3 ~ Both (Обе) I (Empty) (Пусто) MnuItemCIose Enabled (Включен) Name (Имя) False (Ложь) MnuItemCIose IblFile Caption (Надпись) Name (Имя) Загрузите текстовый файл при помощи коман- ды Открыть IblFile Forml Caption (Надпись) Просмотр текста 5. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа просмотра содержимого текстовых файлов будет запущена. 6. В меню File (Файл) окна Просмотр текста щелкните на команде Open (Открыть). Появится диалоговое окно Open (Открыть), пред- ставленное на следующем рисунке: 8| padua.txt
390 Часть 4. Управление корпоративными данными 7. Выберите nanKy\Vb6Sbs\Less12, а затем дважды щелкните на имени файла BadBills.txt в диалоговом окне Open (Открыть). В текстовом поле появится текст, описывающий признаки фальшивых денег. й* Просмотрит! га Сч¥ВБ&85Чл«12ЧВаЛЛМ [How to Detect Counterfeit Money , (From The American Vest Pocket Dictionary, Random House, 1951) “ ;, 1. Know your money! Study the bills you receive, so as to become familiar with the workmanship on them, especially , ‘’t < in the portraits. <^'4, 2 . Compare a suspected bill with a genuine of the same type ’ ' and denomination 3 Rubbing a bill on a piece of paper will not prove it is J genuine or counterfeit, ink can be rubbed from good bills as well as bad ones. :L 8. Используйте полосы прокрутки для просмотра всего доку- мента. 9. По завершении просмотра щелкните на команде Close (Зак- рыть) из меню File (Файл), чтобы закрыть файл, а затем щелк- ните на команде Exit (Выход) для выхода из программы. Работа программы будет закончена, и вы вернетесь в среду программирования. Теперь рассмотрим две процедуры преры- вания, используемые в программе. Изучим текст программы ShowText 1. В меню File (Файл) формы Просмотр текста (Text Browser) щел- кните на команде Open (Открыть). В окне Code появится текст процедуры mnultemOpen_Click. 2. Увеличьте размеры окна, чтобы видеть максимально боль- шой фрагмент программы на экране. Ваш экран должен выг- лядеть, подобно представленному на рисунке:
Урок 12. Работа стекстовыми файлами и строками 391 I Projectl - Foiml (Code) Form оОткрыть ‘ выво. ‘меняем фортку указателя мыш конца Private Sub mnuItemOpen_Click() Wrap? = Chr?(13) + Chr?(10) 'создаем оболочку CommonDialogl.Filter = "Текстовые файлы (*.TXT) | *.TXT' CommonDialogl.ShowOpen If CommonDialogl.FileName <> "" Then Forml.MousePointer = 11 Open CommonDialogl.FileName For Input As #1 On Error GoTo TooBig: 'обработка сшибок Do Until EOF(l) 'считываем файл до Line Input #1, LineOfText? AllText? = AllText? £ LineOfText? £ Wrap? Loop IblFile.Caption = CommonDialogl.FileName txtFile.Text = AllText? 'показываем файл txtFile.Enabled = True mnuItemClose.Enabled = True mnuItemOpen.Enabled = False Cleanup: □IX Эта процедура обработки прерывания выполняет перечислен- ные ниже действия. Используемые операторы Visual Basic по- казаны в скобках. Предлагает пользователю задать путь к файлу с использо- ванием стандартного объекта типа диалоговое окно. Открывает заданный файл для чтения (Open...For Input). Копирует файл построчно в строковую переменную с име- нем AIIText$ (Line Input). Продолжает копировать строки, пока не будет достигнут конец файла (EOF) или не останется свободного места в стро- ковой переменной. Строковая переменная AIIText$ может вме- стить до 64 К символов. Отображает содержимое строковой переменной в текстовом поле и разрешает использование полос прокрутки. Обрабатывает возможные ошибки (On Error Go То). Обновляет команды меню File (Файл) и указатель мыши и закрывает файл.
392 Часть 4. Управление корпоративными данными 3. Обратите внимание на использование операторов в проце- дуре обработки прерываний mnultemOpen_Click и их действие - особенно на операторы Open, Line Input, EOF и Close. Чтобы получить дополнительную информацию об этих опера- торах, воспользуйтесь справочной системой Visual Basic. Об- работчик ошибок TooBig: в процедуре отображает сообщение и прерывает процесс загрузки, если выбранный пользователем файл имеет размер, превышающий 64 К. Это необходимо, по- скольку строка не может вместить более 64 К символов. Если выбранный файл состоит из нескольких страниц, загруз- ка его Visual Basic займет некоторое время. По этой причине указатель мыши во время загрузки меняет свой вид с помощью свойства MousePointer на изображение песочных часов. Это удобно, чтобы указать пользователю на необходимость ожида- ния, если действие занимает больше одной секунды. 4. Откройте список Object (Объект), затем щелкните на mnultemClose, чтобы отобразить процедуру обработки прерыва- ния mnultemOpen_Click. Эта процедура выполняется, если выбрана команда Close (Зак- рыть). Она очищает текстовое поле, запрещает команду Close, разрешает команду Open (Открыть) и запрещает работу с тек- стовым полем. 5. Завершив просмотр текста программы ShowText, закройте окно Code. Теперь вы можете использовать эту простую программу для более слож- ных задач обработки текстовых файлов. В следующем упражнении вы узнаете, как вводить текст в текстовое поле и сохранять его на диске в виде файла. Создание нового текстового файла на диске Для создания нового текстового файла на диске используйте ключевые слова For Output в операторе Open. Чтобы создать новый текстовый файл на диске средствами Visual Basic, вам потребуются многие объекты и ключевые слова, которые вы уже ис- пользовали в предыдущем упражнении. Создание новых файлов на дис- ке и сохранение данных в них весьма полезно, если вы планируете гене-
Урок 12. Работа (текстовыми файлами и строками 393 рировать собственные сообщения или записи, сохранять важные резуль- таты вычислений, или создавать собственный текстовый процессор (ре- дактор текста). Для создания текстового файла выполните следующие действия: 1. Получите данные от пользователя, либо выполните матема- тические вычисления, или проделайте то и другое. 2. Прйсвойте результаты действий одной или нескольким пе- ременным. Например, вы можете присвоить содержимое тек- стового поля переменной с именем lnputForFile$. 3. Запросите пользователя указать путь к файлу с помощью стандартного диалогового окна Save As (Сохранить как). Для ото- бражения диалогового окна вы можете использовать команду ShowSave, свойственную объекту типа диалоговое окно. 4. Используйте путь, полученный в диалоговом окне, для от- крытия файла для записи (Open...For Output). 5. Используйте оператор Print # для сохранения одного или не- скольких значений в открытом файле (Print #). Оператор Print # посылает выходные данные в указанный файл. 6. Закройте файл, когда закончите (Close). В следующем упражнении показано, как можно использовать текстовое поле и стандартный объект типа диалоговое окно, а также команды Open, Print # и Close для создания простейшей программы для записи и сохране- ния ваших заметок на диске. Вы можете использовать это средство для записи заметок дома или на работе, снабдив их текущей датой. Запустим программу QNote (Быстрый блокнот) 1. Щелкните на кнопке Open Project (Открыть проект) на панели инструментов. 2. Выберите папку \Vb6Sbs\Less12, а затем дважды щелкните на проекте QNote. Программа Быстрый блокнот будет загружена в среде програм- мирования Visual Basic. 3. Если форма не видима, щелкните на форме QNote в окне Project (Проект), а затем щелкните на кнопке View Object (Просмотр объекта). Появится форма Быстрый блокнот, как показано на сле- дующем рисунке:
394 Часть 4. Управление корпоративными данными Форма содержит большое текстовое поле с полосами прокрут- ки. Она также содержит стандартный объект типа диалоговое окно, метку с инструкциями пользователю и меню File (Файл) с командами Save As (Сохранить как), Insert Date (Вставить дату) и Exit (Выход). Установлены следующие свойства: Объект Свойство Установленное значение TxtNote Multiline (Несколько строк) True (Истина) Name (Имя) TxtNote ScrollBars (Полосы прокрутки) 3 - Both (Обе) Text (Текст) (Empty) (Пусто) Labell Caption (Надпись) Введите текст и сохра- ните его на диске Forml Caption (Надпись) Быстрый блокнот 4. Щелкните на кнопке Start (Пуск) на панели инструментов. 5. Введите следующий текст (или ваш собственный текст) в тек- стовое поле: С.В. Филичев - автор нескольких книг для школьников по программированию, учитель информатики. Его новая книга научит школьников основным приемам работы на компьюте-
Урок 12. Работа стекстовыми файлами и строками 395 ре. Общедоступным языком, просто и ясно рассказано об уст- ройстве компьютера, об операционной системе Windows Эби о работе с такими программами, как Word, Access, Excel, PhotoShop. Выполнив упражения в конце каждого раздела, вы легко перейдете с компьютером на «ты». Вторая часть книги целиком посвящена программированию. На основе задач, не выходящих за пределы курса математики средней школы, дается представление о таких языках про- граммирования, как QBasic, Turbo-Pascal и C++. В Приложении автор предлагает игры и олимпиадные зада- чи. Все программы ориентированы на компьютеры с мини- мальными возможностями. По завершении ввода текста ваш экран будет выглядеть по- добно представленному на рисунке: едите текст н сохраните его на диске. С.В. Филичев • автор нескольких книг для школьников по программированию, учитель информатики. Его новая книга научит школьников основным приемам работы на компьютере. Общедоступным языком, просто и ясно рассказано об устройстве компьютера, об операционной системе Windows 95 и о работе с такими программами, как Word, Access, Excel, PhotoShop. Выполнив упражения в конце каждого раздела, вы легко перейдете с компьютером на «ты». Вторая часть книги целиком посвящена программированию. На основе задач, не выходящих за пределы курса математики средней школы, дается представление отаких языках программирования, как QBasic, Turbo-Pascal и C++. В Приложении автор предлагает игры и олимпиадные задачи. Все Примечание. Чтобы скопировать текст из буфера обмена Windows в текстовое поле, нажмите клавиши [~Shi ft | + | Ins], Чтобы скопировать текст из тек- стового поля в Буфер обмена Windows, выделите текст с помощью мыши и нажмите | Ctrl | + [~С~|- Теперь попробуем воспользоваться командами из меню File (Файл).
396 Часть 4. Управление корпоративными данными 6. В меню File (Файл) щелкните на команде Добавить дату. В первой строке текстового поля появится текущая дата. i Быстрый блокнот Текущая дата 03-29-1999 С.В. Филичев • автор нескольких книг для школьников по программированию, учитель информатики. Его новая книга научит школьников основным приемам работы на компьютере. Общедоступным языком, просто и ясно рассказано об устройстве компьютера, об операционной системе Windows 95 и о работе с так ими программами, как Word, Access, Excel, PhotoShop. Выполнив улражения в конце каждого раздела, вы легко перейдете с компьютером на «ты» Вторая часть книги целиком посвящена программированию. На основе задач, не выходящих за пределы курса математики средней школы дается представление о таких языках программирования, как QBasic Tutbo-Pascal и C++. В Приложении автор предлагает игры и олимпиадные задачи. Все Команда Добавить дату очень удобна для помещения в файл те- кущей даты. Это полезно при создании дневника или рабочего календаря. 7. В меню File (Файл) щелкните на команде Сохранить как. 8. В диалоговом окне Save As (Сохранить как) выберите папку \Vb6Sbs\Less12, если она еще не выбрана. Введите в поле имени файла File Name MyNote.txt и щелкните на кнопке Save (Сохра- нить). Текст вашего документа будет сохранен в новом тексто- вом файле MyNote.txt. Теперь выйдем из программы. 9. В меню File (Файл) щелкните на команде Выход. Работа программы будет завершена, и вы вернетесь в среду программирования. Теперь просмотрим текст процедур обра- ботки прерываний в программе. Изучим текст программы Быстрый блокнот 1. В меню File (Файл) формы Быстрый блокнот щелкните на команде Добавить дату. В окне Code появится процедура обработки преры- вания mnultemDate_Click, как показано на следующем рисунке:
Урок 12. Работа текстовыми файлами и строками 397 И Projectl - Foiml (Code) g|rnnutteniDate Click Private Sub mnuItemDate_Click() WrapS = Chr$(13) £ Chr$(10) 'добавить строчку txtHote.Text = Date? £ Wrap? fi| txtNote.Text End Sub Private Sub mnuIternExit_Click () End End Sub выход из программы Private Sub rnnuIternSave_Click() 'примечание: вводимый файл сохраняется как текстовый CommonDialogl.Filter = "Текстовые файлы(*.TXT)|TXT" CommonDialogl.ShouSave 'вывести диалог сохранения If CommonDialogl.FileName о "" Then Open CommonDialogl.FileName For Output As #1 Print #1, txtHote.Text 'сохранить строки в файла Close #1 ‘ закрыть (файл If End End Sub Эта процедура обработки прерывания добавляет текущую дату в текстовое поле путем объединения, или конкатенации, теку- щей даты (полученной с использованием функции Date$), симво- ла возврата каретки и свойства Text (Текст). Вы можете исполь- зовать подобный прием для добавления текущего времени или другой информации в текст, содержащийся в текстовом поле. Функция Date$ возвращает текущую дату. 2. Посмотрите, как действует оператор конкатенации, а затем откройте процедуру обработки прерывания Save_Click. Эта груп- па операторов использует стандартный объект типа диалого- вое окно для отображения диалогового окна Save As (Сохранить как), открытия файла для записи с номером файла, равным 1, записи значения свойства txtNote.Text на диске с помощью опе- ратора Print # и закрытия текстового файла. Обратите внима- ние на оператор Print #1, txtNote.Text который присваивает все содержимое текстового поля откры- тому файлу. Команда Print # похожа на команду Print, но осуще- ствляет вывод в заданный файл, а не на экран или принтер.
398 Часть 4. Управление корпоративными данными Важно заметить, что все содержимое файла хранится в строке txtNote.Text. Оператор Print # использует в качестве первого аргумента номер файла. 3. Просмотрите операторы Open, Print # и Close, а затем закройте окно Code. Вы закончили работу с программой Быстрый блокнот. Теперь вы знаете до- статочно, чтобы успешно продолжить работу с текстовыми файлами. Для получения более подробной информации о работе с файлами с последо- вательным доступом обратитесь к справочной системе Visual Basic. Программное управление символьными строками В предыдущих упражнениях вы научились открывать, редактировать и сохранять текстовые файлы на диске с помощью средства управления «текстовое поле» и дюжины операторов. Visual Basic также предоставля- ет вам множество операторов и функций, предназначенных специально для управления текстовыми элементами в ваших программах. В этом раз- деле вы узнаете, как извлечь полезную информацию из текстовой стро- ки, скопировать группу строк в строковый массив, отсортировать текст, сравнивая строковые выражения, и защитить конфиденциальную инфор- мацию с помощью кодировки. Сортировка текста Умение отсортировать символьные строки по алфавиту оказывается весь- ма ценным при разработке программ. Принцип сортировки достаточно прост. Вы вытаскиваете список объектов для сортировки и затем пооче- редно сравниваете их, пока весь список не окажется расположен в возра- стающем или убывающем алфавитном или символьном порядке. В Visual Basic вы сравниваете строки с помощью тех же операторов сравнения, которые используются для сравнения числовых величин. Главная хит- рость состоит в особенностях алгоритма, используемого для сравнения элементов. Мы не будем ввязываться в дискуссию о преимуществах того или другого метода сортировки, поскольку разница между методами сво- дится в основном к скорости сортировки, которая становится существен- ным фактором, если вы сортируете тысячи элементов, но совершенно не важна в наших учебных примерах. Вместо этого мы поговорим о том, как, сравнивая строки, осуществлять сортировку, и научим вас сортировать текстовые поля, списки, файлы и данные в базах данных.
Урок 12. Работа стекстовыми файлами и строками 399 Операторы и функции для управления строками I Чаще всего при работе со строками используется конкатенация, ко- I торая осуществляется оператором конкатенации &. Например, сле- дующий программный оператор осуществляет конкатенацию трех символьных выражений и помещает результат («Но только деньги вперед!») в строковую переменную slogan$. slogan$ = "Но только" & " деньги " & "вперед!" С помощью специальных операторов и функций вы можете также из- менять строковые выражения. В следующей таблице приводится спи- сок наиболее полезных ключевых слов; некоторые из них разбирают- ся в упражнениях этого урока. Ключевое слово Описание_____________________Пример________ Ucase Переводит все символы строки в Ucase ("Kim") верхний регистр возвращает KIM Lease Переводит все символы строки в Lease ("KIM") нижний регистр возвращает kim Len Определяет длину строки (коли- Len ("Миссиссиппи") чество символов) возвращает 11 Right Возвращает заданное число сим- Right ("Будапешт", 4) волов от конца строки возвращает пешт Left Возвращает заданное число сим- Left ("Будапешт", 4) волов от начала строки возвращает Буда Mid Возвращает заданное число симво- Mid ("Сомерс", 3, 4) лов, начиная с указанной позиции возвращает мерс InStr Находит начальную позицию со- start% = InStrfbob", впадающих символов (в меньшей "bobby") возвра- строке) щает 1 в пере- менную start% String Повторяет символьную строку String (8, “*") возв- указанное число раз ращает ******** Asc Возвращает ASCII-код указанно- Asc ("А") возвра- го символа щает 65 Chr Возвращает символ для указан- Chr$ (65) возвра- ного ASCII-кода щает А
400 Часть 4. Управление корпоративными данными Ключевое слово Описание Пример Хог Операция «исключающее или» над двумя числами. Возвращает число, которое может использо- ваться для шифровки и дешиф- ровки текста 65 Хог 50 возвра- щает 115 115 Хог 50 воз- вращает 65 Что такое ASCII? Для того чтобы Visual Basic мог сравнивать символы, он должен сначала представить их как числа. Это осуществляется с помощью специальной таблицы перевода, которая называется таблица символов ASCII (или ANSI). ASCII - аббревиатура от American Standard Code for Information Interchange (американский стандартный код информационного обмена). Каждому символу, который может отобразить ваш компьютер, присваи- вается свой ASCII-код. Симв.олы ASCII включают все символы «пишу- щей машинки» (коды от 32 до 127), специальные «управляющие» коды, такие, как табуляция, возврат каретки и т.д. (коды от 0 до 31), графичес- кие символы и символы для иностранных алфавитов (коды от 128 до 255, так называемая расширенная таблица символов). К примеру, латинское строчное «а» имеет код ASCII равный 97, а прописное «А» - код 65. По- этому, кстати, Visual Basic обращается с этими символами по-разному, например, при сортировке. Важно. В старых версиях языка Visual Basic имена функций управления стро- ками, которые возвращают строковые величины, обычно оканчива- ются символом $. Так, функция Ch г называлась С hr$, a Mid - М id $. В но- вой версии Visual Basic вы можете пользоваться и старым, и новым написанием. Чтобы определить ASCII-код конкретного символа, используется функция Asc. К примеру, приведенная ниже программная строка присваивает зна- чение 122 (код ASCII для строчной «г») переменной типа integer AscCode%. AscCode% = Asc("z") Функция Chr является обратной к функции Asc, она возвращает символ по заданному коду. К примеру, следующая строка присваивает символ «г» строковой переменной letter$. Ietter$ = Chr(122)
Урок 12. Работа стекстовыми файлами и строками 401 Тот же самый результат получится, если вместо числа вы используете переменную AscCode%, определенную выше. Ietter$ = Chr(AscCode%) Как сравнивать текстовые строки между собой? Для этого используется шесть операторов сравнения, предназначенных для работы с символь- ными и числовыми элементами. Эти операторы представлены в таблице. Оператор Значение о Не равно = Равно < Меньше, чем > Больше, чем <= Меньше или равно >= Больше или равно Один символ «больше» другого, если его ASCII-код больше. К примеру, ASCII-код символа «В» больше, чем код символа «А», поэтому выражение "А" < “В" истинно, а выражение “А” > "В" ложно. При сравнении двух строк, содержащих больше, чем по одному символу, Visual Basic начинает сравнивать первый символ первой строки с пер- вым символом второй строки, а затем переходит к вторым символам и так далее, пока не найдет различия. К примеру, строки Mike и Michael совпада- ют вплоть до третьего символа. Поскольку код символа «к» больше, чем код символа «с», выражение "Mike" > "Michael" истинно. Строки равны, если различий между ними не обнаружено. Если строки одинаковы до некоторого количества символов, но одна из строк короче другой, то более длинная строка считается большей, чем более короткая. К примеру, выражение "АААА" > "ААА" истинно. Сортировка строк в текстовом поле Следующее упражнение показывает, как с помощью операторов сравне- ния и функций для работы со строками отсортировать строки в тексто- вом поле. Программа построена на основе утилиты QNote и содержит ко- манду Open (Открыть), которая позволяет просматривать имеющиеся файлы. В меню File (Файл) есть также команда Sort Text (Сортировка тек- ста), которая позволяет сортировать текст, находящийся в текстовом поле.
402 Часть 4. Управление корпоративными данными Поскольку все содержимое текстового поля хранится в одной строке, про- грамма прежде всего должна разбить эту строку на отдельные строки. За- тем эти строки пересортировываются подпрограммой ShellSort, алгоритм сортировки для которой был разработан Дональдом Шеллом в 1959 г. Что- бы упростить эти задачи, я создал стандартный модуль, который опреде- ляет динамический строковый массив, чтобы помещать в текстовое поле все строки. Я также включил в стандартный модуль подпрограмму ShellSort, чтобы иметь возможность обращаться к ней из любого места проекта. (О стандартных модулях говорится в уроке 11.) Одна из интересных частей программы - подпрограмма, которая опреде- ляет число строк у объекта, находящегося в текстовом поле. Ни одна из имеющихся в Visual Basic функций не подсчитывает зто число автомати- чески. Мне хотелось, чтобы программа могла построчно сортировать текст с любым количеством строк, и для этого я создал код, приведенный ниже. В нем используется функция Chr, которая отслеживает символ возврата каретки в конце каждой строки. 'определяем количество строк в текстовом окне (txtNote) lineCount% = 0 'эта переменная общее количество прочитанных строк(счетчик строк) charslnFile% = Len(txtNote.Text) 'считываем все буквы в окне For i% = 1 То charslпFile% 'помещаем одну букву во временное окно letter$ = Mid(txtNote.Text, i%, 1) 'помещаем следующую букву в letter$ If letter$ = Chr$(13) Then 'если строка прочитана полностью(конец строки!) HneCount% = lineCount% + 1 'переходим к следующей ’(увеличиваем значение счетчика) i% = i% + 1 'пропускаем знак перевода строки '(который всегда вставляется после нажатия Enter) End If Next i% Эта подпрограмма возвращает число строк в текстовом поле в перемен- ную ГшеСоunt%. Я могу использовать эту величину, чтобы определить раз- мер динамического массива в программе и хранить каждую строку по отдельности. Получившийся строковый массив затем передается в под- программу ShellSort для обработки, и ShellSort возвращает строки в алфа- витном порядке. После завершения сортировки я могу просто скопиро- вать его обратно в текстовое поле с помощью цикла For.
Урок 12. Работа стекстовыми файлами и строками 403 Запуск программы SortDemo 1. Щелкните на кнопке открытия нового проекта на панели ин- струментов и откройте проект SortDemo в папке \Vb6Sbs\Less12. 2. Щелкните на кнопке Start (Старт) на панели инструментов для запуска программы. 3.Введите приведенный ниже текст (или любой другой). Зебра Горилла Луна Банан Яблоко Черепаха Не забудьте нажать клавишу | Enter | после слова «черепаха», чтобы Visual Basic правильно подсчитал количество строк. 4.В меню Файл щелкните на команде Сортировать текст. Текст, ко- торый вы набрали,будет отсортирован. I hi. Быстрый блокнот НаСерите текст или открспте файл для спр-ирйски '' ~........................."''У ..?....... /... Банан Горилла 'ебра 1 {на J :репаиа Яблоко 5. В меню Файл щелкните на команде Орел (Открыть) и откройте файл abc.txt в папке\Vb6Sbs\Less12. Этот файл содержит 36 строк. Каждая строка начинается с буквы или цифры (1-10).
404 Часть 4. Управление корпоративными данными *й„ Быстрый блокнот LW36SBS\Le.-ii:\*clzt | [3 для змея Й Ц сплошной цирк i 3 для меня з Б для быстрого ;? С для севера | К для ксерокса g А мой автобус 1 это весело s Т это Т ревор v X это Хадсоны | У для удачи ;• 8 нравится скейборд | Ю для юга J "1оГх1 6.В меню Файл щелкните на команде Сортировать текст. Текст из файла abc.txt будет отсортирован. Программа SortDemo сортиру- ет текст по алфавиту в возрастающем порядке и выводит от- сортированный список в текстовом поле. i Быстрый блпмпп Файл C.WB6S8S\L<Bsl2\abe.t)« |! это весело 10 начать снова 2 это тебе 3 для меня 4 это счет 5 это улей 6 шесть ударов 7 это город на песке 8 нравится скейборд 9 люблю выпить А мой автобус Б для быстрого Г для город 7. Пролистайте список, чтобы убедиться в правильности сор- тировки. Обратите внимание, что строки, начинающиеся с букв, отсортированы правильно, зато строка с цифрой 10 стоит вто- рой - сразу после строки с цифрой 1. Дело в том, что Visual Basic прочитал «1» и «0» как два разные символа, а не как число. Поскольку коды сравниваются слева направо, программа осу-
Урок 12. Работа стекстовыми файлами и строками 405 ществляет чисто символьную сортировку. Если вы хотите сор- тировать числа, вам необходимо сначала заносить их в число- вые переменные, а затем сравнивать без использования стро- ковых функций. Исследование программы SortDemo 1.В меню Файл программы SortDemo щелкните на команде Выход. 2. Откройте окно кодов и выведите на экран код процедуры со- бытия mnultemSortText. Мы уже обсуждали первую часть этой программы, которая определяет число строк в текстовом поле, используя функцию Mid для поиска кода возврата каретки. Ос- тальная часть процедуры события определяет размерность строкового массива, построчно копирует в него текст, вызыва- ет подпрограмму для сортировки текста и выводит отсортиро- ванный текст в текстовом поле. 3. Найдите вторую часть программы. Ваш экран должен выг- лядеть так, как показано на рисунке. Ж Project! - Forml (Code} fiinuttemSortText 1 создаем иассиэ текста в тйготовом овне ReDiin strArray?(lineCount^) 1 создаем массив известной длину curline^ = 1 In? = ‘используем In? для создания линий For 14 = 1 То charsInFile^ ' пролистмваеет считш-хнмй тс:у,т letter^ = Mid(txtNote,Text, i%, 1) If letter? a Chr?(13) Then 'если строка закспгчилась curline^ = outline* + 1 1увслвд.иваен счетчиц строу|Ш i* = i* + 1 ' проггускаем символ конца стро|||у In? = "* ' очишаем строку и переходим Else In? = In? £ letter? 'добавляем букву в строку strArray?(curline*) = in? 'и заноси» ее в массив End If ||П Next i* i||| \ ' sort array ShellSort strArray?(), lineCount* Массив strArrayS был объявлен в стандартном модуле (SortDemo.bas), кото- рый тоже является частью программы. Используя оператор Redim, я оп- ределяю массив strArrayS как динамический с переменной lineCount%, опре-
406 Часть 4. Управление корпоративными данными деляющей размерность массива. Этот оператор создает массив с числом элементов, равным числу строк текста в текстовом поле (это необходимо для подпрограммы ShellSort). Используя цикл For и переменную 1п$, я еще раз просматриваю текст в поисках символа возврата каретки, и копирую каждую полную строку в массив StrArray$. После заполнения массива я вызываю подпрограмму ShellSort. Эта подпрограмма использует оператор сравнения <= для сравнения эле- ментов массива и их сортировки по алфавиту. Подпрограмма выглядит следующим образом: Sub ShellSort(sort$(), numOfElements%) 'ShellSort подпрограмма сортировки в sort$() 'массив сортируется в нисходящем порядке и возвращается в 'вызывающую процедуру. span% = numOfElements% \2 Do While span% > О For i% = span% To numOfElements% - 1 j% = i% - span% +1 For j% = (i% - span% + 1) To 1 Step -span% If sort$(j%) <= sort$(j% + span%) Then Exit For 'перемещает элементы массива, стоящие не по порядку temp$ = sort$(j%) sort$(j%) = sort$(j% + span%) sort$(j% + span%) = temp$ Next j% Next i% span% = span% \ 2 Loop End Sub Используемый метод сортировки постоянно делит основной список эле- ментов на меньшие списки, занося в них элементы, значения которых меньше половины от максимального. Потом программа сравнивает верх- ние и нижние элементы списков, чтобы определить неупорядоченные эле- менты. Если верхний и нижний элемент неупорядочены, они меняются местами. В итоге получается массив (sort$), который отсортирован в об- ратном алфавитном порядке. Чтобы изменить направление сортировки, достаточно изменить оператор <= на >=. Шифрование текста Теперь у вас есть некоторый опыт в обращении с кодами ASCII, и вы мо- жете попробовать составить несложную программу, которая «смещает»
Урок 12. Работа стекстовыми файлами и строками 407 коды символов в ваших текстах и тем самым делает их нечитаемыми для посторонних глаз. Конечно, вам самим для того, чтобы прочитать текст, необходима программа расшифровки, которая вернет кодам правильные значения. В следующих упражнениях мы покажем вам, как можно «за- шифровать» и «расшифровать» текст. Сначала вы запустите программу Encrypt, чтобы посмотреть на принцип ее действия. Шифровка текста изменением кодов ASCII 1. Щелкните на кнопке открытия проекта на панели инструмен- тов и откройте проект Encrypt в папке \Vb6Sbs\Less12. 2,Щелкните на кнопке Start (Пуск) на панели задач, чтобы за- пустить программу. 3. Введите текст в текстовое поле, например такой: Милый друг! Наконец-то Вы получили давно обещанную книжечку. Наде- юсь, она доставит Вам удовольствие - маленькая книжечка на слишком обширную тему. Франческо Марио. 4.В меню Файл щелкните на команде Сохранить... и сохраните файл в папке \Vb6Sbs\Less12 по именем padua.txt. Когда вы сохра- няете файл, программа пересчитывает ASCII-коды и выводит результат в текстовом окне, как показано ниже. Если вы теперь откроете этот текст в Microsoft Word или любом другом редак- торе, то увидите точно такой же результат - символы в тексте изменены, и текст невозможно прочесть. Быстрый блокнот ВВС Файл С WbE5BSMessl2\paduab<l -* ' ' ....................................!.!. ....... ", , Лзкъи|гптв I МЯйньадх,сн|Бъ|онктцзкз|гЯбмн|надшЯммтз|ймзедцйт ' 5. Чтобы восстановить исходный вид файла, выберите команду Открыть в меню Файл и откройте файл padua.txt в папке \Vb6Sbs\Less12. Файл снова появится в исходном виде, как пока- зано на следующем рисунке.
408 Часть 4. Управление корпоративными данными Быстрый блокнот Милый друг! Наконец-то Вы получили давно обещанную книжечку. Надеюсь, она доставит Вам удовольствие маленькая книжечка на слишком обширную тему. Франческо Марио.П 6. В меню Файл щелкните на команде Выход для завершения ра- боты программы. Исследуем программу Encrypt 1. Откройте процедуру события mnultem в окне кодов, чтобы уви- деть ту часть программы, которая осуществляет зашифровку информации. Результат работы программы впечатляет, но шифровальная схема очень проста. Используя функции Asc и Chr и цикл For, я просто вычитал по единице для ASCII-кода каждого символа в текстовом поле, а потом сохранил зашиф- рованную строку в указанный текстовый файл. 'сохранить текст зашифровав его по схеме(АВСП код +1) encrypt? =..очищаем строку шифрования charslnFile% = Len(txtNote.Text) 'находим длину строки For i% = 1 То charslnFile% 'для каждого знака в файле letter? = Mid(txtNote.Text, i%, 1) 'считываем следующий знак 'определяем его ASCII код и уменьшаем его на 1 encrypt? = encrypt? & Chr$(Asc(letter$) - 1) Next i% Open CommonDialogl.FileName For Output As #1 'открываем файл Print #1, encrypt? 'сохраняем зашифрованный текст в файл txtNote.Text = encrypt?
Урок 12. Работа стекстовыми файлами и строками 409 Самый важный оператор здесь encrypt? = encrypt? & Chr(Asc(letter$) -1) Этот оператор определяет ASCII-код текущего символа, вы- читает из него единицу, снова превращает код в символ и до- бавляет его к строке encryptS. Два последних оператора записы- вают зашифрованный текст в файл и выводят его в текстовом поле. 2.Теперь откройте процедуру события mnuOpenltem в окне ко- дов, чтобы увидеть ту часть программы, которая осуществля- ет расшифровку информации. Текст программы практически идентичен приведенному выше, только теперь мы не вычита- ем 1, а прибавляем. 'теперь расшифруем строки, увеличив значение ASCII кода на 1 decrypts ='"' 'очищаем строку расшифрованного текста charsInFile = Len(AIITextS) For 1% = 1 To charsInFile letter$ = Mid(AIIText$, 1%, 1) decrypts = decrypts & Chr$(Asc(letter) + 1) 'прибавляем 1 'узнаем длину строки 'для каждого знака 'получаем значение в коде Mid Next i% 'и создаем новую строку txtNote.Text = decrypts 'отображаем расшифрованную строку Подобного шифра может быть вполне достаточно, чтобы скрыть от посто- ронних глаз содержимое ваших файлов. Однако файлы, зашифрованные подобным образом, легко расшифровываются. Достаточно подсчитать частоту появления отдельных букв и сравнить со средней частотой их появления в языке, чтобы установить, на сколько сдвинуты символы. По- добная шифровка также не защищает файлы от повреждений - напри- мер, их можно просто удалить, если они не были защищены. Но если вам просто надо быстро сделать информацию неудобочитаемой, предложен- ная здесь схема вполне может сработать. Шаг вперед: использование оператора Хог Шифровальная схема, рассмотренная выше, вполне «безопасна» для тек- стовых файлов, потому что она только перемещает ASCII-коды на не- сколько позиций. Однако будьте осторожны и не сдвигайте коды больше, чем на несколько символов, если вы собираетесь хранить результат в виде текстового файла. Добавление слишком больших величин (например, 500) приведет к тому, что текст не удастся расшифровать. К примеру, если вы добавите 500 к коду символа «А» (65), то получите значение 565, которое функция Chr не сможет интерпретировать, поскольку такого кода просто
410 Часть 4. Управление корпоративными данными не существует. Сhг вернет ноль, и символ будет потерян, восстановить его вы уже не сможете. Один из способов решения этой проблемы - превратить буквы в цифры чтобы не думать о предельных значениях. Потом при зашифровке к этим числам можно применять математические функции - умножение, лога- рифмирование и т.д. - любые, обратная функция к которым дает одно- значные результаты. Один из лучших методов шифровать численные величины встроен в Visual Basic. Это оператор Хог, или оператор «исключающего или». Действие опе- ратора Хог лучше всего наблюдать в окне Immediate Window (Окно непосред- ственного выполнения), в котором программный код выполняется сразу же по мере его ввода. Чтобы открыть это окно, выберите команду Immediate Window (Окно непосредственного выполнения) в меню View (Вид). Если в этом окне вы введете print asc(’A") Хог 50 и нажмете клавишу | Enter |, то под строкой программы Visual Basic вы- ведет ответ: 115. Если вы введете print 115 Хог 50 то результатом будет число 65, ASCII-код исходного символа. Другими словами, этот оператор является обратимым - вы получите исходный результат, если еще раз примените оператор Хог к результату первой операции. Эта особенность оператора Хог используется во многих попу- лярных программах шифровки информации. Его применение сделает ваши документы намного более сложными для расшифровки. Шифрование текста с помощью оператора Хог Запустите программу Encrypt2, чтобы понаблюдать, как работает оператор Хог. 1 .Щелкните на кнопке открытия проекта на панели инструмен- тов и откройте проект Enсrypt2 в папке \Vb6Sbs\Less12. 2 .Щелкните на кнопке Start (Пуск) на панели задач, чтобы за- пустить программу. 3 .Введите текст в текстовое поле, например такой: Эдикт Ротара (Ломбардия, Италия, 643) 296. О воровстве винограда. Тот, кто возьмет больше, чем три грозди винограда, с чужого виноградника, должен заплатить хозяину шесть сольдо штрафа. Тот, кто возьмет меньше трех гроздей, не несет наказания.
Урок 12. Работа стекстовыми файлами и строками 411 4.В меню File (Файл) щелкните на команде Сохранить... и сохра- ните файл в nanKe\Vb6Sbs\Less12 по именем oldlaws.txt. Програм- ма запросит у вас специальный код, который будет использо- ваться для зашифровки и расшифровки программы. Вы должны запомнить его, чтобы расшифровать файл! 5.Введите 500 или любое другое число и нажмите клавишу | Enter |. Visual Basic зашифрует текст с помощью оператора Хог и со- хранит его на диске в виде последовательности чисел. На экра- не вы не увидите никаких изменений, но если теперь вы откро- ете этот текст в Microsoft Word или любом другом редакторе, то увидите, что текст невозможно прочесть. 6.Уничтожьте текст в текстовом поле, выделив его с помощью мыши и нажав клавишу | Del |. Теперь вы расшифруете текст. 7.В меню Файл выберите команду Открыть. 8.Дважды щелкните на имени файла oldlaws.txt в папке \Vb6Sbs\Less12, введите 500 в появившемся диалоговом окне и щелкните на кнопке ОК. (Если вы вводили другой шифр, вве- дите его.) Быстрый блокнот Эдикт Ротара (Ломбардия, Италия, 643) 236. О ВОрОВСТё Винограда. Т ОТ, кто ВОжмеГ ООЛошё, чём три грозди винограда, с чужого виноградника, должен заплатить хозяину шесть сольдо штрафа. Т от J кто возьмет меньше трех гроздей, не несет наказания. Файл снова появится в исходном виде.
412 Часть 4. Управление корпоративными данными 9. В меню Файл щелкните на команде Выход для завершения ра- боты программы. Исследуем программу-шифровальщик Оператор Хог используется в процедурах события mnuOpenltem и mnultemSave. Обе эти процедуры должны быть вам вполне понятны. Про- цедура события mnultemSave использует следующие операторы для полу- чения от пользователя кодового числа и для зашифровки файла: code = 1при1Вох("Введите код шифрования",, 1) If code ="" Then Exit Sub 'если нажата кнопка Cancel, выйти из подпрограммы Forml .MousePointer = 11 ‘придать курсору мыши форму часов charslnFile% = Len(txtNote.Text) ‘определить длину строки Open CommonDialogl.FileName For Output As #1 ‘открыть файл For i% = 1 To charslnFile% ‘для каждого знака в файле letter$ = Mid(txtNote.Text, i%, 1) ‘считать следующий знак ‘конвертировать код win/Asc, используя Хог для шифрования Print #1, Asc(letterS) Хог code; ‘и сохранить файл Next i% Close #1 ‘по окончании закрыть файл В операторе Print #1 оператор Хог переводит каждый символ, имеющийся в текстовом поле, в числовой код, который затем записывается на диск. Что- бы увидеть обратную операцию, посмотрите коды для процедуры события mnuOpenltem. Как я уже говорил, файл теперь выглядит как последователь- ность чисел, а не символов. Например, файл из предыдущего упражнения в редакторе Notepad выглядит так, как показано на рисунке. Полная абра- кадабра, но теперь вы умеете с ней обращаться. Главное - не забыть код! oldlaws1.TXT - Notepad Fie Edit Search Help < ' - 1 | 297 272 284 286 262 468 292 282 262 276 268 276 468 476 21 280 273 262 468 280 273 281 264 268 273 468 262 260 273 i Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 13. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да).
Урок 12. Работа стекстовыми файлами и строками 413 Краткое содержание урока Чтобы Сделайте следующее Открыть текстовый файл Используйте оператор Open...For Input, например: Open CmnDialog 1 .FiieName For Input As #1 Прочитать строку из текстового фай- ла Проверить наличие конца файла Используйте оператор Line Input, например: Line Input #1, LineOfText$ Используйте функцию EOF, например: Do Until EOF(1) Line Input #1, LineOfText$ Text$ = Text$ & LineOfTextS & WrapS Loop Закрыть открытый файл Используйте оператор Close, например: Close #1 Отобразить тексто- вый файл Используйте оператор Line Input, чтобы скопировать текст из открытого файла в строковую переменную, а затем присвойте значение строковой переменной объекту типа «текстовое поле», например: Do Until EOF(1) Line Input #1, LineOfTextS Texts = Texts & LineOfTextS & WrapS Loop TxtDisplay.Text = TextS Отобразить диало- говое окно Open (От- крытие) Используйте команду ShowOpen для стандартного объекта типа «диалоговое окно», например: CmnDialogl. ShowOpen Создать новый тек- стовый файл Используйте оператор Open...For Output, например: Open CmnDialogl.FiieName For Output As #1 Отобразить диало- говое окно Save As (Сохранить как) Используйте команду ShowSave для стандартного объекта типа «диалоговое окно», например: CmnDialogl .ShowSave Сохранить текст в файле Используйте команду Print#, например: Print #, txtNote.Text
414 Часть 4. Управление корпоративными данными Чтобы Сделайте следующее Преобразовать тек- стовые символы в коды ASCII Используйте функцию Asc, например: code% = Asc("A") 'код равен 65 Преобразовать коды ASCII в тек- стовые символы Используйте функцию Chr, например: letters = Chr(65) 'letters равно А Извлечь символы из середины строки Используйте функцию Mid, например: name $ = "Генри Харрисон" start% = 7 length = 9 lastName$ = Mid (name$, start%, length0/») Зашифровать текст Используйте оператор Хог и определяемый пользо- вателем код. Например, эта программа зашифровы- вает текст, находящийся в текстовом блоке, и запи- сывает его как последовательность чисел. code = 1при1Вох("Введите код шифрования",, 1) Open "encrypt.txt" For Output As #1 charslnFile% = Len (txtNote.Text) For i% = 1 To charslnFile% letter$ = Mid(txtNote.Text, i%, 1) Print #1, Asc(letterS) Xor code; Next i% Расшифровать текст Запросите у пользователя код и используйте опера- тор Хог. Например, эта программа расшифровывает текст, созданный ранее. code = 1при1Вох(“Введите код шифрования",, 1) Open "encrypt.txt" For Input As #1 decrypts = Do Until EOF(1) Input #1, Number& e$ = Chr(Number& Xor code) decrypts = decrypts & e$ Loop txtNote.Text = decrypts
УРОК “ 13: Управление базами данных Access Урок я рассчитан $ на в 40 минут я в в я в в и Вы научитесь: создавать приложения для просмотра баз данных с по- мощью средств управления объекта типа Data (Данные); осуществлять поиск информации в базе данных; добавлять и удалять записи в базу данных; создавать архивные копии файлов с помощью оператора FileCopy. В этом уроке вы узнаете, как работать с информацией, пред- ставленной в виде баз данных. Вы узнаете, как открывать существующие базы данных с помощью объекта типа «дан- ные», как осуществлять поиск нужных элементов и как до- бавлять или удалять записи в базе данных. Программа Visual Basic была специально разработана для создания интерфей- са пользователя, или проектирования «лицевой стороны» программы, а также для работы с имеющимися базами дан- ных, поэтому, если вы хотите придать более привлекатель- ный вид данным, созданным с помощью другого приложе- ния, например, Microsoft Access, вы легко сможете это сделать после того, как познакомитесь с материалом, изло- женным в этом уроке.
416 Часть 4. Управление корпоративными данными Работа с базами данных в Visual Basic Как было сказано в уроке 3, база данных представляет собой организо- ванный набор информации, хранящейся в файле. Вы можете создавать достаточно сложные базы данных с помощью различных программных продуктов, таких как Microsoft Access, Microsoft FoxPro, Btrieve, Paradox и dBase. Вы также можете использовать систему открытого взаимодей- ствия баз данных (ODBS) для структур типа клиент-сервер, например, Microsoft SQL Server. Если вы регулярно работаете с базами данных - особенно с перечислен- ными выше базами данных - то Visual Basic окажется для вас весьма мощ- ным средством для обработки и отображения ваших данных. Поскольку Visual Basic предусматривает технологию обработки баз данных, анало- гичную используемой Microsoft Access (в данной технологии «движок» носит название Microsoft Jet), вы можете создавать основные приложе- ния для работы с базами данных с помощью всего нескольких десятков строк в тексте программы. Visual Basic может считывать и записывать информацию в базы дан- ных различного формата. В этом разделе вы познакомитесь с использованием объекта типа данные Visual Basic для управления базой данных Students.mdb, включенной в ком- плект поставки Visual Basic и Access. Файл Students.mdb является базой данных Access, содержащей библиографию книг о программировании баз данных. Вы узнаете, как отображать несколько записей в базе данных, находить в ней определенную информацию, добавлять новые записи и удалять ненужные, а также создавать архивные копии файлов. Закон- чив изучение материала, вы будете достаточно подготовлены, чтобы ра- ботать с вашими собственными проектами с использованием баз данных. Создание собственных приложений для работы с базами данных Собственное приложение для работы с базами данных - это программа, считывающая поля и записи базы данных и отображающая их опреде- ленным способом, требующимся для группы пользователей. Например, публичная библиотека хотела бы иметь свою версию каталога карточек, предназначенную для научных исследований. Собственное приложение для работы с базами данных обычно предлагает пользователям несколь- ко команд. Эти команды дают возможность пользователям применять фильтры для просмотра данных; осуществлять поиск данных, печать, добавление и удаление записей; делать архивные копии баз данных. Не-
Урок 13. Управление базами данных Access 417 которые базы данных вследствие особенностей их организации довольно затруднительно использовать в их оригинальном виде. С помощью Visual Basic вы можете построить собственное приложение по обработке базы данных, которое бы отображало только информацию, необходимую пользователю, а также предоставляло бы пользователю необходимые средства для обработки данных. Собственные приложения для работы с базами данных позволяют пред- ставить только необходимые пользователю поля и записи базы данных. Использование средств с контролем границ значений для отображения информации базы данных Средства с контролем ограничителей обрабатывают базу данных ав- томатически. Большинство объектов, которые вы создаете с помощью средств панели инструментов Visual Basic, обладают встроенной возможностью отобра- жать информацию из баз данных. В терминологии баз данных эти объек- ты называются средствами с контролем границ. Объект соответствует базе данных, если для свойства DataSource (Источник данных) установле- но корректное имя базы данных, а для свойства DataField (Поле данных) установлена корректная таблица в базе данных. Таблица представляет собой группу полей и записей, которую вы определили при создании базы данных. Как вы знаете из урока 3, вы можете связать вашу программу на Visual Basic с базой данных с помощью объекта типа данные. После уста- новления связи вы можете отображать информацию из базы данных с использованием объектов, созданных с помощью перечисленных в сле- дующей таблице стандартных средств управления: Средство управления Описание Поле флажка Комбинированное поле Изображение Поле метки Поле списка Поле рисунка Текстовое поле
418 Часть 4. Управление корпоративными данными Использование объектов типа текстовое поле для отображения данных В следующей программе используется один объект типа данные и четы- ре объекта типа текстовое поле для отображения четырех полей базы данных Students.mdb. Она демонстрирует, как вы можете создать собствен- ное приложение для работы с базами данных, чтобы просмотреть только ту информацию, которая вам нужна. В этом приложении у свойства ReadOnly (Только чтение) для объекта типа данные установлено значение True (Истина), поэтому информацию в базе данных можно просматривать, но нельзя изменить. Чтобы разрешить пользователю вносить изменения в базу данных Students.mdb, установите для значения ReadOnly значение False (Ложь) с помощью окна Properties (Свойства). Примечание. Чтобы сохранить неизменной оригинальную базу данных Students.mdb, сделайте архивную копию файла с помощью Проводника Windows (Windows Explorer) прежде, чем приступите к выполнению следую- щего упражнения. Запустим программу Courses 1. Запустите Visual Basic, затем выберите папку \Vb6Sbs\Less13 и дважды щелкните на проекте Courses.vbp. Программа будет загружена в среде программирования Visual Basic. 2. Если форма не видима, щелкните на форме Courses (Курсы) в окне Project (Проект), а затем на кнопке View 0 bject (Просмотр объек- та). Появится форма Courses (Курсы), как показано на рисунке:
Урок 13. Управление базами данных Access 419 Форма содержит информацию о программе, графический сим- вол, объект типа данные, несколько меток и текстовых полей, а также командную кнопку. Для объекта типа данные и тексто- вых полей, которые являются объектами, связанными с пере- дачей данных, установлены следующие свойства. (Чтобы про- смотреть свойства, установленные для других объектов, воспользуйтесь окном Properties (Свойства).) Объект Свойство Установленное значение DatStudent Caption (Надпись) Connect (Связан с) DatabaseName (Имя базы данных) Name (Имя) Readonly (Только чтение) RecordsetType (Тип записей) RecordSource (Источник записей) Students.mdb Access c:\vb6sbs\lessO3\Students.mdb DatStudent True(Истина) 0 _ Table (Таблица) Titles (Заголовки) txtTitle DataField (Поле данных) DataSource (Источник данных) Name (Имя) Text (Текст) Title (Заголовок) DatStudent TxtTitle (Empty) (Пусто) Txtinfo DataField (Поле данных) DataSource (Источник данных) Name (Имя) Text (Текст) Description DatStudent Txtinfo (Empty) (Пусто) TxtISBN DataField (Поле данных) DataSource (Источник данных) Name (Имя) Text (Текст) ISBN DatStudent TxtISBN (Empty) (Пусто)
420 Часть 4. Управление корпоративными данными Объект Свойство Установленное значение TxtYear DataField (Поле данных) Year Published DataSource DatStudent (Источник данных) Name (Имя) TxtYear Text (Текст) (Empty) (Пусто) Объект типа данные имеет свойство RecordSource (Источник за- писей), для которого установлено значение Titles (Заголовки), и свойство DatabaseName (Имя базы данных), для которого уста- новлено значение «C:\Vb6Sbs\LessO3\Students.mdb»; для че- тырех текстовых полей установлены одинаковые значения (datStudent) для свойств DataSource (Источник данных) и различ- ные значения для свойств DataField (Поле данных). Тем самым устанавливается базовая связь между базой данных библио- графии на диске, объектом типа данные в программе и инди- видуальными текстовыми полями в форме. tit Просмотр данных Список курсов университета Программа просмотра расписания текущих курсов ейиверситета. Students mdb ...iM ' И Предмет | Эпоха Ренессанса йектор ' J Золотова М арина Факультет |,1сгериА День/Вргмя |ъ77ГТг5сГ““ я Примечание. Если ваша копия файла Students.mdb находится не в папке C:\VB6Sbs\LessO3 (место его нахождения по умолчанию), измените соответствующим об- разом значение свойства DatabaseName (Имя базы данных) для объекта типа данные, чтобы оно совпадало с путем к данному файлу.
Урок 13. Управление базами данных Access 421 3. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа Courses начнет свою работу, и в форме появится пер- вая запись таблицы Предметы из базы данных Students.mdb. 4. Щелкните на внутренней правой стрелке поля управления данными, чтобы просмотреть вторую запись таблицы Предметы. В форме появится запись для предмета «Реляционная база дан- ных». Каждый раз, когда вы прокручиваете содержимое базы данных, все четыре текстовых поля будут обновляться. 5. Щелкните на внешней правой стрелке, чтобы просмотреть последнюю запись в таблице Предметы. Появится запись для предмета «Социальная философия». 6. Щелкните на кнопке Выход для завершения работы програм- мы. Эта программа содержит только одну строку (оператор End), но и она яв- ляется вполне достаточной. Дело в том, что при этом отображаются толь- ко те поля, которые вам нужны в базе данных Students. С помощью объек- та типа данные и нескольких форматированных для размещения данных текстовых полей вы можете создать весьма эффективное приложение для обработки базы данных. Использование объекта Recordset Объект Recordset (Набор записей) представляет данные, с которыми вы будете работать в программе. В программе Courses вы использовали свойство данных RecordsetType (Тип записей) для идентификации представления информации в вашей базе данных в виде таблицы. В Visual Basic объект Recordset (Набор записей) представляет ту часть базы данных, с которой вы будете работать в про- грамме. Объект Recordset включает в себя несколько особых свойств и ко- манд, позволяющих вам осуществлять поиск, сортировку и удаление за- писей. В следующем упражнении вы используете объект Recordset для поиска предметов в базе данных Students.mdb. Поиск данных в базе Students.mdb Прежде, чем модифицировать программу, сохраните ее под новым име- нем, чтобы сохранить оригинал.
422 Часть 4. Управление корпоративными данными 1. В меню File (Файл) щелкните на команде Save Courses.frm As (Со- хранить Courses.frm как). Сохраните форму Courses в папке \Vb6Sbs\Less13 под именем MyFindRec.frm. 2. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). Сохраните проект под именем MyFindRec.vbp. ЯЗ. Щелкните на кнопке управления CommandButton (Командная кнопка), а затем создайте командную кнопку в левом нижнем углу формы. 4. Установите следующие свойства для командной кнопки: Объект Свойство Установленное значение Commandl Caption (Надпись) Найти Name (Имя) CmdFind 5. Дважды щелкните на командной кнопке Найти, чтобы открыть процедуру обработки прерывания в окне Code. 6. Введите следующие программные операторы в процедуру обработки прерывания: Private Sub cmdFind_Click() prompts = "Введите полное наименование курса." 'считываем строку для поиска в поле ClassName SearchStr$ = lnputBox(prompt$, "Поиск курса") datStudent.Recordset.lndex = "ClassName" 'используем индекс ClassName datStudent.Recordset.Seek “=", SearchStr$ 'и ищем If datStudent.RecordsetNoMatch Then 'если не найдено datStudent. Reco rdset. Move First 'переходим на первую запись End If Команда Seek осуществляет поиск нужной записи. Эта процедура обработки прерывания отображает диалоговое окно поиска, чтобы найти строку, указанную пользователем (SearchStr$) и с помощью команды Seek осуществляет поиск в поле Предметы базы данных от начала до конца, пока не найдет тре- буемое значение или не достигнет конца списка. Если требуе- мое значение не обнаружено, Visual Basic выдает сообщение и отображает первую запись для объекта Recordset. В процедуре обработки прерывания используются следующие свойства и команды объекта Recordset:
Урок 13. Управление базами данных Access 423 Свойство или команда объекта Recordset Описание Index (Индекс) Свойство, используемое для задания поля в базе данных, для которого бу- дет осуществляться поиск. Seek Команда, используемая для поиска за- писи. Кроме оператора =, для сравне- ния заданной текстовой строки с со- держимым полей записей базы данных могут использоваться операторы >=, >, <= И <• NoMatch (Не найдено) Свойство получает значение True (Ис- тина), если в ходе поиска указанное значение не найдено. MoveFirst Команда, делающая текущей первую запись в наборе Recordset. 7. Закройте окно Code и щелкните на кнопке Save Project (Сохра- нить проект) для сохранения внесенных изменений на диске. Теперь запустим программу. Запустим программу MyFindRec 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Как и раньше, в текстовых полях будет отображена информация из таблицы Предметы базы данных Students.mdb. 2. Щелкните на кнопке Найти. Появится диалоговое окно Поиск курса, как показано на следующем рисунке: Законченная программа FindRec содержится в папке \Vb6Sbs\Less13. 3. Введите Графика в диалоговом окне, а затем нажмите кла- вишу | Enter |. Процедура обработки прерывания cmdFind_Click
424 Часть 4. Управление корпоративными данными начнет просматривать значение в поле ClassName базы данных и остановится на следующей записи: « Просмотр данных Программа просмотра расписания текущих курсов университета. 4. Снова щелкните на кнопке Найти, введите Итальянский язык, а затем нажмите клавишу | Enter |. Процедура обработки прерывания не найдет предмет с названи- ем Итальянский язык, поэтому появится следующее сообщение: Microsoft Visual Basic П7 No cuirent record. КД “* I 5. Щелкните на кнопке ОК в окне сообщения. Для вывода первой строки таблицы программа использует ме- тод MoveFirst. Однако посмотрите внимательно на эту запись - она выглядит не так, как при первом запуске программы. По- бочный эффект установки свойства Index так, как было показа- но выше, состоит в том, что изменяется вид поля, по которому производится сортировка. В нашем случае программа исполь- зует поле по умолчанию CourselD для сортировки полей в таб- лице. Course!D - это внутреннее поле в базе данных Students,
Урок 13. Управление базами данных Access 425 которое отслеживает последовательность внесения данных в базу. Изменив поле Index на ClassName, мы тем самым укажем объекту Data использовать поле ClassName для сортировки по алфавиту. В этой демонстрационной программе порядок записей не име- ет значения. Но если вам потребуется постоянная последова- тельность сортировки, правильно используйте свойство Index. 6. Щелкните на кнопке Выход для остановки программы. Работа программы будет завершена, и вы вернетесь в среду программирования. Добавление записей в базу данных Students.mdb Чтобы добавить новую запись в базу данных, на стадии разработки сле- дует установить для свойства ReadOnly (Только чтение) объекта типа дан- ные значение False (Ложь), а затем использовать команду Additem в проце- дуре обработки прерывания, чтобы открыть новую запись в базе данных. После появления пустой записи в форме, пользователь заполнит нужные поля, а по завершении перейдет к другой записи в базе данных. Простей- ший способ для пользователя перейти к другой записи - это щелкнуть на одной из кнопок объекта типа данные. После перехода к другой записи новая запись будет вставлена в базу данных в алфавитном порядке. В следующем упражнении показано, как использовать свойство ReadOnly (Только чтение) и команду AddNew для вставки новой записи в базу дан- ных. В процессе ввода функция InputBox позволяет пользователю визу- ально наблюдать вводимые данные. Разрешим пользователю добавлять записи в базу данных Прежде чем модифицировать программу, сохраните ее под новым име- нем, чтобы предотвратить внесение изменений в оригинал. 1. В меню File (Файл) щелкните на команде Save MyFindRec.frm As (Сохранить MyFindRec.f rm как). Сохраните форму MyFindRec под именем MyAddRec.frm. Воспользуйтесь командой Save Project As (Сохранить проект как) для сохранения проекта под именем MyAddRec.vbp.
426 Часть 4. Управление корпоративными данными 2. Щелкните на объекте datStudent (объект типа данные) в фор- ме, а затем откройте окно Properties (Свойства). 3. Установите для свойства Readonly (Только чтение) объекта datStu de nt значение False (Ложь). Свойство Readonly (Только чтение) определяет, как будет откры- та база данных Students.mdb. Установив для этого свойства зна- чение False (Ложь), вы позволите пользователю вносить изме- нения в базу данных и вставлять новые записи. 4. Щелкните на кнопке CommandButton (Командная кнопка) на панели инструментов, а затем создайте командную кнопку справа от кнопки Найти в форме. 5. Установите для командной кнопки следующие свойства: Объект Свойство Установленное значение Commandl Caption (Надпись) Добавить Name (Имя) CmdAdd Ваша форма должна выглядеть подобно представленной на следующем рисунке: 6. Дважды щелкните на кнопке Добавить, чтобы открыть проце- дуру прерывания cmdAdd_Click в окне Code.
Урок 13, Управление базами данных Access 427 7. Введите следующие программные операторы в процедуру обработки прерывания: Private Sub cmdAdd_Click() prompts = “Для ввода новой записи нажмите на кнопку 0К.“ reply = MsgBox(prompt$, vbOKCancel, "Добавить запись") If reply = vbOK Then 'если нажата кнопка OK txtTitle.SetFocus 'перевести курсор в поле Title (Предметы) datStudent.Recordset.AddNew 'и ввести новую запись End If Команда AddNew добавляет новую запись в базу данных. Прежде всего процедура отображает диалоговое окно, содер- жащее инструкции пользователю по вводу данных. Функция MsgBox использует аргумент vbOKCancel (числовую константу, определяемую Visual Basic) для отображения диалогового окна с кнопками ОК и Cancel. Если пользователь щелкает на кнопке ОК, с помощью команды AddNew создается новая запись. Если пользователь щелкает на кнопке Cancel, операция опускается. В процедуре обработки прерывания используется также коман- да SetFocus для помещения курсора в текстовое поле Предметы. Команда SetFocus может быть использована для активизации любого объекта, который требует внимания пользователя. Последний оператор в структуре с условием If используется в тексте программы для установки поля PublD в базу данных Students.mdb. Для каждой новой записи требуется это поле, а поскольку в окне просмотра вашей базы данных этого поля нет, вам приходится заполнять поле PublD вручную. Число 14 озна- чает, что книга будет издана Microsoft Press. 8. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект) на панели инструментов для сохранения изменений. Теперь вы с помощью кнопки Добавить добавите запись в базу данных. Запустим программу MyAddRec 1. Щелкните на кнопке Start (Пуск) на панели инструментов. В текстовых полях будет отображена информация из таблицы Предметы базы данных Students.mdb. 2. Щелкните на кнопке Добавить.
428 Часть 4. Управление корпоративными данными Законченная программа AddRec содержится в папке \Vb6Sbs\Less 13. Появится диалоговое окно Add Record, как показано на следую- щем рисунке: Добавить запись Для ввода новой записи нажмите на кнопку ОК. Cancel 3. Щелкните на кнопке ОК. В форме появится новая пустая за- пись. Введите для новой записи информацию, представленную на следующем рисунке; для перемещения между полями ис- пользуйте клавишу | Tab |. 4. По завершении ввода фиктивной записи щелкните на левой внешней кнопке со стрелкой объекта типа данные. В качестве последней записи в базу данных будет вставлена запись для предмета «Основной курс по химии». После этого в форме бу- дет отображена первая запись в базе данных. 5. Щелкните на кнопке Найти, введите Основной курс по химии, затем нажмите клавишу | Enter |. В форме появится запись Ос- новной курс по химии.
Урок 13. Управление базами данных Access 429 6. Щелкните на кнопке Выход для завершения программы. Ра- бота программы будет остановлена, и вы вернетесь в среду про- граммирования. С помощью кнопки Добавить вы можете доба- вить любое число записей в базу данных Students.mdb. Удаление записей из базы данных Students.mdb Чтобы удалить записи из базы данных, вы отображаете нужную запись, а затем используете команду Удалить для объекта Recordset. Прежде чем открыть базу данных в программе, вы должны установить для свойства ReadOnly (Только чтение) объекта типа данные значение False (Ложь). Пос- ле удаления записи вы должны отобразить новую запись в вашей базе данных, поскольку объект типа данные не делает это автоматически. Чаще всего наилучшим решением является использование команды MoveFirst для отображения первой записи в базе данных. В следующем упражнении показано, как можно использовать средства Visual Basic для удаления записей из базы данных Students.mdb. Обратите особое внимание на использование функции MsgBoxв программе. Посколь- ку объект типа данные не поддерживает функцию «отмена», очень важ- но, что программа запрашивает подтверждение намерений пользовате- ля, прежде чем окончательно удалить запись из базы данных. Важно. Команда Удалить окончательно удаляет запись из базы данных. Не да- вайте пользователю возможности воспользоваться этой командой, если не хотите, чтобы он мог удалять записи. Разрешим пользователю удалять записи из базы данных Прежде, чем модифицировать программу MyAddRec, сохраните ее под но- вым именем, чтобы защитить оригинал от внесения изменений. 1. В меню File (Файл) щелкните на команде Save MyAddRec.frm As (Сохранить MyAddRec.f rm как). Сохраните форму MyAddRec под именем MyDelRec.f rm. Используйте команду Save Project As (Со- хранить проект как) для сохранения проекта под именем MyDelRec.vbp.
430 Часть 4. Управление корпоративными данными 2. Щелкните на объекте datStudent (объект типа данные) в фор- ме, а затем откройте окно Properties (Свойства). 3. Проверьте, что для свойства Readonly (Только чтение) объек- та datStudent установлено значение False (Ложь). 4. Щелкните на кнопке управления CommandButton (Командная кнопка), а затем создайте командную кнопку справа от кнопки Добавить в форме. 5. Установите для командной кнопки следующие свойства: Объект Свойство Установленное значение Commandl Caption (Надпись) Удалить Name (Имя) CmdDelete Ваша форма должна выглядеть так, как показано на следую- щем рисунке: 6. Дважды щелкните на командной кнопке Удалить, чтобы от- крыть процедуру обработки прерывания cmdDelete_Click в окне Code. 7. Введите в процедуру обработки прерывания следующие про- граммные операторы:
Урок 13. Управление базами данных Access 431 prompts = “Вы действительно хотите удалить этот курс?" reply = MsgBox(prompt$, vbOKCancel, "Удаление записи") If reply = vbOK Then 'если нажата кнопка OK datStudent.Recordset.Delete 'удалить текущую запись datStudent.Recordset.MoveNext 'перейти на следующую запись End If Команда Delete удаляет запись из базы данных. Эта процедура прежде всего отображает диалоговое окно с зап- росом пользователю, действительно ли он хочет удалить запись. Снова используется функция MsgBox с аргументом vbOKCancel, чтобы пользователь имел возможность отменить операцию уда- ления при отказе от нее. Если пользователь щелкнет на кнопке ОК, текущая запись будет удалена с помощью команды Delete, а команда MoveNext отобразит следующую запись. Если пользо- ватель щелкнет на кнопке Cancel, операция удаления будет про- пущена. 8. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект) для сохранения изменений. Теперь вы воспользуетесь кнопкой Удалить для удаления записи Основной курс ПО ХИМИИ из базы данных. Запустим программу MyDelRec 1. Щелкните на кнопке Start (Пуск) на панели инструментов. В текстовых полях появится информация из таблицы Предметы базы данных Students.mdb. 2. Используйте кнопку Найти, чтобы отобразить запись ОСНОВНОЙ курс ПО ХИМИИ. Запись, которую вы добавили в предыдущем уп- ражнении, появится в форме на экране. Законченная программа DelRec содержится в папке \Vb6Sbs\Less13. Внимание! Следующие действия приведут к удалению записи из базы данных Students.mdb. 3. Щелкните на кнопке Удалить в форме. Появится диалоговое окно Удаление записи, как показано на следующем рисунке:
432 Часть 4. Управление корпоративными данными Удаление записи ..— 4. Щелкните на кнопке ОК для удаления записи. Запись Основной курс по химии будет удалена из базы данных. 5. Щелкните на кнопке Выход для завершения работы программы. Вы закончили работу с объектом типа данные в этом уроке. Чтобы по- больше узнать о создании приложений для обработки баз данных, введи- те ключевое слово Recordset property в текстовое поле на вкладке Index (Предметный указатель) в оперативной справочной системе MSDN Library и просмотрите текст программ приложений, включенных в комп- лект поставки Visual Basic в качестве образцов. Шаг вперед: создание архивной копии файла Если информация, которую вы храните в базах данных, очень важна для вас и вам не хотелось бы ее терять, необходимо регулярно делать архи- вные копии каждой базы данных, прежде чем вносить в нее изменения. Если что-то происходит в процессе вашей работы с копией, вы можете просто заменить копию оригинальной базой данных. Для архивации дан- ных и создания резервных копий вы можете использовать отдельную программу архивации, средства Windows Explorer (Проводник Windows) или специальную функцию в вашей программе обработки базы данных. В ка- честве дополнительной меры защиты вы можете создать архивную ко- пию одного или нескольких файлов в программе Visual Basic с использо- ванием оператора FileCopy. Команда FileCopy создает отдельную копию файла (точно так же, как это делает команда Edit Сору в Windows Explorer) при следующем синтаксисе оператора: FileCopy sourcepath destinationpath где sourcepath представляет имя пути к файлу, для которого вы хотите создать копию, a destinationpath - имя пути к файлу копии.
Урок 13. Управление базами данных Access 433 Примечание. Команда FileCopy не действует, если файл, заданный в аргументе sourcepath, в настоящее время является открытым. В следующем упражнении вы добавите в программу MyDelRec возможность создания резервной копии, поместив в процедуру обработки прерывания Form_Load оператор FileCopy. Использование команды FileCopy для создания резервной копии базы данных Students.mdb Прежде всего сохраните программу MyDelRec под новым именем, чтобы предотвратить внесение изменений в оригинал. Если программа MyDelRec не открыта, загрузите проект Del Rec. Vb р с диска и отобразите его форму. 1. В меню File (Файл) щелкните на команде Save MyDelRec.frm As (Сохранить MyDelRec.frm как). Сохраните форму MyDelRec под именем MyBackup.frm. Воспользуйтесь командой Save Project As (Сохранить проект как), чтобы сохранить проект под именем MyBackup.vbp. 2. Если форма не видима, выделите форму в окне Project (Про- ект), щелкните на кнопке View Object (Просмотр объекта). 3. Дважды щелкните на форме (не на объекте), чтобы открыть в окне Code процедуру обработки прерывания Form_Load. Поме- стите в начало процедуры оператор FileCopy, чтобы дать возмож- ность пользователю создать архивную копию базы данных, прежде чем вносить в нее какие-либо изменения. 4. Введите следующие программные операторы в процедуру обработки прерывания Form_Load: prompt$ = _ "Вы хотите создать резервную копию ваших данных?" reply = MsgBox(prompt$, vbOKCancel, datStudent.DatabaseName) If reply = vbOK Then 'если нажата кнопка OK FileNmS = lnputBox$_ (“Введите путь где будет создана резервная копия.") If FileAJm$ о"" Then _ FileCopy datStudent.DatabaseName, FileNm$ End If
434 Часть 4. Управление корпоративными данными Эта процедура отображает сообщение при запуске программы, запрашивающее пользователя, хочет ли он сделать архивную копию базы данных. В функции MsgBox используется аргумент vbOKCancel, чтобы пользователь мог отказаться от создания ар- хивной копии. В функции MsgBox также используется свойство DatabaseName (Имя базы данных) для отображения в заголовке диалогового окна имени базы данных. Если пользователь щел- кает на кнопке ОК, появляется еще одно окно сообщения, в ко- тором пользователь выбирает путь к архивному файлу, после чего команда FileCopy осуществляет копирование файла. Команда FileCopy создает копию базы данных. 5. Закройте окно Code, а затем щелкните на кнопке Save Project (Сохранить проект) для сохранения внесенных изменений. Теперь запустим программу и посмотрим, как работает функция созда- ния архивной копии. Запустим программу MyBackup О1. Щелкните на кнопке Start (Пуск) на панели инструментов. На экране появится следующее диалоговое окно с запросом, хоти- те ли вы создать архивную копию базы данных: C:Wb6Sbs\LessO3\Students.mdb Д'? Вы хотите сознать резервную копию ваших данных? 2. Щелкните на кнопке ОК, чтобы создать резервную копию файла. Появится диалоговое окно с запросом пути к файлу ре- зервной копии. Законченная программа Backup содержится в папке \Vb6Sbs\Less13. 3. Введите C:\Vb6Sbs\Lessl3\myStudents.mdb, а затем щелк- ните на кнопке OK. Visual Basic скопирует базу данных Students.mdb в папку с учебными файлами урока 13 и присвоит ей имя MyStudents.mdb. Теперь, на случай ошибки или потери базы данных Students.mdb, у вас имеется резервная копия. 4. Щелкните на кнопке Выход для завершения работы программы.
Урок 13. Управление базами данных Access 435 Чтобы повысить производительность Не пожалейте нескольких минут и поработайте с утилитой Bookinfo (Биб- лиографическая база) (bookinfo.vbp) в папке \Vb6Sbs\Extras на вашем жес- тком диске. Я написал эту программу, чтобы дать вам возможность по- практиковаться с базами данных. Приложение представляет собой интерфейс для базы данных Biblio.mbd, которая поддерживается много- численными версиями Visual Basic и Microsoft Access. Файл Biblio.mbd со- держит полезную информацию о базе данных программных и техничес- ких средств из различных изданий. Я иногда использую ее, чтобы найти специальную книгу, необходимую для моей практики по программирова- нию базы данных. (В базе данных содержится около 10000 записей.) Ути- лита показывает выбор полей и записей из базы данных. Вы можете ис- пользовать готовую программу для поиска ваших любимых книг или попрактиковаться и дополнить ее другими базами данных. Если вы хотите перейти к следующему уроку: >- не вызодя из Visual Basic, перейдите к уроку 14. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Открыть базу дан- ных Используйте средство управления Data (Данные) для создания объекта типа данные в форме, а затем ус- тановите свойство DatabaseName (Имя базы данных) для задания имени базы данных. Задайте типы базы данных с помощью свойства Connect (Связь), затем задайте тип записи с помощью свойства RecordsetType (Типа записи). Открыть базу дан- ных только для чте- ния Установите для свойства Readonly (Только чтение) объекта типа данные значение True (Истина). Отобразить содер- жимое поля данных в объекте типа тек- Установите свойства DataField (Поле данных) и DataSource (Источник данных) в текстовом поле. стовое поле
436 Часть 4. Управление корпоративными данными Чтобы Сделайте следующее Найти требуемые данные в базе дан- ных Запросите пользователя о поиске нужной строки, а затем используйте свойства Index, Seek, NoMatch и MoveFirst объекта Recordset (Набор записей) в проце- дуре обработки прерывания, например: Prompt$ = "Введите полное наименование курса." SearchStr$ = InputBox (Prompts, "Поиск курса”) DatStu dent. Reco rdset. 1 ndex = "ClassName" datStudent.Recordset.Seek "=" SearchStrS If datStudent.Recordset.NoMatch Then MsgBox (“Курс не найден.") End If Добавить запись в базу данных Используйте команду AddNew для объекта Recordset (Набор записей), например: datStudent.Recordset.AddNew Добавить поле в за- пись базы данных в тексте программы Задайте имя поля в качестве свойства объекта Recordset (Набор записей), проверьте правильность формата данных, например: datStudent. Recordset.PublD = 14 Удалить запись из базы данных Используйте команду Delete для объекта Recordset (Набор записей), например: datStudent. Recordset.Delete Отобразить первую запись базы дан- ных Используйте команду MoveFirst для объекта Recordset (Набор записей), например: datStudent.Recordset. MoveFirst Скопировать файл Используйте команду FileCopy, например: FileCopy datStudent.DatabaseName, FileNm$ Вывести объект на первый план Используйте команду SetFocus для объекта, напри- мер: txtTitle. SetFocus
УРОК . as 14- as в as as в Взаимодействие : c Microsoft Office > Ш > И ___________________________________________ « Вы научитесь: _ « '^А-^ создавать информационные системы предприятия с по- в мощью средств управления OLE; Урок я , „ устанавливать активные связи между файлами, создан- рассчитан _ „. , на “ ными приложениями для Microsoft Windows; 45 минут использовать средство Object Browser (Просмотр объектов) для просмотра объектов приложений; использовать средство Automation (Автоматизация), ранее я известное как OLE Automation, для взаимодействия с Microsoft Word, Microsoft Excel, Microsoft Outlook и я Microsoft Power Point. я ------------------------------------------ ’ В ходе урока 3 вы узнали, как использовать средства OLE для запуска приложений Windows в ваших программах. “ Программа Microsoft Visual Basic специально была разра- ботана для простого и эффективного объединения и взаи- " модействия данных и функций различных приложений для Windows. В этом уроке вы узнаете, как спроектировать информаци- а онную систему предприятия (EIS — от Enterprise Information System) с помощью средств управления OLE и данных из а различных приложений Microsoft Office. Вы также узнаете, как использовать средство Object Browser (Просмотр объектов) для просмотра различных объектов приложений из про-
438 Часть 4. Управление корпоративными данными грамм для Windows, а также средство Automation (Автоматизация) для включения функций Word, Excel, Outlook и PowerPoint в ваши проекты. Создание информационной системы предприятия EIS является приложением, обеспечивающим обмен важной деловой ин- формацией посредством простого и доступного интерфейса. Информаци- онные системы предприятий часто разрабатываются службами управ- ления информацией (MIS) или специалистами по созданию и работе с базами данных, поскольку в этом случае необходим опыт в организации и форматировании данных, получаемых от специализированных программ управления базами данных, таких как Oracle и Microsoft SQL Server. Пользователями EIS-приложений чаще всего являются сотрудники, ко- торые имеют недостаточный опыт в управлении базами данных. Как пра- вило, это люди, которые должны иметь доступ к различным информаци- онным материалам для эффективной организации работы предприятия. В этом разделе вы создадите простую EIS, которая будет отображать за- писи из базы данных Microsoft Access, фотографические изображения, отредактированные в программе Paint, и данные по продажам из рабо- чих листов и диаграмм Microsoft Excel. Чтобы создать EIS, вы используе- те средства управления OLE Visual Basic и несколько приложений Microsoft Office. Использование информационных систем предприятий Хорошая информационная система предприятия объединяет данные и функции различных приложений для создания мощных инструмен- тов управления. Ниже приведен список примеров использования EIS-приложений, который поможет вам сориентироваться в исполь- зовании средств управления OLE Visual Basic и существующих до- кументов Office при выработке собственных решений в организации деятельности вашего предприятия. В этом уроке будут рассмотрены различные приемы, необходимые для создания функциональных EIS. Система регистрации заказов. Пользователи могут отображать фор- мы данных и поступающие заказы с помощью Excel, они также могут создавать отчеты по объемам продаж с помощью Word.
Урок 14. Взаимодействие с Microsoft Office 439 Управление людскими ресурсами. Пользователи могут управлять за- писями для сотрудников предприятия в базе данных Access и обзо- ром персонала, хранящимся в виде документов Word, а также редак- тировать фотоизображения с помощью программы Paint. Средства финансового анализа. Пользователи могут анализировать данные бухгалтерских документов, хранящиеся в файлах Excel, и получать финансовую информацию через сетевые службы. Система управления товарами. Обслуживающий персонал может просматривать информацию о товарах, хранящуюся в виде баз дан- ных Oracle или SQL Server, что помогает руководству вырабатывать ценовую политику и принимать решения по управлению производ- ством. Информационная система для работы с клиентами. Главный менед- жер через службу электронной почты Microsoft Mail имеет доступ ко всей деловой переписке, хранящейся в виде документов Word, а так- же к необходимым базам данных в Access. Система управления проектами. Пользователи могут планировать уп- равление информацией с помощью Microsoft Project, отслеживать маркетинговые проекты с помощью Excel, создавать отчеты и сооб- щения с помощью Word и готовить презентации средствами Microsoft PowerPoint. Использование средств управления OLE Вы можете использовать средства управления OLE для вставки объек- тов из приложений в ваши программы на Visual Basic. Типы объектов, к которым вы можете иметь доступ, зависят от тех приложений Windows, которые установлены в вашей системе. Каждое поддерживающее объек- ты приложение регистрируется в специальной системной базе данных, определяющей, с какими объектами вы можете работать. Вы выбираете объекты в диалоговом окне Insert Object (Вставка объекта), которое отобра- жается при первом обращении к средству управления OLE. В качестве примеров объектов приложений можно привести листы и диаграммы Excel, документы Word и изображения Microsoft ClipArt. Объектами при- ложений могут быть как новые, пустые документы, так и существующие файлы, загружаемые с диска. В следующем упражнении вы используете объект типа данные, объект типа изображение, два объекта OLE, а также несколько меток и тексто-
440 Часть 4. Управление корпоративными данными вых полей для создания EIS-приложения для получения информации о музыкальных группах и выпущенных ими альбомах в районе Сиэтла. Это простое EIS-приложение отображает фотографию, записи из базы дан- ных Access и данные из рабочего листа таблиц Excel и диаграмму. По за- вершении ваше приложение будет выглядеть на экране следующим об- разом. Растровая фотография Поля базы данных Access ...„...........I.............. Talent EIS "Тлиинты Си энпскиго Бита" 'Телефонисты" Сиэтл 1206)555-0000 10 КуинЗ нн Авеню "Таланты Сиэтлского бита" Полугодовые продажи CD (1998) WA Выход | Янв. Февр Март Апр. Май Июнь Сиэтл 1250 1800 2000 1650 1500 1450 Портленд т 900 ......1400 .....160П ~ 1200 .....1250 i’l50l 2000 1500 1000 500 0 Сиэтл Портленд Янв. Март Апр. Маи Июнь Февр. I 8 Лист таблицы Excel Диаграмма Excel Создание приложения MusicEIS 1. Запустите Visual Basic. Если Visual Basic уже запущен, щелкните на кнопке New Project (Создать проект) в меню File (Файл). Окно приложения, которое вы будете создавать, больше окна стандартной формы, поэто- му вам потребуется увеличить размеры окна формы. 2. Увеличьте размеры формы в высоту и в ширину, перетащив мышью правый нижний угол окна Project (Проект) и окна Form
Урок 14. Взаимодействие с Microsoft Office 441 (Форма) вниз и вправо. Чтобы увеличить рабочее пространство на экране, вам, возможно, придется убрать или свернуть одну или более панелей инструментов. При изменении размеров форм и окон указатель мыши прини- мает вид размерного указателя. 3. С помощью кнопки управления Label (Метка) создайте боль- шое поле метки вверху и в середине формы. В этом объекте будет содержаться заголовок программы. Мес- торасположение и размеры объектов, используемых в этом упражнении, вы можете уточнить по предыдущему рисунку. 4. С помощью кнопки управления Image (Изображение) создай- те объект типа изображение ниже метки в левой части формы. Здесь будет размещаться фотоизображение, полученное с по- мощью сканера и сохраненное в виде файла .bmp. 5. Используйте кнопку управления TextBox (Текстовое поле) для создания пяти объектов типа текстовое поле справа от объек- та типа изображение. Эти текстовые поля будут связаны с базой данных Access и дол- жны содержать имена, адреса и номера телефонов музыкан- тов фиктивной компании «Сиэтл Бит». 6. Используйте кнопку управления Data (Данные), чтобы доба- вить в форму объект типа данные ниже последнего текстового поля. Объект типа данные будет использоваться для прокрутки за- писей в базе данных. 7. Используйте кнопку управления CommandButton (Командная кнопка), чтобы добавить командную кнопку ниже объекта типа данные. Эта командная кнопка будет использоваться для выхода из программы. 8. Установите следующие свойства для объектов вашей фор- мы. База данных и файл сканированного изображения .bmp содержатся в nanKe\Vb6Sbs\Less14.
442 Часть 4. Управление корпоративными данными Объект Свойство Установленное значение Forml Caption (Надпись) Talent EIS Labell Caption (Надпись) Таланты Сиэтлского Бита Font (Шрифт) Times New Roman, Bold Italic, 24-point ForeColor (Цвет букв) Dark red (Темно-красный) Imagel BorderStyle 1 - Fixed Single (Тип рамки) (Одиночная сплошная) Stretch (Изменение размера) True (Истина) Picture (Рисунок) С: \ Vb6Sbs\Less 14\Flytwork.bmp Datal Caption (Надпись) Talent Connect (Связь) Access DatabaseName (Имя базы данных) C:\Vb6Sbs\Lessl4\Talent.mdb Readonly (Только чтение) True (Истина) RecordSource (Источник записей) Artists Textl DataSource (Источник данных) Datal DataField (Поле данных) Name Text (Текст) (Empty) (Пусто) Text2 DataSource (Источник данных) Datal DataField Address (Поле данных) Text (Текст) (Empty) (Пусто) Text3 DataSource (Источник данных) Datal DataField City (Поле данных) Text (Текст) (Empty) (Пусто)
Урок 14. Взаимодействие с Microsoft Office 443 Объект Свойство Установленное значение Text4 DataSource (Источник данных) Datal DataField State (Поле данных) Text (Текст) (Empty) (Пусто) Text5 DataSource (Источник данных) Datal DataField WorkPhone (Поле данных) Text (Текст) (Empty) (Пусто) Commandl Caption (Надпись) Выход 9. Дважды щелкните на командной кнопке Выход и введите End в текст процедуры обработки прерывания Command1_Click. Этот программный оператор закрывает ваше приложение при щелчке на кнопке Выход. 10. Используйте команду Save Forml As (Сохранить Forml как) для сохранения формы под именем MyMusicEIS.frm, а затем с помощью команды Save Project As (Сохранить проект как) сохра- ните ваш проект под именем MyMusicEIS.vbp. Сохраните ваше EIS-приложение в папке Lessl 4. Теперь вы готовы ввести в ваше приложение лист рабочей таблицы Excel и диаграмму с помощью средств управления OLE. Вставим объекты приложения В следующих действиях вы используете средства управления OLE для связывания вашего EIS-приложения с рабочим листом таблицы Excel и ее диаграммой. 1. Щелкните на кнопке управления OLE, а затем создайте боль- шую прямоугольную рамку в левом углу формы EIS-приложе- ния. После того, как вы нарисовали рамку и отпустили кнопку мыши, появляется диалоговое окно Insert Object (Вставка объекта), как показано на следующем рисунке:
444 Часть 4. Управление корпоративными данными FolderChooser Class Г Display As Icon Innage Document Kodak Image Scan Control LM Runtime Control Inserts a new Bitmap Image object into your document. В диалоговом окне Insert Object (Вставка объекта) содержится список объектов, которые вы можете связать с приложением или внедрить в него. Связанный объект содержит данные, ко- торые управляются тем приложением, в котором был создан объект. Этот объект хранится в виде файла соответствующего приложения, а не в вашем приложении для Visual Basic. Вне- дренный объект содержит данные, хранящиеся внутри ваше- го приложения Visual Basic. Другие приложения также могут иметь доступ к связанным объектам - например, другие пользо- ватели в вашем офисе могут изменять тот рабочий лист табли- цы Excel, который вы связали с приложением Visual Basic, но только одно приложение (в данном случае приложение MyMusicEIS) может иметь доступ к внедренному объекту. В диалоговом окне Insert Object (Вставка объекта) содержится список объектов, зарегистрированных в вашей системе. 2. Щелкните на кнопке выбора Create From File (Создать из фай- ла) в диалоговом окне Insert Object (Вставка объекта). В диалоговом окне появится имя пути к объекту. Следует вы- бирать опцию Create From File (Создать из файла), если вы хотите добавить в вашу программу объект, содержащийся в виде су- ществующего файла. 3. Установите флажок Link (Связь), чтобы создать в вашем при- ложении связанный объект.
Урок 14. Взаимодействие с Microsoft Office 445 Если установлен флажок Link (Связь), рисунок или файл, выб- ранный вами, будет загружен в объект типа OLE. Поскольку файл является связанным объектом, он будет существовать и вне приложения Visual Basic, а совершенные над ним измене- ния будут отражены и в вашей программе при ее работе. 4. Щелкните на кнопке Browse (Обзор) для поиска файла Excel, который вы хотите связать с вашей программой. 5. В диалоговом окне Browse (Обзор) перейдите к папке Lessl 4, а затем щелкните на рабочем листе Sales_98 Excel. Когда снова по- явится диалоговое окно Insert Object (Вставка объекта), щелкни- те на кнопке ОК, чтобы установить связь с файлом Sales_98. Через некоторое время изображение таблицы Excel появится в качестве объекта OLE. (Если данные в таблице невидимы, увеличьте размеры объекта OLE.) Ваша форма должна выгля- деть подобно представленной на рисунке: В этой таблице показан объем продаж музыкальных записей компании «Сиэтл Бит» за период в шесть месяцев. Поскольку
446 Часть 4. Управление корпоративными данными объект OLE был связан с таблицей Excel, сотрудники «Сиэтл Бит» могут обновлять рабочий лист Sales_98.xls таблицы Excel, а внесенные изменения будут отражены в приложении Talent EIS. Доступ к текущей информации по продажам поможет пер- соналу компании отслеживать данные объемов продаж по ре- гионам. Теперь вы скопируете диаграмму из рабочего листа Sales_98 и вставите ее в новый объект OLE. Примечание. Следующие действия подразумевают, что в вашей системе установ- лена программа Microsoft Excel for Windows 5.0 или выше. (На рисун- ке приведены фрагменты из Microsoft Excel 97.) Скопируем и вставим диаграмму объемов продаж 1. Щелкните на кнопке управления OLE, а затем создайте пря- моугольную рамку в правом нижнем углу формы. Как только вы отпустите кнопку мыши, появится диалоговое окно Insert Object (Вставка объекта). 2. Щелкните на кнопке Cancel, чтобы закрыть диалоговое окно Insert Object (Вставка объекта). В данном случае вы поместите в форму только часть файла рабочего листа — диаграмму объемов продаж - в объект OLE. Чтобы включить определенную часть файла, вы должны ско- пировать ее из соответствующего приложения, а затем вста- вить ее в объект OLE с помощью команды Paste Special (Специ- альная вставка). Чтобы вставить часть файла в объект OLE, воспользуйтесь командой Paste Special (Специальная вставка). 3. Запустите Excel, откройте рабочий лист Sales_98.xls из папки \Vb6Sbs\Less14. Ваш экран должен выглядеть так, как изображено на следую- щем рисунке:
Урок 14. Взаимодействие с Microsoft Office 447 4. Щелкните на рамке диаграммы продаж, а затем щелкните на команде Сору (Копировать) из меню Edit (Правка). Копия диаграммы будет помещена в Буфер обмена Windows. 5. Вернитесь в среду программирования Visual Basic. 6. Установите указатель мыши на пустой объект OLE в форме и щелкните правой кнопкой мыши. Рядом с объектом OLE появится контекстное меню. Для доступа к команде Paste Special (Специальная вставка) вы можете щелкнуть правой кнопкой мыши. 7. Щелкните на команде Paste Special (Специальная вставка) в контекстном меню для вставки диаграммы Excel в объект OLE. Появится диалоговое окно Paste Special (Специальная вставка), как показано на следующем рисунке:
448 Часть 4. Управление корпоративными данными f Eeste <-Result— - Stock J Г pa^l,wk Paste Special Г Sfepl^Asicon Inserts the contents 4t theeltpbciatd ftttoycur document so that you may activate ft using Microsoft Excel. 8. Щелкните на кнопке выбора Paste Link (Вставить связь) в диа- логовом окне, чтобы указать, что вы хотите вставить связь с диаграммой Excel в объект OLE. Если диаграмма связана с про- граммой MyMusicEIS, то любое изменение, внесенное в диаграм- му при работе в Excel, будет отражено в программе МуМ usicEIS. 9. Щелкните на кнопке ОК в диалоговом окне Paste Special (Спе- циальная вставка) для связи с диаграммой объемов продаж. Диаграмма появится в объекте OLE, как показано на рисунке: "Галанты Сиэтлского бита" Полугодовые продажи CD (1998) Сиэтл Портленд 2000 Янв. 1250: 900 1500 Февр. 1800: 1400 1000 Март 2000: 1600 500 Апр. 1660 1200 0 ’Май 1500' 1250 Июнь 1450: 1150 Ян в. МартАпр. июнь Февр. Сиетл Р’" Портленд
Урок 14. Взаимодействие с Microsoft Оffice 449 Теперь вам осталось вставить две строки в текст программы, которые обновляют связи с вашими файлами Excel при работе приложения EIS. 10. Дважды щелкните на форме для открытия процедуры об- работки прерывания Form_Load в окне Code, а затем введите сле- дующие операторы в текст процедуры: 0LE1.Update 0LE2.Update Эти операторы используют команду Update для загрузки изме- ненных файлов Excel, связанных с вашим приложением Visual Basic. После добавления этих операторов ваша программа бу- дет несколько медленнее загружаться, но зато вы всегда буде- те располагать последними версиями связанных файлов, если они используются другими пользователями. 11. Щелкните на кнопке Save Project (Сохранить проект) для со- хранения вашего приложения EIS на диске. Теперь запустим EIS и посмотрим, как программа представляет данные, полученные из разных источников. Запустим Информационную систему предприятия (EIS) 1. Щелкните на кнопке Start (Пуск) для запуска программы. Базовая программа MusicEIS содержится в папке \Vb6Sbs\Less14. EIS загружает данные из трех источников и отображает их на экране. 2. Щелкните на правой внутренней стрелке объекта типа дан- ные, чтобы просмотреть список музыкальных групп Сиэтла из базы данных. После щелчков на кнопках со стрелками объекта типа данные в текстовых полях будут отображаться различ- ные имена, адреса и номера телефонов. В данном примере име- ется всего одно фотоизображение, поэтому картинка остается одной и той же для всех записей. Если же вы установите связь с базой данных, содержащей поля с фотоизображениями, вы сможете отображать различные точечные рисунки в поле изоб- ражения, установив для свойства DataField (Поле данных) объек- та типа изображение соответствующее поле из базы данных.
450 Часть 4. Управление корпоративными данными 3. Дважды щелкните на таблице продаж за шесть месяцев в вашей форме. Visual Basic запустит Excel - приложение, в котором была со- здана таблица - и загрузит рабочий лист Sales_98.xls. Посколь- ку вставляемый объект связан с рабочим листом, Visual Basic дает вам возможность вносить изменения в оригинальную таб- лицу и сохранять их в виде оригинального файла. Примечание. Если вы не хотите, чтобы пользователь мог запускать Excel и вносить изменения в связанный файл, установите для свойства Enabled (Раз- решено) объекта OLE значение False (Ложь). 4. Переместите курсор в ячейку С7 в таблице продаж, введите 0 (ноль) и нажмите клавишу | Enter |. Количество компакт-дисков, проданных в Портленде за март, изменится с 1600 на 0. 5. В меню File (Файл) в приложении Excel щелкните на Exit (Вы- ход), а затем щелкните на кнопке Yes (Да), чтобы сохранить вне- сенные изменения. Оригинальная таблица продаж будет обновлена, а программа Excel - закрыта. Форма EIS появится с новым значением в таб- лице. Тем не менее, диаграмма данных по продажам в EIS не будет обновлена в соответствии с новым значением за март. Visual Basic обновляет содержимое объекта OLE только в том случае, если вы активизируете связь двойным щелчком на объекте OLE для его открытия, или если вы не используете в тексте программы команду Update для обновления связи. В дру- гих случаях Visual Basic сохраняет данные в том виде, в кото- ром они были при загрузке, чтобы данные не «исчезали» в про- цессе работы. Если же вы хотите, чтобы Visual Basic немедленно реагировал на изменения в объекте, можете поместить команду Update в специальную процедуру обработки прерывания с именем 0LE1-Updated, которая выполняется всякий раз при изменении объекта OLE. Как вы можете видеть, Visual Basic позволяет контролировать, насколько часто будут обновляться связанные данные.
Урок 14. Взаимодействие с Microsoft Office 451 6. Щелкните на кнопке Выход, чтобы закрыть приложение MyMusicEIS. Вы закончили работу со средствами управления OLE. Программирование объектов приложений с помощью средства Automation (Автоматизация) В предыдущем разделе вы узнали, как вводить объекты из приложений для Windows в ваши программы Visual Basic. В этом разделе вы узнаете, как использовать средство Automation (Автоматизация) для ввода функ- циональных особенностей приложений для Windows в текст вашей про- граммы. (Ранее это средство носило название OLE Automation.) Приложения для Windows, полностью поддерживающие функцию Automation (Автоматизация), позволяют осуществлять доступ к своим фун- кциям в виде набора объектов с соответствующими им свойствами и ко- мандами. Приложения для Windows, которые предоставляют свои объекты, называются объектными или серверными приложениями, а программы, эти объекты использующие, называются управляющими или клиентскими приложениями. Современные приложения Microsoft мож- но использовать как другие объекты или как управляющие приложения, например: Microsoft Visual Basic Microsoft Word 97 Microsoft Excel 97, Microsoft Excel 95, Microsoft Excel 5.0 Microsoft PowerPoint 97 Microsoft Project 97, Microsoft Project 95 Microsoft Outlook 97, Microsoft Outlook 98 Использование средства Automation (Автоматизация) в Visual Basic В Visual Basic 6 вы можете создавать как объектные, так и управляющие приложения, поддерживающие функцию Automation (Автоматизация). Создание объектов приложений, которые предоставляют свои функцио- нальные особенности, требует наличия версий Visual Basic Professional или Enterprise, которые и рассматриваются в данной книге. Создание уп- равляющих приложений, использующих особенности объектов приложе- ний, возможно во всех версиях Visual Basic 6.
452 Часть 4. Управление корпоративными данными Примечание. Все приложения в Microsoft Office 97 (Excel, Word, Access, PowerPoint и Microsoft Outlook) способны предоставлять свои функциональные особенности с помощью средства Automation (Автоматизация). Посколь- ку особенности и объекты, обеспечиваемые каждым из этих прило- жений, являются уникальными, вам понадобится просмотреть доку- ментацию на программные продукты или воспользоваться оперативной справочной системой для соответствующей программы, прежде чем вы будете вводить зти функции в текст вашей програм- мы. Если Microsoft Office установлен в вашей системе, средство Object Browser (Просмотр объектов) Visual Basic позволит вам изучить дос- тупные для вас объекты, свойства и команды. В следующих нескольких разделах вы узнаете, как написать приложе- ние Visual Basic, использующее объект Word для проверки правописа- ния в текстовом поле. Как вы увидите, объекты, свойства и команды, пре- доставляемые объектным приложением, обычно соответствуют командам меню и опциям диалоговых окон данного приложения. Средство Object Browser (Просмотр объектов) Visual Basic Средство Object Browser (Просмотр объектов) Visual Basic является утили- той, имеющей два применения: оно может использоваться для отображе- ния объектов, свойств и команд в программе при работе в окружении Visual Basic; или же можно использовать это средство для отображения объектов, свойств и команд, доступных вам из объектного приложения, установленного в вашей системе. В следующем упражнении вы исполь- зуете средство Object Browser для просмотра объектов Automation (Автома- тизация), предоставляемых Word. Средство Object Browser (Просмотр объектов) позволяет вам просмат- ривать объекты в вашей системе. I Примечание. I В примере используется библиотека объектов Word 8.0 Object Library, I входящая в состав Microsoft Word 97. Если у вас нет этой версии Word, I используйте Object Browser (Просмотр объектов) для изучения других I объектов из приложений в вашей системе.
Урок 14. Взаимодействие с Microsoft Office 453 Использование средства Object Browser (Просмотр объектов) для просмотра объектов Word 1. В меню File (Файл) щелкните на команде New Project (Создать проект), а затем щелкните на кнопке ОК.Приложение MyMusicEIS будет закрыто, и появится новая форма. Вы добавите ссылку на библиотеку объектов Word Object Library в этот новый проект. 2. В меню Project (Проект) щелкните на команде References (Ссыл- ки). Появится диалоговое окно References (Ссылки), в котором вы можете включить в ваш проект ссылки на любую библиотеку объектов, доступную в вашей системе. Введение ссылок в ваш проект не увеличит размеры вашей программы после компи- ляции, но чем больше ссылок вы используете, тем больше вре- мени будет затрачивать Visual Basic на компиляцию програм- мы. Следовательно, Visual Basic добавляет ссылки в объектные библиотеки Automation (Автоматизация) только в том случае, если вы на это укажете. Диалоговое окно References (Ссылки) позволяет вам вводить ссылки на объектные библиотеки в вашем проекте. 3. Установите флажок напротив ссылки Microsoft Word 8.0 Object Library. Чтобы найти данную библиотеку, вам, возможно, при- дется осуществить прокрутку списка. (Ссылки расположены в алфавитном порядке.) Ваш зкран будет выглядеть так, как по- казано на следующем рисунке: Refeiences - Project! I Microsoft SQL Parser Object Library 1.0 Microsoft Television System Services : J Microsoft VB T-5QL Debugger Object Library 1.0 ; I Microsoft Visual Basic 6.0 Extensibility j Microsoft Visual Basic for Applications Extensibility П Microsoft WebClass Library vl.O JMicrosoft WebClass Library vl.O , : ] Microsoft Windows Scripting Host Object Model (VI .0~-J I Microsoft XML 1.0 s-ss □ msawt 1.0 Type Library :Jmsdfmap 1.0 Type Library
454 Часть 4. Управление корпоративными данными 4. Щелкните на кнопке ОК, чтобы закрыть диалоговое окно и добавить ссылку в ваш проект. Теперь вы готовы к использованию средства Object Browser (Про- смотр Объектов). 5. В меню View (Вид) щелкните на команде Object Browser (Про- смотр Объектов). Ваш экран будет выглядеть так, как показано на рисунке: Object Browser | Classes j@i<globals> [ j® Addin.............. j® Addins J® Adjustments AlignConstants Alignmentconstants I® AmblentProperties |® App ©embers trf’«global»»’ AuS й? ActiveDocument Й? ActivePrinter tiSf ActiveWindow Й? Addins Й? App • jS AppActivate Й? Application Окно Object Browser (Просмотр Объектов) содержит открываю- щийся список Project/Library (Проект/Библиотека), который вы можете использовать для отображения объектных библиотек, включенных в ваш проект. Оно также содержит открывающий- ся список Search Text (Поиск текста) для задания ключевого сло- ва для поиска, и список Classes (Класс), который вы можете ис- пользовать для выбора нужного объекта для просмотра. При выборе объекта в списке Classes (Класс) в списке Members (Эле- менты) отображаются все команды, свойства и события, ассо- циированные с данным объектом. 6. Щелкните на направленной вниз стрелке, чтобы открыть спи- сок Project/Library (Проект/Библиотека), а затем щелкните на объектной библиотеке Word. В списке Classes (Класс) появится перечень объектов, поддер- живаемых средством Automation (Автоматизация).
Урок 14. Взаимодействие с Microsoft Office 455 7. Прокрутите вниз список Classes (Класс), а затем щелкните на объекте Application (Приложение). В списке Members (Элементы) появится перечень команд и свойств, ассоциированных с объектом Application (Приложение). Это команды Word, предназначенные для обработки информа- ции в документе. 8. Щелкните на команде Checks pell ing (Проверка орфографии) в списке Members (Элементы). В нижней части окна Object Browser (Просмотр объектов) появит- ся синтаксис команды СheckSpel ling (Проверка орфографии). Эта команда задействует систему проверки правописания Word, которая теперь может быть доступна из Visual Basic. В описа- нии команды приведены возможные опции, позволяющие при- способить команду под требуемые вам действия. Ваш экран должен выглядеть так, как показано на следующем рисунке: Members of Application' Й1 Caption Й? CaptionLabels •aS CentimetersToPoints ChangeFileOpenDirectoty s® CheckGrammar sS CleanStrlng Й1 CommandBars Й1 Creator Й? CustomDictionaries ’Classes о «globais* Ш Addin Й Addins Adjustments SiApPl'P^on Ш Auto С a ption Ш AutoCaptions Auto Correct ® AutoCorrectEntries а AutoCorrectEntry Checkspelling Function CheckSpeKngl IVora As String, [CustomOKtk>nat& [fgnoieUppercaeeb -I [Ma/nDiefiona/il. [Ci/stomD/ctonay?]. [CustomDKtonaiyJI. _J [CjstomDrhonsr/^, [CusiwnDidwwj'i!, [Cus;om3rctowrv6], , rr .WimO.. tmnsiva. ЮЛЧ»ПЛ5ОИЮПЯ1-Я tCurJnm "Мя-гойл/И JJ 9. Щелкните на знаке вопроса в верхней части окна Object Browser (Просмотр объектов). В программном окружении будет открыт файл помощи для ко- манды CheckSpelling (Проверка орфографии). В этом справочном файле содержится подробная информация об использовании свойств и команд для объектной библиотеки
456 Часть 4. Управление корпоративными данными Word. Многие из объектных приложений обеспечивают такую информацию об используемых в них библиотеках объектов, чтобы программисты, использующие средство Automation (Ав- томатизация), могли воспользоваться данными о программных функциях, свойственных данному приложению. С помощью справочной системы объектной библиотеки вы можете больше узнать о программировании с помощью средства Automation (Ав- томатизация). В справочной системе объектной библиотеки описываются свойства и команды, используемые объектным приложением. 10. Просмотрите статью о команде CheckSpelling (Проверка ор- фографии), а затем закройте файл помощи. 11. Щелкните на кнопке Close в окне Object Browser (Просмотр объектов). Вы закончили изучение объектов Automation (Автоматизация). Теперь по- смотрим, как работает команда CheckSpelling (Проверка орфографии) Word. Автоматизация: обращение к Word из Visual Basic Чтобы использовать команды Word CheckSpelling (Проверка орфографии) в программе Visual Basic, вам потребуется выполнить следующие шаги. Поскольку эти приемы могут быть применены к большинству объектов приложений, вы можете использовать приведенные действия в качестве образца для работы с большинством приложений, поддерживающих фун- кцию Automation (Автоматизация). Шаг 1. Введите ссылки на необходимую объектную библиотеку в вашем проекте с помощью команды References (Ссылки). Шаг 2. Напишите вашу программу на Visual Basic. В процедуре обработ- ки прерывания, где планируется использовать средство Automation (Авто- матизация), создайте переменную типа объект с использованием опера- тора Dim, а затем загрузите объект типа Automation (Автоматизация) в эту переменную с помощью функции CreatObject: Dim X As Object 'использовать X в качестве переменной Set X = CreateObject("Word.Application") Шаг 3. Используйте команды и свойства объекта типа Automation (Автома- тизация) в процедуре обработки прерывания, при необходимости обра-
Урок 14. Взаимодействие с Microsoft Office 457 щаясь к справочным файлам в Object Browser (Просмотр объектов) или к документации на данное приложение для проверки синтаксиса: X.Visible = False X.Documents.Add X. Selectio n .Text = Textl .Text X.ActiveDocument.CheckSpelling Textl .Text = X. Selectio n .Text 'скрыть Word 'открыть новый документ 'скопировать текстовое окно в документ 'запустить проверку 'скопировать результаты обратно Шаг 4. По окончании использования объектного приложения выйдите из него и очистите переменную типа объект для освобождения памяти: X.Quit Set X = Nothing 'закрыть Word 'очистить переменную В следующем упражнении вы создадите приложение, в котором исполь- зуете функцию проверки орфографии Word для контроля правописания в текстовом поле Visual Basic. Программа целиком будет написана на Visual Basic, а функция Word будет использоваться через средство Automation (Автоматизация). Примечание. В следующем упражнении предполагается, что на вашем компьютере установлен Word 97 или Office 97 (в состав которого входит Word 97). Создадим собственную функцию проверки орфографии 1. В меню Project (Проект) щелкните на команде References (Ссыл- ки). Проверьте, что установлен флажок для ссылки на библиоте- ку Microsoft Word 8.0 Object Library, а затем щелкните на кнопке ОК. Библиотека Microsoft Word 8.0 Object Library дает доступ к объек- там, командам и свойствам, характерным для объектного при- ложения Word. Это та же объектная библиотека, ссылку на ко- торую вы вводили ранее в этом уроке. Примечание. Ссылки на объектную библиотеку должны быть добавлены в каждый новый проект с помощью команды References (Ссылки). Теперь создадим форму для проверки орфографии и добавим текст программы.
458 Часть 4. Управление корпоративными данными 2. Измените размеры формы до размеров среднего прямоуголь- ного окна. 3. С помощью кнопки управления Label (Метка) создайте доста- точно длинное поле в верхней части формы. В этом поле метки будут содержаться указания по работе с программой. 4. С помощью кнопки управления TextBox (Текстовое поле) со- здайте широкое текстовое поле на четыре строки в средней части формы. В текстовом поле будет содержаться текст, орфографию кото- рого будет проверять пользователь. 5. С помощью кнопки управления CommandButton (Командная кнопка) добавьте две командные кнопки ниже текстового поля. Первая из командных кнопок будет использована для запуска Word и применения команды CheckSpelling (Проверка орфогра- фии) для проверки правописания текста в текстовом поле. Вто- рая командная кнопка будет использоваться для выхода из программы. 6. Установите следующие свойства для объектов в программе: Объект Свойство Установленное значение Forml Caption (Надпись) Персональная проверка грам- матики Labell Caption (Надпись) Введите одно или несколько слов в текстовое окно, а затем нажмите кнопку Проверка Textl MultiLine (Несколько строк) True (Истина) ScrollBars (Полосы прокрутки) 2 - Vertical (Вертикальная) Text (Текст) (Empty) (Пусто) Commandl Caption (Надпись) Проверка Command2 Caption (Надпись) Закрыть После установки свойств ваша форма должна быть подобна представленной на следующем рисунке:
Урок 14. Взаимодействие с Microsoft Office 459 Персональная проверка грамматики Ввеяите в текстовое окно одно или несколько слов а затем нажмите кнопки Провес» а ; '' Провеока | За> рыть | __________________________________________________________ 7. Дважды щелкните на командной кнопке CheckSpelling для от- крытия процедуры обработки прерывания Command1_Click. Вве- дите в процедуру следующие операторы: Dim X As Object 'создать переменную для объекта Word Set X = CreateObject("Word.Application") X.Visible = False 'скрыть Word X.Documents.Add 'открыть новый документ X. Selection .Text = Textl .Text 'скопировать текстовое окно в документ X.ActiveDocument.CheckSpelling 'запустить проверку Textl .Text = X.Selection.Text ‘скопировать результаты обратно X.ActiveDocument.Close SaveChanges:=wdDol\lotSaveChanges X.Quit 'закрыть Word Set X = Nothing ‘очистить переменную Эти операторы создают объект Word Automation (Автоматизация) в процедуре обработки прерывания, запускают Word, устанав- ливают значения для некоторых свойств объектов Word, вы- зывают некоторые из команд Word, а затем освобождают память, используемую объектом. Word запускается автомати- чески при первой ссылке на переменную объекта. Свойство Word Selection’s Text (Выделенный текст) используется для копирова- ния содержимого текстового поля в документ Word. Когда выполняется команда CheckSpelling (Проверка орфогра- фии), Word запускает функцию контроля правописания и про- веряет текст на наличие ошибок. Если ошибка обнаруживает- ся, то отображается диалоговое окно Word Spelling And Grammar (Правописание), и пользователь может исправить ошибку. Word проверяет каждое слово в текстовом поле, даже если в нем имеется несколько строк текста. По окончании проверки
460 Часть 4. Управление корпоративными данными исправленные слова копируются обратно в текстовое поле Visual Basic, а приложение Word закрывается. Оператор Set в конце процедуры обработки прерывания Command1_Click осво- бождает память, занимаемую переменной типа объект. 8. Закройте процедуру обработки прерывания Command1_Click, а затем дважды щелкните на командной кнопке Закрыть. 9. Введите End в процедуру обработки прерывания, а затем закройте окно Code. Вы завершили разработку программы Персональная проверка грам- матики. 10. Используйте команду Save Forml As (Сохраните Forml как) для сохранения формы на диске под именем MyUseWord.frm. Используйте команду Save Project As (Сохранить проект как) для сохранения проекта на диске под именем MyUseWord.vbp. (Оба файла помещаются в папку \Vb6Sbs\Less14.) Теперь запустим программу и посмотрим, как работает функция Automation (Автоматизация). Запустим программу MyUseWord 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа будет запущена в программном окружении Visual Basic, как показано на следующем рисунке: й Персональная проверка грамматики 31 ПроЕерка | Закрыть Законченная программа UseWord содержится в папке \Vb6Sbs\Less14.
Урок 14. Взаимодействие с Microsoft Office 461 2. Введите в текстовое поле workingg with objectss. В словах working и objects сознательно допущены ошибки. 3. Щелкните на кнопке Проверка. Visual Basic создает объект Automation (Автоматизация) и запус- кает Word. Через некоторое время появится диалоговое окно Word Spelling (Правописание), указывающее на первое слово, которого нет в словаре. Ваш экран будет выглядеть так, как изображено на рисунке: Not in Dictionaf Spelling: English {Australian) 4. Щелкните на кнопке Change (Заменить) для исправления пер- вой ошибки, а когда Word выделит вторую орфографическую ошибку, щелкните на кнопке Change (Заменить), чтобы испра- вить ее. Диалоговое окно Spelling (Правописание) закроется, и через не- которое время слова в текстовом поле будут исправлены. 5. Щелкните на кнопке Закрыть, чтобы закрыть программу. Поздравляю! Посредством функции Automation (Автоматизация) вы ис- пользовали возможность поиска и исправления ошибок Word. Это только малая часть того, чего вы можете добиться с помощью Visual Basic и объек- тов приложений.
462 Часть 4. Управление корпоративными данными Автоматизация: обращение к Excel из Visual Basic Microsoft Excel содержит собственные инструменты для сложных вычис- лений и анализа данных, которые могут значительно расширить возмож- ности ваших программ, написанных на Visual Basic. Следующая програм- ма использует рекурсивную функцию Рт1из Excel для расчета месячных платежей по кредиту по сумме кредита, рассрочке и проценту. Процеду- ра события, которая вызывает Excel для расчетов, приведена ниже. Private Sub Command1_Click() Dim xl As Object 'создать объект для Excel Dim loanpmt 'объявить возвращаемое значение 'если заполнены все поля If Textl .Text о'"' And Text2 .Text <>"" _ And Text3.Text <> "" Then 'создать объект и запустить Pmt Set xl = CreateObject(”Excel.Sheet") loanpmt = xl. Ap plication.WorksheetFunction. Pmt _ (Textl .Text /12, Text2.Text, Text3.Text) MsgBox "Месячный платеж составляет" & _ Format(Abs(loanpmt), "$#.##"),, "Вклад" xl.Application.Quit Set xl = Nothing Else MsgBox "Необходимо заполнить все поля",, "Вклад" End If End Sub Сначала эта программа создает объектную переменную xl и присваивает ее объекту Excel.Sheet. Затем программа вызывает функцию Pmt через объект WorksheetFunotion и переводит вычисленное значение в положитель- ное число. В Excel платежи по кредиту представлены отрицательными числами, но в нашей программе лучше использовать положительные. Если один из аргументов в полях отсутствует, выводится сообщение «Необхо- димо заполнить все поля». Совет. Чтобы выполнить следующее упражнение, у вас должен быть уста- новлен Excel 97. Этот проект также обращается к объектной библио- теке Ехсе18.0 Object Library. Если вы создаете программы, которые обра- щаются к Excel через средства автоматизации, добавьте ссылку на Excel8.0 Object Library с помощью команды References в меню проекта.
Урок 14. Взаимодействие с Microsoft Office 463 Запустите программу Mortgage 1.Откройте проект Mortgage, vbp в nanKe\Vb6Sbs\Less14. 2.В меню Run (Выполнить) щелкните на команде Start (Старт). Появится калькулятор для расчета платежей со значениями, установленными по умолчанию. 3.Введите значение 100000 в текстовое поле Сумма. Ваша фор- ма должна выглядеть так, как показано на рисунке. 4.Щелкните на кнопке Подсчет. Программа с помощью Excel рас- считает сумму ежемесячных платежей при кредите в 100000 долларов, рассрочке на 3 года (36 месяцев) и 9% годовых. Обра- тите внимание, что ни налоги, ни страховка, ни прочие неиз- бежные выплаты в этот расчет не включены. Вклад Месячный платеж составляет 1804 62 5. Щелкните на кнопке ОК, затем введите другие значения и повторите расчет. 6. Вы можете посмотреть код программы в окне кодов. Для за- вершения работы щелкните на кнопке Close (Закрыть) в строке заголовка формы.
464 Часть 4. Управление корпоративными данными Автоматизация: обращение к Outlook из Visual Basic Microsoft Outlook - приложение из пакета Microsoft Office для работы с электронной почтой, организации и планирования вашего рабочего вре- мени. Я использую Outlook как основную программу для работы с элект- ронной почтой, поэтому ее окно постоянно находится на панели задач на моем рабочем столе. Недавно я настроил часть моих программ на Visual Basic таким образом, что они позволяют отправлять сообщения через Outlook. Эта технология позволяет отправлять и данные (статистические, выборки из баз данных и т.д.), и тексты сообщений. Особое удобство по- добного подхода состоит в том, что для настройки полей в Outlook необхо- димо написать всего несколько строк программы, а приложений к каждо- му сообщению теперь можно подключать не одно, а несколько. В приведенном ниже упражнении вы используете программу SendMail, чтобы отправить сообщение из Visual Basic через Outlook. Перед тем как запускать программу, вам придется внести некоторые изменения в про- цедуру события Command1_Click, чтобы заменить вымышленные адреса настоящими. Обязательно сделайте это, иначе получите сообщение об ошибке. Единственный настоящий адрес в этом фрагменте - мой собствен- ный. Если хотите, можете отправить мне сообщение. Private Sub Command1_Click() Dim out As Object 'назначим переменную для объекта Set out - CreateObjectf'Outlook.Application") With out.Createltem(olMailltem) 'используя объект Outlook 'внесем получателей с помощью метода Add '(эти имена фиктивные — замените их на настоящие) .Recipients.Add "maria@xxx.com" 'в поле "кому" .Recipients.Add "casey@xxx.com” 'в поле "кому" 'поле "копия" заполняется из переменной olCC . Recipients.Add("mike_halvorson@classic.msn.com").Type = olCC .Subject = "Тестовое сообщение" 'заносится в поле краткого сообщения .Body = Textl .Text 'копирует текст в поле сообщения 'прикрепляет картинку к сообщению .Attachments.Add "c:\vb6sbs\less14\smile.bmp" 'в заключение копирует сообщение в папку исходящих и отправляет его .Send End With End Sub
Урок 14. Взаимодействие с Microsoft Office 465 Совет. Чтобы выполнить следующее упражнение, у вас должен быть установ- лен Outlook 97 или Outlook 98. Этот проект также обращается к объек- тной библиотеке 0utlook8.0 Object Library. Если вы создаете программы, которые обращаются к Outlook через средства автоматизации, добавь- те ссылку на Outlook 97 или Outlook 98 Object Library с помощью команды References в меню проекта. Обратите внимание, что прогорамма рассчи- тана на пользователя, имеющего непосредственный выход в Интернет через модем. Для пользователей, работающих в составе рабочих групп, некоторые операторы выглядят немного иначе. Запустите программу SendMail 1. Откройте проект SendMail.vbp в nanKe\Vb6Sbs\Less14. 2.Откройте окно кодов и выведите на экран процедуру собы- тия Command1_Click. 3. Замените имеющиеся адреса (maria@xxx.com, casey@xxx.com и mike_halvorson@classic.msn.com) настоящими. Если вы не хотите ра- ботать с несколькими адресами, поставьте апостроф (‘) перед стро- ками, которые вам не нужны. Я включил несколько адресов, что- бы показать, как они добавляются в коллекцию Recipients (Получатели) с помощью метода Add (Добавить). По крайней мере один адрес в поле То: (Кому:) вы все же должны оставить. 4. Запустите Microsoft Outlook через стартовое меню Windows. Позже вы сможете удостовериться, что Visual Basic поместил ваше сообщение в папку Outbox (Исходящие). 5.В меню Run (Выполнить) щелкните на команде Start (Старт). Появится простейший пользовательский интерфейс программы. Ъ ТОМ ПИ ЩИ I Mu rnsnfl Hullool Эта программа помещает тестовое сообщение е папку исходящие Мicto.-oft Outlook, (если она есть| отправки сообщения вашим настоящим нетелям необчсси-.ю изменить адреса в те программы —а .............................I,—ч - Наберите тестовое сообщение *1.
466 Часть 4. Управление корпоративными данными 6. Введите в текстовом поле свое сообщение. Этот текст будет отправлен как содержимое вашего сообщения. Конечно, вы мо- жете просто ввести этот текст в текст программы на Visual Basic, тогда вам вообще не нужен пользовательский интерфейс. 7. Щелкните на кнопке Отправить тестовое сообщение. Visual Basic использует средства автоматизации, чтобы создать сообщение в папке Outbox (Исходящие). Сообщение остается в этой папке до тех пор, пока вы не подсоединитесь к Интернету и не выбе- рете команду Check For New Mail (Проверить на новые сообщения) на панели инструментов Outlook. (Если вы подключены к ло- кальной или глобальной сети, сообщение будет отправлено сра- зу же.) После отправки сообщения его копия будет помещена в папку Send (Отправленные). 8. Щелкните на кнопке Close (Закрыть) в строке заголовка про- граммы SendMail. 9. Восстановите окно программы Outlook и щелкните на папке Outbox (Исходящие), чтобы увидеть свое сообщение. тестовое сообщение в Outlook 10. Дважды щелкните на сообщении. Outlook откроет его и вы- ведет на экран. Убедитесь, что Visual Basic создал сообщение в полном соответствии с вашими установками, дополнив его фай- лом с улыбающимся лицом (из папки \Vb6Sbs\Less14) и заполнив все необходимые поля.
Урок 14. Взаимодействие с Microsoft Office 467 Дважды щелкните на этом включенном файле, чтобы просмотреть его в Paint Тсгтовтг гппбщгцмг Message file Edii hi°w Insert Format Tools Сигдои-.е tlelp 0" Reply (^ReplytoAK (rff Forward From То. M йа T&honova 'n ana@xxx.com'; 'casey@*x>. com' ‘n le_halvorsonibclasMC.msn.com' Тестовое сообщение - Sent: Mon 05.04.-39J6:44 тестовое сообщение Smile.bmp 11. Щелкните на кнопке Send (Отправить) на панели инструмен- тов сообщения. Теперь вы можете удалить или отправить это сообщение. 12. Чтобы удалить сообщение, выделите его и нажмите клави- шу | Del |. Чтобы отправить сообщение, выберите команду Check For New Mail (Проверить на новые сообщения) на панели инстру- ментов Outlook. Вы закончили работу с приложением Microsoft Outlook. Шаг вперед: автоматизация - обращение к PowerPoint из Visual Basic В этом последнем упражнении я покажу вам, как использовать средства автоматизации для показа слайдов в PowerPoint. Это приложение теперь позволяет создавать слайд-шоу и мультимедиа-презентации, создавать Web-страницы и т.д. PowerPoint 97 теперь включает Visual Basic для при- ложений. Работа со средствами автоматизации в PowerPoint происходит так же, как в Word, Excel и Outlook. Для этого достаточно создать связь с объект- ной библиотекой PowerPoint, создать объектную переменную с помощью функции СreateObject и пользоваться этой переменной для запуска команд PowerPoint. Приведенный ниже пример кода показывает, как запускать любое слайд-шоу из Visual Basic. Только не забудьте заменить приведен- ное здесь имя файла с презентацией на нужное вам. Чтобы объяснить, как пользователь переходит от одного слайда к другому, я включил окно
468 Часть 4. Управление корпоративными данными сообщения, требующее нажатия клавиши «пробел» для переключения на следующий слайд. Private Sub Command1_Click() Dim ppt As Object 'определяем объекты-переменные Dim reply, prompt 'определяем переменные для окон сообщений prompt = "Нажмите клавишу Пробел для перехода от слайда к слайду" & _ " в презентации." & vbCrLf & “Стартовать?" reply = MsgBox(prompt, vbYesNo, "Изумительные факты PowerPoint") If reply = vbYes Then Set ppt = CreateObject("PowerPoint.Application.8") ppt.Visible = True 'открываем и запускаем презентацию ppt.Presentations.Open "c:\vb6sbs\less14\pptfacts.ppt" ppt.ActivePresentation.SlideShowSettings.Run Set ppt = Nothing 'очищаем объекты-переменные End If End Sub Запустите программу RunSlide 1 . Откройте проект RunSlide.vbp в nanKe\Vb6Sbs\Less14. 2 .В меню Run (Выполнить) щелкните на команде Start (Старт). Появится окно программы. Н Работа с Microsoft PowerPoint В PowerPoint и Visual Basic Microsoft PowerPoint один из самых современных прсауг тов Фирмы Microsoft. позволяющий наиболее полно использовать возможности языка программирования Visual Basic для приложений Вы можете использовать модели PowerPoint - для их удаленного запуска, или же записать макросы на языке Visual Basic для использования их в программе PowerPoint Просмотр презентации 3 . Щелкните на командной кнопке, чтобы начать просмотр. Про- грамма выведет окно с подсказкой и вопросом, готовы ли вы начать просмотр.
Урок 14. Взаимодействие с Microsoft Office 469 Изумим" iii-iiui' фагты Pnwr-rPnint Нажмите клавишу Пробел для перехода от слайда к слайду в презентации " >--1 No | 4 .Щелкните на кнопке Yes. Visual Basic создает объект PowerPoint, запускает презентацию и загружает первый слайд. 5 .Просмотрите презентацию, нажимая клавишу | SpaceBar | для переключения между слайдами. б .Щелкните на кнопке Close (Закрыть) в строке заголовка PowerPoint. Приложение закроется, вы вернетесь в среду Visual Basic. 7 . Для завершения работы щелкните на кнопке Close (Закрыть) в строке заголовка программы RunSlide. Итак, вы сделали это! Вы научились работать со средствами автоматиза- ции во всех программах пакета Microsoft Office. Более того, вы освоили основные принципы программирования в Visual Basic и можете перехо- дить к более сложным вещам. Примите наши поздравления! Если вы хотите перейти к следующему уроку: >- не выходя Visual Basic, перейдите к уроку 15. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание урока Чтобы Сделайте следующее Вставить объект при- ложения в вашу про- грамму Используйте средство управления OLE для созда- ния поля для объекта приложения в форме, а за- тем дважды щелкните на объекте в диалоговом окне Insert Object (Вставка объекта). Создать связанный объект приложения Установите флажок Link (Связь) в диалоговом окне Insert Object (Вставка объекта).
470 Часть 4. Управление корпоративными данными Чтобы Сделайте следующее Создать внедренный объект приложения Используйте диалоговое окно Insert Object (Вставка объекта), сбросив флажок Link (Связь). Вставить часть фай- ла приложения в объект OLE Выделите данные в приложении, которые вы хо- тите вставить, установите курсор на объект OLE в Visual Basic, щелкните правой кнопкой мыши, а затем щелкните на команде Paste Special (Специаль- ная вставка). Обновить связи с объектом Поместите оператор OLE1 при работе программы 0LE1.Update в процедуре обработки прерывания Form_Load. Выбрать библиотеку приложения В меню Project (Проект) щелкните на команде References (Ссылки), установите флажок рядом с нужным приложением или приложениями. Просмотреть объект приложения, поддер- живающего средство Automation (Автомати- зация) В меню View (Вид) щелкните на команде Object Browser (Просмотр объектов), выберите нужный объект в открывающемся списке Project/Library (Проект/Библи отека). Создать переменную типа объект в про- грамме Используйте операторы Dim и Set, например: Dim X As Object Set X = CreateObject ("Word.Application") Открыть доступ к функциям приложе- ния с помощью сред- ства Automation (Авто- матизация) Создайте переменную типа объект, а затем сде- лайте ссылку на команду или свойство объекта, например: X.CheckSpelling X.Quit Освободить память, используемую пере- менной типа объект Используйте команду Set и ключевое слово Nothing с именем переменной, например: Set X = Nothing
Возможности и средства профессиональной версии Visual Basic 6.0 iigiaiifiiiiniiiaii

УРОК 15 Обработка текстов с помощью средства управления Rich Textbox (Форматированный текстовый блок) Урок рассчитан на 40 минут Вы научитесь: инсталлировать и применять средства управления ActiveX в профессиональной версии Visual Basic 6.0; объединять возможности текстового процессора и сред- ства управления Rich Textbox (Форматированный тексто- вый блок); -использовать буфер обмена Windows для операций вы- резки и вставки; открывать, сохранять и распечатывать файлы RTF с по- мощью команд меню; фиксировать несохраненные изменения в документе с по- мощью события Change (Изменение).
474 Часть 5. Возможности и средства профессиональной версии Познакомившись с материалом, изложенном в частях с 1 по 4, вы приоб- рели основные навыки программирования, которые необходимы для ра- боты со всеми версиями Visual Basic 6 (обучающая версия Visual Basic 6 Learning Edition, профессиональная версия Visual Basic 6 Professional Edition и коммерческая версия Visual Basic Enterprise Edition). В частях 5, 6 и 7 вы узнаете, о дополнительных специфических особенностях и воз- можностях версии Visual Basic 6 Professional. «Профессиональные» сред- ства разработки программного обеспечения можно разделить на три ос- новные категории: профессиональные средства управления ActiveX, приложения для работы с Internet и динамическим языком гипертексто- вых ссылок Dynamic HTML, а также расширенные возможности управ- ления базами данных. Вы узнаете, как создавать мощные приложения на Visual Basic, которые относятся к каждой из этих важнейших категорий. В уроке 15 вы узнаете, как инсталлировать и использовать полезный на- бор средств управления ActiveX, включенный в состав версии Visual Basic 6 Professional. (Эти средства также включены в коммерческую версию Visual Basic 6 Enterprise, поэтому если вы однажды решите перейти к более мощному продукту, то уже будете знакомы с его основными функ- циями.) Затем мы перейдем к рассмотрению средства управления Rich Textbox (Форматированный текстовый блок) — это мощное средство поможет вам добавлять функции поддержки текстового процессора для вашего при- ложения. Средство Rich Textbox является более сложной версией стандар- тного средства управления Textbox (Текстовый блок) Visual Basic. Сред- ство Rich Textbox позволяет включать в ваш текст форматированную информацию, осуществлять операции оптимизации файла и поиска дан- ных, а также сохранять информацию в формате документов, известном как RTF (Rich Text Format). С помощью созданной в этой книге утилиты RTFEdit вы быстро построите программу с использованием средства Rich Textbox (Форматированный текстовый блок), сходную по своим возможно- стям и внешнему виду с известной программой текстового редактора с возможностями форматирования WordPad, входящей в состав Windows. Инсталляция средств управления ActiveX для профессиональной версии При инсталлировании программного пакета Visual Basic Professional Edition одним из этапов процесса установки является копирование боль- шой группы файлов с расширением - .осх, называемых средствами уп- равления ActiveX, в вашу папку C:\Windows\System или в папку System32. Про-
Урок 15. Обработка текстов с помощью Rich Textbox 475 цесс установки также включает в себя регистрацию этих средств управ- ления в реестре вашей системы, чтобы Visual Basic и другие приложения имели возможность загружать средства управления по мере необходимо- сти в этом. Большинство из инсталлированных файлов с расширением .осх представляют собой отдельные средства управления ActiveX, которые вы можете добавлять в панель инструментов Visual Basic. Однако несколько файлов с расширением .осх представляют собой наборы средств управ- ления, относящихся к определенной теме. К примеру, средство управле- ния общего назначения Windows Common Control (файл mscomctl.ocx) содер- жит в себе девять инструментов, позволяющих использовать в ваших программах такие элементы интерфейса, как панели инструментов, окна состояния, индикаторы хода выполнения процесса. В приведенной ниже таблице перечислены все средства управления ActiveX, включенные в профессиональную версию Visual Basic 6. Инфор- мация о каждом из этих средств доступна через оперативную справоч- ную систему Help Visual Basic. В последующих уроках некоторые из этих средств управления будут использованы для создания ряда интересных и полезных утилит. Средство управления ActiveX Имя файла Описание ADO data (Данные ADO) Msadodc.ocx Предоставляет доступ к инфор- мационной базе данных в форма- те ActiveX Data Object (Объект дан- ных ActiveX). Animation (Анимация) Mscomct2.ocx Создает эффекты анимации пу- тем воспроизведения файлов .avi (звук не поддерживается). (В со- ставе группы средств управле- ния общего назначения Windows Common Control-2.) Chart (Диаграмма) Mschart.ocx Дает возможность представлять данные, хранящиеся в базах дан- ных и электронных таблицах, в виде диаграмм. Communications (Коммуникация) Mscomm32.ocx Обеспечивает организацию пос- ледовательной связи для ваших приложений через последова- тельный коммуникационный порт.
476 Часть 5. Возможности и средства профессиональной версии Описание Средство управления Имя файла ActiveX Cool bar Comct332.ocx Data repeater (Набор данных) Msdatrep.ocx DTPicker (Дата/Время) Mscomct2.ocx Flat scrollbar (Двухмерная полоса прокрутки) Mscomct2.ocx Flex grid (Сетка) msflxgrd.ocx Hierarchical flex grid mshflgd.ocx (Иерархическая сетка) Средство управления, которое может быть использовано для создания определяемых пользо- вателем панелей инструментов, подобных используемым в Про- воднике Internet (Microsoft Internet Explorer). (В составе группы средств управления об- щего назначения Windows Common Control-3.) Отображает несколько отдель- ных элементов средств управле- ния ActiveX в виде строк (особенно удобно для отображения различ- ных элементов базы данных). Облегчает ввод времени и дат с помощью открывающегося окна с календарем. (В составе группы средств управления общего на- значения Windows Common Control-2.) Стандартная «плоская» полоса прокрутки. (В составе группы средств управления общего на- значения Windows Common Control-2.) Позволяет добавлять в ваше приложение возможности рабо- ты с электронными таблицами. Особенно полезно для отображе- ния информации из баз данных. Расширенная версия средства управления Flex grid (Сетка), по- зволяющая отображать иерар- хические наборы записей (набо- ры записей, полученные из нескольких различных таблиц).
Урок 15. Обработка текстов с помощью Rich Textbox 477 Средство управления Имя файла Описание ActiveX Image combo (Поле с открывающимся списком изображе- ний) mscomctl.ocx Аналогично стандартному сред- ству управления полем с откры- вающимся списком, но с возмож- ностью работы с изображениями. (В составе группы средств управ- ления общего назначения Windows Common Control.) Image list (Список изображений) mscomctl.ocx Содержит набор изображений, которые могут использоваться другими средствами управления. (В составе группы средств управ- ления общего назначения Windows Common Control.) Internet transfer msinet.ocx Позволяет подключаться к Internet и получать данные через протоколы HTTP и FTP. List view (Просмотр списка) mscomctl.ocx Отображает данные в формате Проводника Windows (Windows Explorer) с использованием круп- ных и мелких значков, списков или таблиц. (В составе группы средств управления общего на- значения Windows Common Control.) MAPI (Программный интерфейс обработ- ки сообщений) msmapi32.ocx Обеспечивает доступ к сообщени- ям MAPI и средствам управления сеансом MAPI, относящимся к за- дачам, связанным с передачей и обработкой сообщений электрон- ной почты по интерфейсу MAPI (Messaging Application Program Interface). Masked edit (Редакти- рование по шаблону) msmask32.ocx Текстовое поле с ограничителями данных, вводимых пользовате- лем.
478 Часть 5. Возможности и средства профессиональной версии Средство управления Имя файла Описание ActiveX Month View mscomct2.ocx (Выбор дат) Multimedia MCI • (Мультимедиа) mci32.ocx Picture clip (Фрагмент рисунка) picclp32.ocx Progress bar (Индикатор процес- са выполнения) mscomctl.ocx Rich textbox (Форматированный текстовый блок) richtx32.ocx Slider mscomctl.ocx (Скользящая шкала) Status bar (Информационная панель) mscomctl.ocx Позволяет конечному пользова- телю выбирать даты и промежут- ки дат из представленного в гра- фическом виде календаря. (В составе группы средств управле- ния общего назначения Windows Common Control-2.) Управляет записью и воспроиз- ведением при работе с устрой- ствами мультимедиа. Отображает фрагмент точечного изображения. Использует индикаторную шка- лу для графического отображе- ния хода выполнения операции. (В составе группы средств управ- ления общего назначения Windows Common Control.) Дает возможность пользователю вводить, редактировать и форма- тировать текст в формате RTF. Дает возможность использовать шкалу с «числовыми отметками» для ввода данных, а также обес- печивает средства для отображе- ния хода выполнения операции. (В составе группы средств управ- ления общего назначения Windows Common Control.) Отображает панель состояния, которая содержит до 16 инфор- мационных полей для парамет- ров программ. (В составе группы средств управления общего на- значения Windows Common Control.)
Урок 15. Обработка текстов с помощью Rich Textbox 479 Средство управления Имя файла Описание ActiveX Sys info (Системная информация) sysinfo.ocx Tab strip (Закладки) mscomctl.ocx Tabled dialog (Диалоговое окно с закладками) tabct!32.ocx Toolbar (Панель инструментов) mscomctl.ocx Tree view (Дерево) mscomctl.ocx UpDown (Вверх/Вниз) mscomctl2.ocx Windowless mswless.ocx Управляет параметрами опера- ционной системы Windows. Аналогична средству управления Tabled dialog. (В составе группы средств управления общего назна- чения Windows Common Control.) Представляет информацию в ди- алоговом окне в виде окна с зак- ладками. Создает панель инструментов с отдельными кнопками. (В составе группы средств управления обще- го назначения Windows Common Control.) Отображает иерархическую ин- формацию в виде «дерева». (В со- ставе группы средств управления общего назначения Windows Common Control.) Отображает пару кнопок со стрел- ками, позволяющими пользователю осуществлять прокрутку в списке или устанавливать значение путем увеличения/уменыпения текущих значений. (В составе группы средств управления общего назначения Windows Common Control-2.) Специальное средство управле- ния, позволяющее экономить па- мять и работающее с девятью стандартными панелями инстру- ментов. Используется в том слу- чае, если у вас нет необходимости в применении адресации памяти с помощью указателей в тексте ва- шей программы. Этим вы сэконо- мите ваши системные ресурсы.
480 Часть 5. Возможности и средства профессиональной версии Средство управления Имя файла Описание ActiveX Winsock Mswisck.ocx Обеспечивает доступ к сетевым протоколам TSP (transfer control protocol) и UDP (user data protocol). Как добавить средства управления ActiveX профессиональной версии в панель инструментов Чтобы добавить средства управления ActiveX профессиональной версии в панель инструментов, вам необходимо выполнить следующие действия. 1. В меню Project (Проект) щелкните на команде Components (Ком- поненты), а затем щелкните на вкладке Controls (Средства уп- равления). Когда вы выполняете команду Components (Компоненты), Visual Basic осуществляет проверку реестра системы и отображает средства управления ActiveX, которые доступны для вашей сис- темы (но не средства управления, установленные Visual Basic). 2. Установите флажок слева от названия того средства управ- ления, которое вы хотели бы добавить в панель инструментов. 3. Щелкните на кнопке ОК, чтобы закрыть диалоговое окно Components (Компоненты) и добавить средство управления ActiveX. Visual Basic отобразит выбранное вами средство управления в панели инструментов. Знакомство со средством управления Rich Textbox (Форматированный текстовый блок) Одним из наиболее полезных средств управления ActiveX в версии Visual Basic Professional является средство Rich Textbox (Форматированный тек- стовый блок). Средство Rich Textbox дает возможность добавлять в ваше приложение расширенные функции текстового процессора. В отличие от более простого средства Toolbox (Текстовый блок), позволяющего выпол- нять лишь ограниченный набор стандартных функций, средство Rich Textbox (Форматированный текстовый блок) дает возможность осуществ- лять форматирование текста в популярном стандарте RTF. Аналогично
Урок 15. Обработка текстов с помощью Rich Textbox 481 языку управления гипертекстовыми ссылками HTML (Hypertext Markup Language), в стандарте RTF в ваш текст вводятся специальные коды фор- матирования, несущие информацию о гарнитуре и размере шрифта, сти- лях символов и абзацев, выравнивании и других возможностях форма- тирования. Добавим в панель инструментов средство управления Rich Textbox (Форматированный текстовый блок) Прежде чем приступить к использованию средства Rich Textbox (Форма- тированный текстовый блок), вы должны добавить его в панель инстру- ментов. 1. В меню Project (Проект) щелкните на команде Components (Ком- поненты), а затем щелкните на закладке Controls (Средства уп- равления). Visual Basic отобразит средства управления ActiveX, установлен- ные в вашей системе. 2. Осуществите прокрутку списка средств управления, пока не найдете строку Microsoft Rich Textbox Control 6.0. 3. Щелкните на поле флажка рядом с названием этого средства управления, затем щелкните на кнопке ОК. Visual Basic добавит средство управления Rich Textbox (Форма- тированный текстовый блок) в вашу панель инструментов. 'A fabi' Средство управления Rich Textbox (Форма- тированный текстовый блок) ггп .
482 Часть 5. Возможности и средства профессиональной версии Создание текстового блока с помощью средства управления Rich Textbox (Форматированный текстовый блок) на первый взгляд аналогично созда- нию текстового блока с помощью стандартного средства управления Т ext box (Текстовый блок). Вам нужно всего лишь щелкнуть на значке Rich Textbox (Форматированный текстовый блок) в панели инструментов, а затем пе- ретащить его в вашу форму, в результате чего будет создан текстовый блок (поле) необходимого для вашего приложения размера. Однако раз- личие между этими двумя средствами управления станут очевидными, если вы начнете манипулировать свойствами и функциями средства Rich Textbox (Форматированный текстовый блок). Приведенная ниже програм- ма позволяет выявить важнейшие различия. Запустим программу RTFEdit Чтобы познакомиться с широкими возможностями средства управления Rich Textbox (Форматированный текстовый блок), попробуйте запустить программу RTFEdit, написанную мною на Visual Basic. Она имитирует боль- шинство функций, присущих стандартной программе Windows WordPad. 1. Откройте проект RTFEdit.vbp, расположенный в папке \Vb6Sbs\Less15. Если появится сообщение с запросом, хотите ли вы сохранить изменения в вашем чистом проекте (который содержит ссылку на средство управления Rich Textbox (Форматированный тексто- вый блок)), щелкните на кнопке No (Нет). 2. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа RTFEdit появится на экране, как представлено на сле- дующем рисунке. '* Файл Правка «Рормат ____________________________________________/ Это редактор АТР*Фаилов. Введите как можно больше текста в окно, используя полосы прокрутки! Й RTF релак юр
Урок 15. Обработка текстов с помощью Rich Textbox 483 Воспользуемся командами из меню Format (Формат) Для начала вы попрактикуетесь с возможностями форматирования тек- ста, имеющимися в данной программе. 1. Выделите первое предложение, отображенное в текстовом окне (Это редактор в формате RTF.), затем щелкните на коман- де меню Format (Формат). Появится список команд, доступных для форматирования. RTF редактор КЗГ7Е1 [Это редактор используя го> gee прописные Шржрт Жирный Курсив <. можно больше текста в окно. Я создал каждую из команд меню в режиме редактирования меню Menu Editor и написал для каждой из команд процедуру обработки события в окне Code (Код программы). 2. Щелкните на команде All Caps (Все прописные) в меню Format (Формат). Редактор RTF изменит начертание символов для выделенного текста на прописные символы. 3. Снимите выделение с первого предложения и щелкните на команде Font (Шрифт) в меню Format (Формат). Появится диалоговое окно Font (Шрифт), как показано на сле- дующем рисунке.
484 Часть 5. Возможности и средства профессиональной версии 4. Выберите другой шрифт, стиль и больший размер символов шрифта, а также другой цвет символов, после чего щелкните на кнопке ОК. Редактор RTF осуществит форматирование текста в соответ- ствии со сделанным вами выбором. 5. Попрактикуйтесь в использовании команд Bold (Полужир- ный), Italic (Курсив) и Underline (Подчеркнутый) из меню Format (Формат). Эти команды имеют два режима переключения - вы можете добиться обратного их действия путем повторного выполнения для выделенного текста. Как и программа WordPad, редактор RTF предоставляет все возможности форматирования в стан- дарте RTF. Воспользуемся командами меню Edit (Правка) Теперь попробуем выполнить четыре команды из меню Edit (Правка). 1. Выделите последнее предложение в окне текста. (В нем име- ются полосы прокрутки!)
Урок 15. Обработка текстов с помощью Rich Textbox 485 2. В меню Edit (Правка) щелкните на команде Cut (Вырезать). Текст будет скопирован в буфер обмена Windows и удален из текстового окна. 3. Переместите курсор ввода в конец абзаца, нажмите клави- шу | Enter |, а затем щелкните на команде Paste (Вставить) из меню Edit (Правка). Текст, хранящийся в буфере обмена, будет вставлен в тексто- вое окно. 4. Еще раз выделите первое предложение (это редактор в фор- мате RTF), а затем выберите команду Сору (Копировать) из меню Edit (Правка). Редактор RTF скопирует текст со всеми особенностями его фор- матирования в буфер обмена. 5. Нажмите клавишу | Ноте |, а затем щелкните на команде Paste (Вставить) из меню Edit (Правка), чтобы вставить текст в окно. Теперь займемся функцией поиска текста. 6. В меню Edit (Правка) щелкните на команде Find (Найти). 7. Введите RTF в поле ввода и щелкните на кнопке ОК. Редактор RTF выделит первое появление данного сочетания символов в текстовом окне. Совет. Если вы выделите какой-либо текст в окне до обращения к команде Find (Найти), редактор RTF будет искать появления выделенного тек- ста. Воспользуемся командами из меню File (Файл) Теперь попробуем выполнить команды редактора RTF для работы с фай- лами. 1. В меню File (Файл) щелкните на команде Save As (Сохранить как). Редактор RTF отобразит диалоговое окно Save As (Сохранение) с запросом имени2 файла.
486 Часть 5. Возможности и средства профессиональной версии 2. Введите sampie.rtf и щелкните на кнопке Save (Сохранить). (Если захотите, вы можете назначить другую папку для поме- щения в нее файла). Программа сохранит файл в формате RTF в указанном вами месте. Внимание! Не забудьте ввести расширение .rtf, либо щелкните на строке Rich Text Format (Текст в формате RTF) в поле списка Save As Туре (Тип файла), чтобы зарегистрировать файл в Проводнике Windows как файл в уни- версальном формате RTF. Если этого не сделать, файл не будет ото- бражаться как файл RTF в диалоговом окне Open (Открыть). 3. В меню File (Файл) щелкните на команде Close (Закрыть). Редактор RTF очистит текстовое окно. (Если у вас имеются не сохраненные изменения, вам будет предложено сохранить их.) 4. В меню File (Файл) щелкните на команде Open (Открыть). Редактор RTF отобразит диалоговое окно Open (Открыть) и спи- сок файлов RTF, содержащихся в текущей папке. 5. Дважды щелкните на файле sample.rtf, чтобы снова отобра- зить его в текстовом окне. 6. Если у вас есть принтер, включите его, а затем щелкните на команде Print (Печать) в меню File (Файл). Редактор RTF отправит копию документа на принтер. 7. В меню File (Файл) щелкните на команде Exit (Выход). Программа будет закрыта. Если у вас остались не сохранен- ные изменения, редактор RTF предложит вам сохранить их. Процедуры обработки событий, связанных с RTF-форматированием Во многих отношениях программа RTFEdit является полнофункциональ- ным приложением для работы с текстом. При написании вашей програм- мы на Visual Basic вы можете получить доступ к программе RTFEdit с помо- щью средств управления Rich Textbox (Форматированный текстовый блок)
Урок 15. Обработка текстов с помощью Rich Textbox 487 и Common Dialog (Диалоговые окна общего назначения). Теперь посмотрим на исходный текст программы, обеспечивающий эти результаты. Начнем с команд из меню Format (Формат). (Открывайте в окне Code (Код) каждую из процедур обработки событий по ходу дальнейшего их обсуждения.) Команда All Caps (Все прописные) Свойство SelText средства управления Rich Textbox (Форматированный тек- стовый блок) представляет текст, который в текущий момент является выделенным в текстовом окне. Одни из самых простых действий по фор- матированию выполняются с помощью встроенных функций Visual Basic, например, Ucase, которая преобразует строчные буквы в прописные. (Если текст уже набран прописными буквами, функция не оказывает действия.) Если пользователь щелкнет на команде All Caps (Все прописные) в меню Format (Формат), Visual Basic выполнит следующую процедуру обработки события для преобразования текста: Private Sub mnuAllcapsltem_Click() RichTextBoxI .SelText = Ucase(RichTextBox1 .SelText) End Sub Чтобы преобразовать буквы текста в строчные, достаточно просто заме- нить команду Ucase на команду Lease. Команда Font (Шрифт) Команда Font (Шрифт) использует функцию отображения шрифта ShowFont средства управления Common Dialog (Диалоговые окна общего назначения) для открытия стандартного диалогового окна Font (Шрифт) и возврата выделенной информации в программу RTFEdit. Ранее вы уже познакомились с тем, как использовать стандартные диалоговые окна Open (Открытие), Save As (Сохранение) и Color (Цвет), поддерживаемые сред- ством управления Common Dialog (Диалоговые окна общего назначения); открытие диалогового окна Font (Шрифт) осуществляется похожим обра- зом. Просматривая исходный код программы, обратите внимание, что свойства, возвращаемые объектом CommonDialogl, сразу же присваиваются соответствующим свойствам объекта RichTextBoxI (Текстовое окно в вашей программе). Средство управления Rich Тextbox (Форматированный тексто- вый блок) может обеспечить любой из стилей форматирования, предла- гаемых в диалоговом окне Font (Шрифт). Исходный код выглядит следую- щим образом: Private Sub mnuFontltem_Click()
488 Часть 5. Возможности и средства профессиональной версии 'эмулировать ошибку если нажата кнопка Cancel CommonDialogl .CancelError = True On Error GoTo Errhandler: 'установить флаги специальных эффектов и всех шрифтов системы CommonDialogl .Flags = cdICFEffects Or cdICFBoth 'показать окно выбора шрифта CommonDialogl.ShowFont 'установить пользовательские параметры форматирования: RichTextBoxI .SelFontName = CommonDialogl .FontName RichTextBoxI. SelFontSize = CommonDialogl .FontSize RichTextBoxI .SelColor = CommonDialogl .Color RichTextBoxI. SelBold = CommonDialogl. FontBol d RichTextBoxI .Selltalic = CommonDialogl. Font Italic RichTextBoxI.SelUnderline = CommonDialogl.Fontunderline RichTextBoxI.SelStrikeThru = CommonDialogl.FontStrikethru Errhandler: 'выйти из процедуры если нажата кнопка Cancel End Sub Команды Bold (Полужирный), Italic (Курсив), Underline (Подчеркнутый) Команды Bold (Полужирный), Italic (Курсив), Underline (Подчеркнутый) из меню Format (Формат) достаточно легко можно реализовать с помощью средства управления Rich Textbox (Форматированный текстовый блок). Единственное, на что следует обратить внимание, что каждая из этих ко- манд действует как переключатель с двумя состояниями, позволяя пере- ходить от текущего состояния формата к противоположному. К примеру, команда Bold (Полужирный) изменяет полужирное начертание текста на обычное, а обычное на полужирное. Такой порядок действий легко дости- гается с помощью логического оператора Not в вашей программной инст- рукции, который инвертирует Булево значение, относящееся к свойствам SelBold, Selltalic и SelUnderline. Текст программы будет выглядеть следующим образом: Private Sub mnuBoldltem_Click() RichTextBoxI .SelBold = Not RichTextBoxI .SelBold End Sub Private Sub mnultalicltem_Click() RichTextBoxI .Selltalic = Not RichTextBoxI .Selltalic End Sub Private Sub mnuUnderlineltem_Click()
Урок 15. Обработка текстов с помощью Rich Textbox 489 RichTextBox! .SelUnderline = Not RichTextBoxI .SelUnderline End Sub Редактирование текста с использованием буфера обмена Windows Если вы создаете полнофункциональное приложение с возможностями текстового процессора, вам необходимо предоставить пользователю дос- туп к стандартным командам редактирования, таким как Cut (Вырезать), Сору (Копировать) и Paste (Вставить), через меню Edit (Правка). Самый удоб- ный способ добиться этого состоит в использовании функций SetText и GetText объекта Clipboard (Буфер обмена), который дает возможность ва- шей программе взаимодействовать с буфером обмена Windows. В этом разделе мы изучим исходный программный код, описывающий операции вырезки, копирования и вставки текста, с использованием объекта Clipboard. Мы также исследуем возможности поиска текста с помощью ко- манды Find (Найти). (Рекомендуется просматривать текст каждой проце- дуры обработки события в окне Code (Код) по мере изучения данного ма- териала.) Команды Cut (Вырезать), Сору (Копировать), Paste (Вставить) Меню Edit (Правка) в программе RTFEdit содержит четыре команды: Cut (Вырезать), Сору (Копировать), Paste (Вставить) и Find (Найти). Первые три команды связаны с функциями SetText и GetText объекта Clipboard и свой- ством SelRTF объекта Rich TextBox. В ходе выполнения программы свой- ство SelRTF объекта Rich TextBox содержит информацию о форматирова- нии, а также весь текст, помещенный в текстовое окно. При работе с буфером обмена Windows именно это свойство хранит данные в процессе осуществления операций вырезки, копирования и вставки. Кроме того, функции SetText и GetText объекта Clipboard используются для копирования текста соответственно в буфер обмена и из него. Единственное различие между командами Сору (Копировать) и Cut (Вырезать) состоит в том, что команда Cut (Вырезать) удаляет выделенный текст из текстового окна после операции копирования, а команда Сору (Копировать) этого не дела- ет. Вам следует использовать следующий программный код: Private Sub mnuCopyltem_Click() Clipboard.SetText RichTextBoxI .SelRTF End Sub Private Sub mnuCutltem_Click()
490 Часть 5. Возможности и средства профессиональной версии Clipboard. SetText RichTextBoxI .SeIRTF RichTextBoxI .SeIRTF ="" End Sub Private Sub mnuPasteltem_Click() RichTextBoxI .SeIRTF = Clipboard.GetText End Sub Команда Find (Найти) Большинство приложений с возможностями текстового процессора пре- доставляют основные функции поиска текста, и программа RTFEdit не является исключением. Команда Find (Найти) обращается к функции Find (Найти) объекта форматированного текстового блока Rich TextBox. Эта фун- кция осуществляет поиск заданной текстовой строки (последовательно- сти символов) в окне текста. Точное описание поиска выглядит следую- щим образом: RichTextBoxI .Find (строка, начало, конец, параметры) Аргумент строка задает текст, который вы хотите найти в текстовом окне. Аргумент начало определяет начальную позицию для области поиска (це- лое число, которое может принимать значение от 1 до общего количества символов в документе). Аргумент конец представляет собой конечную позицию для области поиска. Аргумент параметры представляет собой одну из следующих констант: rtfWhоleWord (поиск целого слова), rtfМatehCase (поиск с учетом регистра символов), rtfNoHighlight (поиск выделенной стро- ки в документе). Следующая процедура обработки события демонстрирует, как вы може- те осуществить поиск первого вхождения заданного слова в текстовом окне с выдачей пользователю запроса с помощью функции InputBox. Най- денное слово выделяется с помощью команды Span (Интервал). Private Sub mnuFindltem_Click() Dim SearchStr As String 'используем образец для поиска Dim FoundPos As Integer 'определяем позицию найденого текста SearchStr = 1прФВох("Введите слово для поиска", "Поиск") If SearchStr о"" Then 'если введен образец для поиска 'найти первое положение искомого слова FoundPos = RichTextBoxI.FindfSearchStr,,, _ rtfWholeWord) 'если слово найдено(позиция курсора не равна -1) If FoundPos о -1 Then 'использовать метод Span для выбора слова(выбирать вперед)
Урок 15. Обработка текстов с помощью Rich Textbox 491 RichTextBoxI .Span"", True, True Else MsgBox "Строка не найдена",, "Поиск" End If End If End Sub Управление операциями с файлами с помощью средства управления Rich Textbox (Форматированный текстовый блок) Вам, вероятно, хотелось бы ввести в ваше RTF-приложение основные функции работы с файлами. В своей программе я реализовал их с помо- щью команд Open (Открыть), Close (Закрыть), Save As (Сохранить как), Print (Печать) и Exit (Выход) в меню File (Файл). Теперь просмотрим следующий исходный код в окне Code (Код) и увидим, как задачи управления файла- ми реализуются с помощью объекта Rich Textbox (Форматированный тек- стовый блок). Как вы увидите, этот метод несколько отличается от проце- дуры, которую я использовал для управления текстовыми файлами с помощью средства управления Textbox (Текстовый блок) в уроке 12. Команда Open (Открыть) Процесс открытия файлов в текстовом окне легко осуществляется с по- мощью функции LoadFile объекта Rich Textbox (Форматированный тексто- вый блок). Если вы хотите иметь возможность просматривать многостра- ничные документы, вам нужно установить для свойства ScrollBars значение rtfVertical в окне Properties (Свойства). Когда вы загружаете файл в текстовое окно, вам необходимо задать, бу- дет ли файл представлен в формате RTF, либо в текстовом формате. Для этого используются параметры rtf RTF и rtfText функции LoadFile. Если доку- мент загружается в формате RTF, он содержит ряд кодов форматирова- ния, которые дают возможность приложению определить способ отобра- жения информации в файле. Если вы загружаете RTF-файл как «текст», в текстовом окне отображаются и сами коды форматирования. (В каче- стве примера можно привести упражнение, приведенное в разделе «Шаг вперед» в конце этого урока.) Команда Open (Открыть) в программе RTFEdit устанавливает для свой-
492 Часть 5. Возможности и средства профессиональной версии ства CancelError объекта Common Dialog (Диалоговое окно общего назначе- ния) значение Тrue (Истина). Если пользователь щелкнет на кнопке Cancel (Выход) в диалоговом окне Open (Открыть), процедура обработки события пропустит операцию загрузки. Функция ShowOpen отображает диалого- вое окно Open (Открытие), чтобы дать возможность пользователю указать, какой файл загружать. Функция LoadFile открывает файл, имя которого возвращается объектом Common Dialog. Я также задал аргумент rtf RTF, что- бы объект Rich Textbox преобразовывал RTF-коды для отображения тек- ста с эффектами форматирования. Private Sub mnuOpenltem_Click() CommonDialogl.CancelError = True On Error GoTo Errhandler: CommonDialogl.Flags = cdlOFNFileMustExist CommonDialogl.ShowOpen RichTextBoxI .LoadFile CommonDialogl. Fi leN am e, rtf RTF Errhandler: ‘если нажата кнопка Cancel - выйти из процедуры End Sub Команда Close (Закрыть) С помощью команды Close (Закрыть) из меню File (Файл) вы можете зак- рыть открытый RTF-файл путем очистки содержимого текстового окна, используя функцию Text с аргументом в виде пустой строки (""). Тем не менее, я решил добавить несколько строк в текст программы, которые отслеживают важное условие закрытия: определяют, имеются ли в до- кументе не сохраненные изменения, и если они есть, предлагают пользо- вателю сохранить их. Чтобы реализовать эту возможность, я создал гло- бальную переменную с именем UnsavedChanges с типом Boolean (Булева) в разделе объявлений Declarations. Dim UnsavedChanges As Boolean Переменная имеет тип Boolean (Булева), поскольку будет принимать зна- чения Тrue (Истина) или False (Ложь), отражающие текущее состояние (со- храненные или не сохраненные) любых изменений в документе. Перемен- ная UnsavedChanges будет принимать значение True (Истина), если в документе имеются не сохраненные изменения, и значение False (Ложь), если их нет. Программа управляет статусом изменений с помощью собы- тия Change (Изменение), относящегося к средству управления Rich Textbox (Форматированный текстовый блок). Если имеют место изменения в тек- сте или в способе форматирования текста в окне, объект Rich Textbox по-
Урок 15. Обработка текстов с помощью Rich Textbox 493 рождает событие Change (Изменение) и выполняет процедуру обработки события RichTextBox1_Change. С помощью оператора установки для пере- менной UnsavedChanges значения True (Истина) в этой процедуре становит- ся возможной проверка не сохраненных изменений в тот момент, когда пользователь щелкает на команде Close (Закрыть) и Exit (Выход). (Значе- ние этой переменной можно проверить и в процедуре Form_Unload, чтобы предотвратить закрытие формы без сохранения ее содержимого.) Текст процедуры обработки события RichTextBox1_Change выглядит следующим образом: Private Sub RichTextBox1_Change() 'устанавливать каждый раз значение Тrue в глобальной переменной UnsavedChanges 'когда текст в окне изменяется. UnsavedChanges = True End Sub В процедуре обработки события для команды Close (Закрыть) из меню File (Файл) я проверяю значение переменной UnsavedChanges. Если она прини- мает значение True (Истина) (если имеются не сохраненные изменения), то пользователю предлагается сохранить эти изменения. Затем файл сохраняется с помощью функции SaveFile: Private Sub mnuCloseltem_Click() Dim Prompt As String Dim Reply As Integer 'перейти на обработку ошибок если нажата кнопка Cancel CommonDialogl .CancelError = True On Error GoTo Errhandler: If UnsavedChanges = True Then Prompt = "Сохранить Ваши изменения?” Reply = MsgBox(Prompt, vbYesNo) If Reply = vbYesThen CommonDialogl .ShowSave RichTextBoxI .SaveFile CommonDialogl .FileName, rtfRTF End If End If RichTextBoxI .Text =.очищаем текстовое окно UnsavedChanges = False Errhandler: 'если нажата кнопка Cancel. Exit Sub End Sub
494 Часть 5. Возможности и средства профессиональной версии Команда Save As (Сохранить как) Чтобы сохранить RTF-файл, загруженный в текстовое окно, вам нужно вызвать функцию SaveFile с указанием имени файла и с аргументом rtf RTF. (Хотя я не делал этого в данной программе, вы можете также сохранить файл в виде обычного текста без эффектов форматирования, задав аргу- мент rtfText.) Обычно для сохраняемого файла указывается путь с помо- щью свойства FiieName объекта Common Dialog (Диалоговое окно общего на- значения). В зтой программе я также даю возможность пользователю отказаться от операции сохранения, щелкнув на кнопке Cancel (Отмена) в диалоговом окне Save As (Сохранение). Private Sub mnuSaveAsltem_Click() CommonDialogl.CancelError = True On Error GoTo Errhandler: CommonDialogl .ShowSave 'сохранение выбранного файла в RTF формате RichTextBoxI .SaveFile CommonDialogl .FiieName, rtf RTF UnsavedChanges = False Errhandler: 'если нажата кнопка Cancel End Sub Команда Print (Печать) Текст из окна легко можно распечатать. Вам достаточно воспользоваться функцией SelPrint и задать внутренний адрес или указатель на драйвер устройства принтера, который вы хотите использовать. В этой програм- ме печать осуществляется с использованием объекта Printer (Принтер) и свойства hDС, которое содержит текущий указатель драйвера устройства системного принтера: Private Sub mnuPrintltem_Click() 'печатать текущий документ используя 'установки принтера по умолчанию RichTextBoxI .SelPrint (Printer.hDC) End Sub Команда Exit (Выход) Основным назначением команды Exit (Выход) является завершение рабо- ты программы путем выполнения оператора End. Однако, как и для рас- смотренной выше команды Close (Закрыть), я включил в текст программы
Урок 15. Обработка текстов с помощью Rich Textbox 495 проверку наличия не сохраненных изменений в документе, прежде чем разрешить программе выйти с окончательной потерей данных пользова- теля. Здесь также выполняется проверка текущего статуса сохранения с использованием глобальной переменной UnsavedChanges, а пользователю дается возможность сохранить не сохраненные изменения. Заметим, что как и команда Close (Закрыть), команда Exit (Выход) также устанавливает значение переменной UnsavedChanges в False (Ложь) после сохранения фай- ла на диске. Private Sub mnuExitltem_Click() Dim Prompt As String Dim Reply As Integer CommonDialogl.CancelError = True On Error GoTo Errhandler: If UnsavedChanges = True Then Prompt = “Сохранить Ваши изменения?” Reply = MsgBox(Prompt, vbYesNo) If Reply = vbYes Then CommonDialogl .ShowSave RichTextBoxI.SaveFile CommonDialogl.FileName, rtfRTF UnsavedChanges = False End If End If End 'после сохранения файла выходим из программы Errhandler: 'если нажата кнопка Cancel возвращаемся в программу End Sub Шаг вперед: отображение кодов RTF в документе Как вы узнали, средство управления Rich Textbox (Форматированный тек- стовый блок) даёт вам возможность создавать дополнительные эффекты для вашего документа с помощью добавления специальных кодов в ваш файл в соответствии со схемой форматирования, известной как RTF. По- скольку средство управления Rich Textbox (Форматированный текстовый блок) также обладает возможностью отображать обычные текстовые фай- лы, вы можете при желании просмотреть коды форматирования в вашем документе. Для модификации программы RTFEdit таким образом, чтобы она могла открывать файлы в текстовом режиме и отображать информацию о кодах RTF-форматирования, выполните приведенные ниже действия.
496 Часть 5. Возможности и средства профессиональной версии Как просмотреть RTF-код 1. Откройте окно Code (Код) и выделите процедуру обработки события m ntlOpen Item в открывающемся списке Object (Объект). 2. Измените программный оператор, загружающий RTF-файл, на следующий: RichTextBoxI.LoadFile CommonDialogl.FileName, rtfText Обратите внимание, что последний аргумент в операторе за- менен с rtf RTF на rtfText. 3. Щелкните на кнопке Start (Пуск) на панели инструментов, а затем щелкните на команде Open (Открыть) в меню File (Файл). 4. Откройте файл sampie.rtf, созданный вами ранее в этом уроке. Если хотите, вы можете открыть какой-либо другой файл. Ваша форма будет иметь вид, подобный представленному на рисунке. ia, RTF редактор Ф$йл Правкй Формат в {\rtfl\ansi\ansicpg1251 \deff0\deftab720{\fonttbl{\f0\fnil MS Sans i Serif;}{\f1 \fdecor\fcharset2{\x\fname Symbol;}MT s Symbol;}{\f2\fswiss\fcharset204{\x\fname MS Sans Serif;}MS Shell s Dlg;}{\f3\fswiss Tahoma;}{\f4\fswiss MS Sans Serif;}} s {\colortbl\redO\greenO\WueO;} \deflang1033\pard\plain\f4\fs17 VddVf2\'ee Vf0\'e5\,e4\,e0\,ea\,f2\,ee\,f0 8 RTFA'f4\,eO\'eS\'eb\'ee\'e2. \'c2\'e2\,e5\,e4\,e8\,f2\‘e5 VeaVeOVea e VecVeeVeGVedVee \'e1 VeeVeb\'fcVf8\'e5 \'f2\'e5\'ea\'f1 Vf2\'eO Ve2 г VeeVeaVedVee, Ve8\'f 1 \'efVeeVebVfc\'e7\‘f3\'ff VefVeeVebVeeVfl \'fb я Vef\,f0\,ee\,ea\'f0\,f3\'f2\'ea\'e8 I 8 \par} ’i I 5. Посмотрите на RTF-коды, содержащиеся в документе. Вы увидите информацию о гарнитуре шрифта, цвете, стиле, выравнивании и т.д. Где-то в середине блока вы обнаружите текст. (Это объясняет тот факт, что файлы текстового процес- сора имеют большой объем.)
Урок 15. Обработка текстов с помощью Rich Textbox 497 6. В меню File (Файл) выберите команду Exit (Выход), чтобы зак- рыть программу. Щелкните на кнопке No (Нет), когда увидите запрос о сохранении изменений. 7. В процедуре обработки события mnuOpenltem_Click верните значение аргумента с rtfText на rtf RTF. Поздравляю! Теперь вы готовы к созданию ваших собственных докумен- тов в формате RTF и приложений, обладающих полнофункциональными возможностями текстового процессора. Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 16. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Сохраните все изменения, сделанные вами в редакторе RTF, записав их в файле с именем MyRTFEditoг. Краткое содержание Чтобы Сделайте следующее Инсталлировать средства управле- ния ActiveX Professional Edition Изменить начерта- ние всех символов для выделенного текста на пропис- ные символы в окне форматированного текста Отобразить диало- говое окно Font (Шрифт) Щелкните на команде Components (Компоненты) в меню Project (Проект), щелкните на закладке Controls (Средства управления), затем щелкните на поле флажка рядом с именем средства управления ActiveX, которое вы хотите инсталлировать. Воспользуйтесь функцией Ucase. Например: RichTextBoxI .SelText = _ U Case (R ichTextBox! .SelText) Используйте функцию ShowFont для объекта типа диалоговое окно общего назначения. Например: CommonDialogl .ShowFont
498 Часть 5. Возможности и средства профессиональной версии Чтобы Сделайте следующее Изменить начерта- ние выделенного тек- ста на полужирное Используйте свойство SelBold. Например: RichTextBoxI .SelBold = Not RichTextBoxI .SelBold Изменить начертание выделенного текста на курсивное Используйте свойство Selltalic. Например: RichTextBoxI .Selltalic = _ Not RichTextBoxI .Selltalic Изменить начерта- ние выделенного тек- ста на подчеркнутое Используйте свойство SelUnderline. Например: RichTextBoxI .SelUnderline = _ Not RichTextBoxI .SelUnderline Скопировать выде- ленный текст в буфер обмена Windows Используйте объект Clipboard (Буфер обмена) и функцию SetText. Например: Clipboard. SetText RichTextBoxI. Sei RTF Вырезать выделен- ный текст Используйте объект Clipboard (Буфер обмена) и функцию SetText, затем очистите область с тек- стом. Например: Clipboard.SetText RichTextBoxI .Sei RTF RichTextBoxI .SeIRTF ="" Вставить текст в по- зицию курсора ввода Используйте объект Clipboard (Буфер обмена) и функцию GetText. Например: RichTextBoxI .SeIRTF = ClipBoard.GetText Найти текст в окне форматированного текстового блока Используйте команду Find (Найти). Например, что- бы найти первое вхождение слова Понедельник в тексте, необходимо сделать следующее: RichTextBoxI.Find("rioHeflenbHMK",,,rtfWholeWord) Загрузить RTF-файл Воспользуйтесь функцией LoadFile. Например: CommonDialogl.ShowOpen RichTextBoxI .LoadFile CommonDialogl .FileName,_ rtf RTF Закрыть RTF-файл Очистите содержимое текстового окна с помощью свойства Text. Например: RichTextBoxI .Text = ““ Сохранить RTF-файл Используйте функцию SaveFile. Например: CommonDialogl .ShowSave RichTextBoxI .SaveFile CommonDialogl. FileName,_ rtfRTF Распечатать RTF- файл Использовать функцию SeiPrint. Например: RichTextBoxI .SelPrint (Printer.hDC) Выйти из программы Использовать оператор End
УРОК ” 16; я ж м Индикация хода выполнения операции и отображение параметров состояния Урок ® рассчитан * на в 40 минут » Вы научитесь: графически отображать информацию о ходе выполнения операции с помощью средства управления Progress Ваг (Индикатор хода выполнения); создавать горизонтальную панель для ввода значений пользователем с помощью средства управления Slider (Скользящая шкала); отображать панель с информацией о состоянии парамет- ров в нижней части окна вашего приложения с помощью средства управления Status Ваг (Панель состояния). В уроке 15 вы узнали, как добавлять в ваше приложение воз- можности текстового процессора с помощью средства управ- ления R ich Тextbox (Форматированный текстовый блок). В этом уроке мы продолжим работу со средствами управления
500 Часть 5. Возможности и средства профессиональной версии ActiveX профессиональной версии Visual Basic и рассмотрим возможности объединения средств управления Progress Ваг (Индикатор хода выполне- ния), Slider (Скользящая шкала) и Status Ваг (Панель состояния) в вашем приложении. Средство Progress Ваг (Индикатор хода выполнения) дает воз- можность пользователю визуально наблюдать за ходом выполнения дли- тельных операций, таких как сложная сортировка или сохранение фай- ла. Средство Slider (Скользящая шкала) обеспечивает механизм как для получения входной информации, так и для отображения выходной ин- формации: вы можете либо сами двигать бегунок по горизонтальной шкале с числовыми отметками, либо заставить программу перемещать бегунок для отображения хода выполнения задачи. Наконец, средство Status Ваг (Панель состояния) отображает полезную информацию о состоянии ва- шей программы и режима клавиатуры в виде информационных полей общим числом до 16. Эти поля вы можете увидеть в нижней части окна вашего приложения. Поля обычно используются для отображения вре- мени и даты, информации об используемом шрифте, статусе клавиш пе- реключения режима клавиатуры (триггерных клавиш клавиатуры), све- дений об операционной системе и т.д. Группа из этих трех средств управления ActiveX позволяет вам создавать наглядный и эффективный графический интерфейс пользователя. Отображение хода выполнения задачи с помощью средства управления Progress Ваг (Индикатор хода выполнения) В настоящее время, когда широко используется сеть Internet, большин- ство профессиональных пользователей программных средств каждый день обращаются за какой-либо необходимой им информацией и перепи- сывают (перекачивают) ее на свой компьютер. Процесс выполнения зтих действий отображается с помощью индикаторной шкалы. Она позволя- ет графически представить, насколько длительной будет данная опера- ция и сколько времени остается до ее завершения. Типовая индикатор- ная шкала хода выполнения операции в Microsoft Internet Explorer (Проводник Internet) выглядит следующим образом:
Урок 16. Индикация хода выполнения операции 501 Сохранение; 'ie^sett^.exe с rnsvaus,wwi.corixion.com I Осталось-времени: 1 мин. 22 сек. (скопировано: 161 КБ] Загрузить в D \ ____________ - Скорость першами: ШКБ/сек ; |ГЖй»«П| Индикатор хода выполнения не всегда показывает, сколько минут или секунд займет выполнение компьютером данной задачи, но обеспечивает визуальную информацию, которая сообщает пользователю, что операция продолжает выполняться и что компьютер не завис. Психологически ин- дикатор хода выполнения позволяет снять напряжение, связанное с ожи- данием результатов сложных вычислений, и обеспечивает реальное сред- ство измерения хода выполнения данной вычислительной задачи. В этом разделе вы узнаете, как добавлять индикатор хода выполнения в интерфейс пользователя вашего приложения. Я использую индикатор хода выполнения во всех случаях, когда при выполнении приложением какой-либо задачи имеет место задержка в пять или более секунд при пользовании компьютером со средними возможностями. Ниже приведе- ны примеры операций, выполнение которых сопровождается подобной задержкой: получение файлов из сети Internet; открытие и сохранение файлов; сортировка больших списков; воспроизведение музыки или другие операции с устройствами муль- тимедиа; отслеживание хода выполнения интенсивных вычислений, таких как сложные финансовые расчеты; копирование дисков или установка программного обеспечения.
502 Часть 5. Возможности и средства профессиональной версии Инсталляция средства управления Progress Ваг (Индикатор хода выполнения) Прежде чем приступить к использованию средства управления Progress Ваг (Индикатор хода выполнения), вы должны добавить его в вашу па- нель инструментов. Средство управления ActiveX Progress Ваг (Индикатор хода выполнения) и другие средства ActiveX, которые вы будете использо- вать в этом уроке, хранятся в файле средств управления общего назна- чения Microsoft Windows с именем mscomctl.ocx. Если вы добавите сред- ства управления общего назначения Windows в вашу панель инструментов, то получите доступ к девяти средствам управления ActiveX, которые сможете использовать для организации интерфейса пользова- теля в ваших программах. Совет. Для более подробной информации о средствах управления ActiveX, включенных в профессиональную версию Visual Basic, см. раздел «Инсталляция средств управления ActiveX профессиональной вер- сии» в уроке 15, «Обработка текстов с помощью средства управления Rich Textbox (Форматированный текстовый блок)». Как добавить средства управления общего назначения Windows в вашу панель инструментов В проекте, который вы будете использовать в данном уроке в качестве образца, средства управления общего назначения Windows Common Control уже включены в панель инструментов. Однако когда вы станете в буду- щем создавать ваши собственные проекты, вам придется самостоятель- но добавлять их в панель инструментов. Следующие действия иллюст- рируют, как это делается. (Вы можете сразу же попрактиковаться в этих действиях, либо сделать это в дальнейшем по мере надобности.) 1. В меню Project (Проект) щелкните на команде Components (Ком- поненты), а затем щелкните на закладке Controls (Средства уп- равления). Visual Basic отобразит средства управления ActiveX, инсталлированные в вашей системе. 2. Прокрутите список средств управления и найдите имя Microsoft Windows Common Controls 6.0. 3. Щелкните на поле флажка рядом с именем средства управ- ления, затем щелкните на кнопке ОК.
Урок 16. Индикация хода выполнения операции 503 Не выбирайте пункт Microsoft Windows Common Controls—2 или Microsoft Windows Controls-3. Эти файлы объединяют в себе дру- гие полезные средства управления ActiveX общего назначения. К ним относятся Month View (Календарь), DateHime Picker (Выбор даты и времени) и Flat Scroll Bars (Полосы прокрутки) (они описа- ны в уроке 15). После того, как вы щелкнете на кнопке OK, Visual Basic доба- вит девять средств управления интерфейсом пользователя Windows в вашу панель инструментов. Ваша панель инстру- ментов будет выглядеть подобно представленной на рисунке. Средство управления Status Ваг (Панель состояния) Средство управления Progress Ваг (Индикатор хода выполнения) Средство управления Slider (Скользящая шкала) Программа Прогресс Программа Прогресс, содержащаяся в nanKe\Vb6Sbs\Less16, демонстриру- ет индикатор хода выполнения операции, связанной с продолжительны- ми вычислениями. Программа Прогресс является скорректированной вер- сией программы SortDemo из урока 12, в которой был использован алгоритм
504 Часть 5. Возможности и средства профессиональной версии сортировки Shell для упорядочения информации в текстовом окне. Поскольку процесс сортировки занимает несколько секунд, было бы не- плохо дать пользователю возможность наблюдать за прогрессом выпол- нения алгоритма сортировки. Вы запустите программу Прогресс и посмот- рите, как она работает. Запустим программу Прогресс 1. Откройте проект Progress.vbp, содержащийся в папке \Vb6Sbs\Less16. Если вы увидите сообщение с запросом, хотите ли вы сохра- нить внесенные изменения (поскольку вы добавили в панель инструментов средства управления общего назначения Windows Common Control), щелкните на кнопке No (Нет). 2. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Visual Basic отобразит интерфейс пользователя программы Про- гресс. 3. В меню Файл программы Прогресс щелкните на команде Открыть, а затем откройте файл sorttest.txt, содержащийся в папке \Vb6Sbs\Less16. Visual Basic отобразит содержимое текстового файла в окне. (Файл содержит пять копий массивов строк, каждая из кото- рых начинается со своей буквы алфавита - всего 180 строк.) 4. В меню Файл щелкните на команде Сортировка, чтобы осуще- ствить сортировку содержимого текстового окна в алфавитном порядке. Visual Basic приступит к процессу сортировки и, как показано на рисунке, отобразит в нижней части формы шкалу, отмеча- ющую ход выполнения операции. Обратите внимание: шкала индикатора будет заполняться в два прохода. Первый проход соответствует процессу подготовки данных, когда файл подвергается сканированию с целью опре- деления количества строк; второй проход соответствует выпол- нению самого процесса сортировки. Я умышленно разделил выполнение данной операции на две фазы; при этом процесс выглядит для пользователя более наглядно.
Урок 16. Индикация хода выполнения операции 505 Через некоторое время программа отобразит в текстовом окне отсортированный список, а шкала индикации хода выполнения операции исчезнет. 5. В меню Файл щелкните на команде Выход для выхода из про- граммы. Рассмотрим исходный текст программы Прогресс Программный код, управляющий индикатором хода выполнения опера- ции, содержится в процедуре обработки события mnultemSortText_Click, ко- торая выполняется каждый раз, когда пользователь щелкает на команде Сортировка в меню Файл. Рассмотрим этот программный код. >- Отобразите окно Code (Код) и откройте процедуру обработ- ки события mnultemSortText_Click. Этот исходный код вам уже знаком — в уроке 12 вы использо- вали его для упорядочения содержания текстового окна в ал- горитме сортировки Shell. Алгоритм сортировки Shell содержится в программном коде модуля prog res. has данного проекта. Проце- дура обработки события управляет несколькими важными за- дачами, выполняемыми до и после осуществления сортиров- ки. К этим задачам относятся определение количества строк в тексте, загрузка каждой строки в строковый массив с именем strArray, вызов процедуры S hell Sort и отображение результатов в
506 Часть 5. Возможности и средства профессиональной версии текстовом окне. В этом уроке основное внимание сосредоточе- но на программном коде, который управляет индикатором хода выполнения операции. На стадии разработки я установил для свойства Visible (Види- мость) индикатора хода выполнения - значение False (Ложь), чтобы шкала индикации не отображалась на экране, когда это не нужно. Следовательно, моей первой задачей в процедуре обработки события mnultemSortText_Click является сделать шка- лу индикатора видимой и установить для свойства ограниче- ния по максимуму - Мах значение, равное количеству симво- лов в файле. Я также устанавливаю для свойства ограничения по минимуму - Min значение 1, а для свойства Value - значение 1 (это свойство определяет место начального отсчета на шкале индикации хода выполнения): charslnFile% = Len (txtNote.Text) ProgressBarl .Visible = True ProgressBarl .Min = 1 ProgressBarl .Max = chars I n Fi le% 'установка максимального ограничения шкалы индикации ProgressBarl .Value = 1 'установка начального положения указателя Далее осуществляется посимвольное сканирование содержи- мого текстового блока с целью определить количество строк документа. Найденное при этом значение понадобится в даль- нейшем для вызова процедуры ShellSort. По мере обработки каж- дой строки обновляется свойство Value индикатора хода выпол- нения. Этому свойству присваивается номер текущего символа, представленный переменной i% (этот оператор выделен полу- жирным), используемой в качестве счетчика: 'определение количества строк в текстовом блоке For i% = 1 То charslnFile% letter$ = Mid(txtNote.Text, i%, 1) ProgressBarl .Value = i% If letter$ = Chr$(13) Then lineCount% = lineCount%+1 i% = i%+1 End If Next i% 'перемещение позиции индикатора 'если найден символ возврата каретки 'инкремент счетчика строк 'пропуск символа перевода строки
Урок 16. Индикация хода выполнения операции 507 После первого прохода шкалы индикации осуществляется сброс свойства Value в начальную позицию и установка для свой- ства ограничения по максимуму — Мах значения, равного коли- честву строк в документе (это значение соответствует накоп- ленному значению переменной lineCount%): 'сброс индикатора хода выполнения для следующего этапа сортировки ProgressBarl .Value = 1 ProgressBarl .Max = lineCou nt% Поскольку на подготовительном этапе каждая строка заноси- лась в массив strArray, текущей позиции индикатора можно при- своить номер текущей строки (curline%) (этот оператор выделен полужирным шрифтом). По мере увеличения значения свой- ства Value увеличивается площадь шкалы индикации хода вы- полнения, заполненная темным цветом: 'создание массива для хранения текста, содержащегося в блоке ReDim strArray$(lineCount%) 'создание массива необходимого размера curline% = 1 ln$ =..использование !п$ для посимвольного построения строк Fori% = 1 То charslnFile% 'цикл обработки текстового блока letter$ = Mid(txtNote.Text, i%, 1) If letter$ = Chr$(13) Then 'если найден символ возврата каретки ProgressBarl.Value = curline% 'отображение прогресса выполнения curline% = curline%+1 'инкремент счетчика строк 1% = 1%+1 'пропуск символа перевода строки 1п$ = "" 'очистка строки и переход к следующей Else ln$ = ln$ & letters ‘добавление символа в строку strArray$(curline%) = ln$ 'и помещение его в массив End If Next i% Наконец, после завершения сортировки, шкалу индикатора хода выполнения необходимо скрыть: ProgressBarl .Visible = False Как видно из этого примера, индикатор хода выполнения является удоб- ным инструментом, который вы можете использовать в вашей форме при выполнении программой продолжительных вычислений. Установив для свойств Min и Мах необходимые значения ограничителей, вы можете легко управлять работой индикатора хода выполнения операции с помощью оператора For...Next или иной структуры обработки циклов.
508 Часть 5. Возможности и средства профессиональной версии Управление графическим вводом с помощью средства управления Slider (Скользящая шкала) Если вам нравится использовать графическую индикацию в ваших при- ложениях, вы можете воспользоваться также средством управления ActiveX с именем Slider (Скользящая шкала) для получения входных дан- ных и отображения прогресса выполнения задачи. Средство управления Slider (Скользящая шкала) представляет собой составной элемент интер- фейса пользователя, содержащий линейку с бегунком и отметки-марке- ры. Вы можете перемещать бегунок вдоль линейки, перетаскивая его мышью, щелкая на отметках-маркерах, либо с помощью клавиш управ- ления курсором на клавиатуре. Средство управления Slider (Скользящая шкала) является полезным устройством ввода для установки полей до- кумента в текстовом процессоре, для работы с мультимедиа-приложе- ниями, прокрутки содержимого окон и других задач, требующих относи- тельного перемещения указателя в заданных границах. Средство управления Slider (Скользящая шкала) может также оказаться весьма полезным для ввода числовых значений или установки цветов. Запустим программу RTFEdit2 Чтобы попрактиковаться в использовании средства управления Slider (Скользящая шкала), вы загрузите и запустите программу RTFEdit2, кото- рая представляет собой усовершенствованную версию редактора RTF, созданного вами в уроке 15. 1. Откройте проект RTFEdit2.vbp, содержащийся в папке \Vb6Sbs\Less16, и запустите его. 2. В меню Файл программы щелкните на команде Открыть и от- кройте файл с именем picnic.rtf, содержащийся в папке \Vb6Sbs\Less16. Ваша форма будет выглядеть следующим образом:
Урок 16. Индикация хода выполнения операции 509 Программа RTFEdit2 содержит две новые особенности: средство управления Slider (Скользящая шкала) в верхней части формы и средство управления Status Ваг (Панель состояния) в нижней части формы. Линейка со скользящим бегунком-указателем предоставляет вам удобный инструмент для задания левого и правого отступа при размещении на странице выделенного тек- ста или текста, в котором в настоящий момент находится кур- сор ввода. Помимо этого, вы можете видеть панель состояния с четырьмя информационными полями, содержащими имя от- крытого файла, выбранный шрифт, текущее время и текущую дату. 3. Щелкните на второй строке текста файла picnic.rtf. Указатель на скользящей шкале переместится в первую пози- цию табуляции, которая соответствует левому отступу теку- щей строки.
510 Часть 5. Возможности и средства профессиональной версии 4. Перетащите бегунок-указатель вправо, чтобы увеличить ве- личину отступа слева. По мере перетаскивания указателя границы текста расширя- ются автоматически. Кроме того, при этом появляется окошко с подсказкой (в виде ниспадающего меню), содержащей инфор- мацию о величине отступа в условных графических единицах (twips) шкалы измерения форм Visual Basic, принятой по умол- чанию. (Одна единица соответствует 1/1440 дюйма или 0,0017638(8) сантиметров.) Вы можете изменить тип единиц измерения, видоизменив значение свойства масштабирования ScaleMode вашей формы. 5. Попробуйте установить различные значения отступа с по- мощью скользящей шкалы. При желании вы можете выделить несколько строк и задать величину отступа для целой группы строк за один раз. Обра- тите внимание, что каждый раз, когда вы щелкаете мышью на новой строке, бегунок-указатель перемещается таким образом, чтобы отобразить величину отступа для данной строки. 6. Закончив, щелкните на команде Выход из меню Файл програм- мы RTFEdit2. 7. При появлении сообщения с запросом, следует ли сохранить изменения, щелкните на кнопке No (Нет). Рассмотрим исходный текст программы для средства управления Slider (Скользящая шкала) После того, как вы опробовали средство управления Slider (Скользящая шкала) в действии, перейдем к рассмотрению исходного кода трех про- цедур обработки событий, обеспечивающих работу этого средства. 1. Дважды щелкните на форме, чтобы отобразить текст проце- дуры Form_Load. Вы увидите следующий исходный код: Private Sub Form_Load() 'Установка начальных значений для средства Slider (Скользящая шкала) Sliderl .Left = RichTextBoxI .Left 'выровнять no текстовому блоку Sliderl .Width = RichTextBoxI.Width 'примечание: все позиции на шкале измеряются в единицах twips Sliderl.Мах = RichTextBoxI .Width Sliderl .TickFrequency = Sliderl .Max * 0.1
Урок 16. Индикация хода выполнения операции 511 Sliderl .LargeChange = Sliderl.Max * 0.1 Sliderl .SmallChange = Sliderl .Max * 0.01 End Sub Процедура обработки события Form_Load лучше всего подходит для помещения в ее тело операторов, определяющих конфигу- рацию скользящей шкалы для ее последующего применения. Первые два оператора с помощью свойств Left и Width объекта типа форматированный текстовый блок задают выравнива- ние объекта типа скользящая шкала по текстовому блоку. Хотя в процессе создания скользящей шкалы я уже осуществил ее предварительное выравнивание при размещении ее над тек- стовым окном, свойства Left и Width дают возможность сделать это более точно, воспользовавшись значениями отступов, при- нятыми для текстового блока. Далее, я установил для свойства Мах скользящей шкалы зна- чение, равное ширине текстового блока. Вы также можете ус- тановить свойство Мах в окне Properties (Свойства) на этапе раз- работки, но удобнее это сделать путем связывания максимального диапазона перемещения указателя скользящей шкалы с размером окна текстового процессора. (Если меняют- ся размеры окна, то вместе с ними меняются размеры скользя- щей шкалы.) Для свойства Min установленное начальное значе- ние равно нулю. Наконец, я определил в тексте процедуры обработки события Form_Load свойства TickFrequency, LargeChange и SmallChange. Свой- ство TickFrequency задает частоту расположения маркеров на скользящей шкале относительно диапазона возможных значе- ний (другими словами, разности между значениями Мах и Min). Например, если диапазон равен 1000, а для свойства TickFrequency установлено значение 100, на шкале будет 10 отметок-марке- ров. Свойство LargeChange задает количество отметок, на кото- рое переместится бегунок-указатель при щелчке мышью спра- ва или слева от шкалы, либо при нажатии клавиш | PageUp | или I PageDown | соответственно. Свойство SmallChange задает коли- чество отметок, на которое переместится бегунок-указатель при нажатии клавиш или [<—J. 2. Используйте список Object (Объект) в окне Code (Код) для ото- бражения текста процедуры обработки события Slider1_Scroll.
512 Часть 5. Возможности и средства профессиональной версии Процедура обработки события Slider1_Scroll привязывает мани- пуляции с использованием скользящей шкалы к заданию по- лей отступов в окне форматированного текста. Каждый раз, когда пользователь перемещает бегунок-указатель, Visual Basic вызывает эту процедуру обработки события. Свойство Value объекта типа скользящая шкала используется для при- своения значения текущего положения бегунка-указателя свойству Sellndent объекта типа форматированный текстовый блок, которое определяет величину отступа слева для выделен- ного текста. Private Sub Slider1_Scroll() RichTextBoxI .Sellndent = Sliderl .Value End Sub Этот оператор будет работать, поскольку для свойства Мах объекта типа скользящая шкала было задано значение, равное ширине объекта типа форматированный текстовый блок. Если размеры для этих объектов были заданы различными, значения, присваиваемые свойству Value скользящей шкалы, не будет соответствовать размерам текстового окна. 3. Используйте поле со списком Object (Объект) в окне Code (Код) для отображения текста процедуры RichTextBoxI.SelChange. Visual Basic выполняет эту процедуру, когда изменяется теку- щее выделение в окне форматированного текста либо когда из- меняется положение курсора ввода. Поскольку мне хотелось бы, чтобы бегунок-указатель перемещался соответствующим образом при выделении в тексте различных абзацев в докумен- те, я добавил в текст операторы процедуры обработки собы- тия, которые обновляют позицию бегунка-указателя в зависи- мости от значений отступа для выделенного фрагмента: Private Sub RichTextBoxI_SelChange() 'если для выделенного фрагмента существует один стиль отступа, - ' отобразить соответствующее 'значение на скользящей шкале ' (если существуют несколько стилей, вернуть Null) If Not lsNull(RichTextBox1.Sellndent) Then Sliderl .Value = RichTextBoxI .Sellndent End If End Sub
Урок 16. Индикация хода выполнения операции 513 Замечу, что функция IsNull в этой процедуре осуществляет про- верку, не имеет ли свойство Sellndent объекта типа форматиро- ванный текстовый блок значение Null (или пусто). Свойство Sellndent возвращает значение Null, если для текущего выделен- ного фрагмента имеются два различных стиля отступа, что приведет к ошибке выполнения при назначении свойства Value объект типа скользящая шкала. Чтобы избежать подобной си- туации, выполняется проверка значения свойства Sellndent на неравенство его Null, прежде чем присвоить это значение пози- ции бегунка-указателя. В свои приложения вы можете также включать проверку наличия маркированных списков. Итак, вы познакомились с использованием средства управления Slider (Скользящая шкала) для задания отступов в RTF-документе. Прежде, чем двигаться дальше, давайте рассмотрим, какие данные отображаются в приложении RTFEdit2 с помощью средства управления Status Ваг (Панель состояния). Отображение в приложении информации с помощью средства управления Status Ваг (Панель состояния) Панель состояния представляет собой строку с множеством прямоуголь- ных полей, расположенную в нижней части окна приложения Windows. Типичным примером является панель состояния Microsoft Word, в кото- рой отображаются номера текущей страницы и раздела, позиция курсо- ра, статусы нескольких режимных переключателей, функция автокор- рекции и несколько других полезных элементов. •: Page id' ""Sec'l W15 iAt 2Q.6om U 31 ' Ы 35 ' ' j-i’J p EC p/PH [ i Панель состояния Microsoft Word Вы можете добавить панель состояния в ваше приложение Visual Basic с помощью средства управления ActiveX Status Ваг (Панель состояния), кото- рое является частью средств управления Windows общего назначения Windows Common Control (файл mscomctl.ocx). Если вы помещаете панель со- стояния в вашу форму, она немедленно появляется в нижней части окна формы. Вы можете далее задать конфигурацию общих характеристик объекта типа панель состояния с помощью окна Properties (Свойства). Вы также можете добавлять и удалять поля в панели состояния с помощью щелчка на ней правой кнопкой мыши, последующего щелчка на команде Properties (Свойства) и задании настроек на вкладке Panels (Поля) диалого-
514 Часть 5. Возможности и средства профессиональной версии вого окна Property Pages (Свойства). Вы можете поместить в каждую панель состояния до 16 информационных полей. Ei Property Pages General Panels | Font | Picture | Вкладка Panels (Поля) диалогового окна Property Pages (Свойства) дает возможность добавлять информационные поля в панель состояния Запустим программу RTFEdit2 Снова запустим программу RTFEdit2, чтобы посмотреть, как работает па- нель состояния в редакторе RTF. 1. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы RTFEdit2. Если вы закрыли программу или начали работу над уроком с этого раздела, загрузите программу RTFEdit2 из папки \Vb6Sbs\Less16 и запустите ее. Обратите внимание, что в панели состояния в нижней части экрана появятся текущая дата и время. Укажите мышью на дату и время, и вы увидите контекстную подсказку с поясне- ниями по каждому из полей. 2. Откройте файл picnic.rtf, который содержится в папке \Vb6Sbs\Less16. В левой части панели состояния появится имя picnic.rtf.
Урок 16. Индикация хода выполнения операции 515 3. Щелкните на последней строке в документе. Во втором поле панели состояния появится название текущего шрифта MS Sans Serif. Ваша форма будет выглядеть следующим образом: Si. RTF Edit 2 £айл Редактор Формат < I . Летний пикник! Еда, напитки и хорошее настроение! День для вашей семьи и друзей! j/ Волейбол, бадминтон н теннис! В 11:00, в Воскресенье! 4. Выделите третью строку, а затем щелкните на команде Шрифт в меню Формат. 5. Когда появится диалоговое окно Шрифт, измените гарнитуру шрифта на Times New Roman или какой-либо другой шрифт, установленный в вашей системе. Щелкните на кнопке ОК. Шрифт, которым отображаются символы, изменится, а соот- ветствующее имя шрифта появится в панели состояния. 6. В меню Файл щелкните на команде ВЫХОД для выхода из про- граммы. Теперь посмотрим, какие значения свойств установлены для панели со- стояния. Рассмотрим значения свойств панели состояния На странице свойств содержится группа параметров, которые определя- ют конфигурацию и режим работы средства управления. В Visual Basic
516 Часть 5. Возможности и средства профессиональной версии вы можете использовать страницы свойств для задания средствам уп- равления ActiveX нужных вам характеристик. Проделайте приведенные ниже действия, чтобы понять, каким образом я использовал страницы свойств для создания информационных полей панели состояния в про- грамме RTFEdit2. 1. Щелкните на панели состояния формы правой кнопкой мыши. 2. Щелкните на команде Properties (Свойства) в появившемся меню. Появится диалоговое окно Property Pages (Свойства) для объекта типа панель состояния. 3. Щелкните на закладке Panels (Поля). Вкладка Panels (Поля) содержит несколько настроек для каж- дого из полей в панели состояния. Для добавления нового поля в панель состояния щелкните на кнопке Insert Panel (Добавить поле). Для удаления поля щелкните на кнопке Remove Panel (Уда- лить поле). Группа полей, которые вы создали в панели состоя- ния, называется Набором полей. Вы можете обратиться к каж- дому из полей индивидуально, указав для Набора полей индекс интересующего вас поля. Например, чтобы поместить имя фай- ла myfile.txt в первое поле панели состояния, вам необходимо ис- пользовать следующий программный код: StatusBarl .Panels(1 ).Text = "myfile.txt" Помимо этого, вы можете назначить для поля панели состоя- ния значение, являющееся свойством другого объекта. Напри- мер, приведенный ниже программный код помещает в первое поле панели состояния имя файла (без указания пути), которое хранится в свойстве FileTitle объекта типа диалоговое окно об- щего назначения: StatusBarl. Panels(1).Text = CommonDialogl.FileTitle 4. Щелкните на поле с ниспадающим списком Alignment (Вырав- нивание) на вкладке Panels (Поля). Вы увидите список возможных способов выравнивания текста, в том числе по левому краю, по центру и по правому краю. Эти параметры определяют, каким образом будет отображаться текст в поле панели состояния, для которого вы задаете кон- фигурацию.
Урок 16. Индикация хода выполнения операции 517 5. Щелкните на поле с ниспадающим списком Style (Стиль) на вкладке Panels (Поля). Вы увидите список форматированных опций, которые опреде- ляют тип информации, отображаемой в поле панели состояния. Опция sbrText (принята по умолчанию) означает, что вы будете вводить содержимое поля вручную с помощью свойства Text, либо через текстовое поле Text на вкладке Panels (Поля), либо через свойство Text в вашем программном коде (см. п. 3). Осталь- ные опции подразумевают автоматическое задание парамет- ра, если вы выберете одно из них, Visual Basic при отображе- нии панели состояния автоматически отобразит значение, которое вы выберете. Ниже приведено описание возможных опций и их назначение: Стиль (Опция) Отображает следующую информацию SbrText sbrCaps sbrNum sbrlns sbrScrl sbrTime sbrDate sbrKana Текст, задаваемый пользователем в свойстве Text Статус клавиши | CapsLock | Статус клавиши [ NumLock] Статус^славиши | Insert | Статус клавиши | Scrol 1 Lock | Текущее время из системных часов Текущая дата из системных часов Статус клавиши | KanaLock | (только для опера- ционных систем, используемых в Японии)
518 Часть 5. Возможности и средства профессиональной версии 6. Щелкните два раза на направленной вправо стрелке поля Index (Индекс) на вкладке Panels (Поля), чтобы перейти к третьему полю панели состояния Time (Время). Я задал конфигурацию этого поля таким образом, чтобы здесь отображалось текущее время. (Используется значение sbrTime в группе опций стиля Style.) 7. Щелкните на направленной вправо стрелке поля Index (Ин- декс), чтобы перейти к четвертому полю панели состояния Date (Дата). Для отображения текущей даты в панели состояния использу- ется опция sbrDate. Для каждого поля панели состояния я также вручную устано- вил ее два параметра: ToolTip Text, который определяет содер- жимое окошка контекстной подсказки, которое появляется, если пользователь устанавливает мышь на поле, а также Minimum Width, который определяет начальную ширину поля в условных единицах (twips). Установка минимальной ширины дает возможность выравнивать поля панели состояния формы на этапе разработки, оставляя возможность их увеличения при увеличении размеров окна формы пользователем. В качестве альтернативы можно использовать опцию sbrContents из откры- вающегося списка AutoSize. При этом размеры полей будут ди- намически изменяться в зависимости от их содержания. 8. Изучите другие настройки и вкладки в диалоговом окне Property Pages (Свойства), а затем щелкните на кнопке Cancel (От- мена). Теперь мы можем перейти к рассмотрению текста процедуры обработки события, которая управляет панелью состояния в процессе выполнения программы. Рассмотрим исходный текст программы управления панелью состояния В отличие от многих других средств управления ActiveX, панель состоя- ния описывается достаточно компактным программным кодом. Вашей задачей обычно является отображение нескольких информационных по- лей в панели состояния с помощью свойства Text. Посмотрим, как это де- лается в программе RTFEdit2, где в панели состояния отображается теку- щее имя файла, гарнитура шрифта, время и дата.
Урок 16. Индикация хода выполнения операции 519 1. Откройте процедуру обработки события mnuSaveAsltem_Click. Как вы помните из урока 15, эта процедура сохраняет теку- щий документ как RTF-файл с использованием диалогового окна Save As (Сохранение) и функции SaveFile объекта типа фор- матированный текстовый блок. Чтобы отобразить в первом поле панели состояния новое имя файла, я добавил после фун- кции SaveFile следующую строку: Statu sBarl. Panels(1) .Text = CommonDialogl. FileTitle Этот оператор копирует имя файла из свойства FileTitle (имя файла без указания пути) в свойство Text первого поля панели состояния. Для указания на другое поле вам достаточно просто изменить номер индекса. Примечание. Для поддержки двух других механизмов сохранения файлов я также добавил приведенную выше строку кода в процедуры обработки со- бытий mnuCloseltem и mnuExitltem. 2. Откройте процедуру обработки события RichTextBoxI_SelChange. Как уже упоминалось ранее в этой главе, процедура обработки события RichTextBox1_SelChange запускается, когда изменяется те- кущее выделение в форматированном текстовом блоке или ког- да пользователь переместил курсор ввода в другое место. По- скольку второе поле в моей панели состояния предназначено для отображения имени гарнитуры шрифта, используемого для выделенного фрагмента, я ввел в эту процедуру обработки со- бытия структуру If...Then...Else для проверки и выявления но- вого имени гарнитуры шрифта и копирования его во второе поле панели управления: Private Sub RichTextBox1_SelChange() 'если для выделенного фрагмента используется одна гарнитура шрифта, 'отобразить ее имя в панели состояния (если несколько гарнитур шрифтов, 'то вернуть Null) If lsNull(RichTextBox1 .SelFontName) Then StatusEJarl ,Panels(2).Text ="" Else StatusBarl .Panels(2).Text = RichTextBoxI .SelFontName End If End Sub
520 Часть 5. Возможности и средства профессиональной версии В этом случае снова используется функция IsNull для провер- ки, не содержит ли свойство SelFontName нулевое (пустое) зна- чение Null. Функция SelFontName возвращает Null, если в текущем выделенном фрагменте содержатся два различных имени гар- нитур шрифта. Поскольку это приведет к ошибке в ходе вы- полнения программы, необходимо осуществить проверку на равенство нулю перед присвоением значения и произвести очи- стку содержимого второго поля в случае обнаружения несколь- ких имен гарнитур шрифта. Панель состояния, отображающая информацию о времени и дате в программе, работает автоматически. Вам не нужно до- бавлять в текст программы какой-либо код для выполнения этих функций. Шаг вперед: отображение статусов Caps Lock и Num Lock состояния клавиатуры Будет полезно также поэкспериментировать с некоторыми другими сти- лями автоматического форматирования полей в панели состояния. Как уже говорилось ранее в этом уроке, вы можете использовать вкладку Panels (Поля) диалогового окна Property Pages (Свойства) для конфигурирования полей панели состояния, чтобы они отражали состояние и управляли по- лезными переключателями режима клавиатуры, такими как | CapsLock}, | NumLockl, | Insert | и | Scrol 1 Lock |. 1. Щелкните правой кнопкой мыши на панели состояния, а за- тем щелкните на команде Properties (Свойства) в появившемся меню. Будет отображено диалоговое окно Property Pages (Свой- ства). 2. Щелкните на закладке Panels (Поля). 3. Щелкните два раза на направленной вправо стрелке рядом с полем Index (Индекс), чтобы перейти к индексу 3 (Time (Время)). 4. Щелкните на поле с ниспадающим списком Style (Стиль), за- тем щелкните на стиле sbrCaps (Caps Lock). 5. Щелкните на направленной вправо стрелке рядом с полем Index (Индекс), чтобы отобразить параметры настройки для чет- вертого поля панели состояния Date (Дата). 6. Щелкните на поле с ниспадающим списком Style (Стиль), за- тем щелкните на стиле sbrName (Num Lock).
Урок 16. Индикация хода выполнения операции 521 7. Щелкните на кнопке ОК, чтобы закрыть диалоговое окно Propery Pages (Свойства). С помощью нескольких щелчков мы- шью вы добавили в вашу панель состояния информацию о ста- тусе переключателей | CapsLock~| и | NumLock Теперь запустим программу и посмотрим, как они будут работать. 8. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы RTFEdit2. 9. Нажмите клавиши | CapsLock | и | NumLock | несколько раз и понаблюдайте за отображением статуса переключателей. На следующем рисунке представлено, каким образом статус пе- реключателей отображается в вашей панели состояния. Это редактор RTF. Введите любой текст. Изучите работу Скользящей шкалы и Панели состояния I ...<-...... | j CAF5 '~"j MliM Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 17. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на Кнопке No (Нет). (Вам не нужно сохранять изменения, свя- занные со статусами переключателей |CapsLock]и | NumLockj.)
522 Часть 5. Возможности и средства профессиональной версии Краткое содержание Чтобы Сделайте следующее Инсталлировать средства управления Windows обще- го назначения Windows Common Control В меню Project (Проект) щелкните на коман- де Components (Компоненты), щелкните на вкладке Controls (Средства управления) и выделите строку Windows Common Controls 6.0. Отобразить индикатор хода выполнения операции Установить свойство видимости Visible. На- пример: ProgressBarl .Visible = True Скрыть индикатор хода вы- полнения операции Установить свойство видимости Visible. На- пример: ProgressBarl .Visible = False Обновить значение, отобра- жаемое индикатором хода выполнения операции Установить свойство значения Value. На- пример: ProgressBarl .Value = curline% Установить максимальное предельное значение объек- та типа скользящая шкала Установить свойство Мах. Например: Sliderl .Мах = RichTextBoxI .Width Установить расстояние меж- ду отметками-маркерами скользящей шкалы Установить свойство TickFrequency. Напри- мер: Sliderl .TickFrequency = Slider.Max * 0.1 Переместить бегунок-указа- тель с помощью программно- го оператора Установить свойство Value. Например: Sliderl .Value = RichTextBoxI.Sellndent Задать конфигурацию полей панели состояния на этапе разработки Щелкнуть правой кнопкой мыши на пане- ли состояния, щелкните на команде Properties (Свойства) в появившемся меню, а затем используйте вкладку Panels (Поля). Задать текст, который будет отображаться в поле панели состояния в процессе выпол- нения программы Использовать набор Panels (Поля) и свой- ство Text. Например: StatusBarl. Panel s(1) .Text = "myfile.txt" Отобразить состояние переключателей |CapsLock |, I NumLock |, | Insert | и I Scrol I Lock | в полях пане- ЛИ состояния Правой кнопкой мыши щелкните на пане- ли состояния, щелкните на команде Properties (Свойства) в появившемся меню, щелкните на вкладке Panels (Поля), щелк- ните на поле с ниспадающим списком Style (Стиль) и выберите необходимый стиль.
УРОК 17 Использование музыкальных эффектов и видеоклипов с помощью средства управления Multimedia MCI Урок рассчитан на 40 минут Вы научитесь: воспроизводить аудиоклипы из файлов с расширением .wav при запуске вашей программы; запускать видеоклипы, хранящиеся в файлах с расши- рением .avi; проигрывать музыку с аудио-CD через привод CD-ROM. В этом уроке вы узнаете, как добавлять музыку и видеоизоб- ражения в ваше приложение с помощью средства управле- ния мультимедиа Multimedia MCI. Это средство управления ActiveX включено в профессиональную версию Microsoft Visual Basic Professional Edition. Средство управления Multimedia MCI управляет записью и воспроизведением му ль-
524 Часть 5. Возможности и средства профессиональной версии тимедийных файлов на устройствах, поддерживающих интерфейс MCI (media control interface), таких как аудио CD-плейеры, видеомагнитофо- ны и проигрыватели видеодисков. Данное средство управления также дает возможность использовать в ваших программах удобный набор кнопок для управления воспроизведением и записью, имитирующих реальные кнопки проигрывателя компакт-дисков. В этом уроке вы воспользуетесь средством управления Multimedia MCI для воспроизведения наиболее по- пулярных форматов мультимедиа, включая файлы с расширениями .wav, .avi и аудио-CD. Воспроизведение аудиоклипов из файлов .wav Средство управления ActiveX Multimedia MCI содержится в файле управле- ния устройствами мультимедиа Microsoft Multimedia Control 6.0 (mci32.ocx). Чтобы иметь возможность использовать это средство управ- ления в вашей программе, вы должны добавить его в панель инструмен- тов с помощью команды Components (Компоненты) из меню Project (Проект), а затем щелкнуть на средстве управления и создать интерфейс команд- ной панели для этого инструмента в вашей форме. Средство управления Multimedia MCI состоит из ряда командных кнопок, которые функциониру- ют автоматически, если открыто подходящее устройство мультимедиа, а средство управления разрешено к использованию. Кнопки носят имена Prev (Предыдущая дорожка), Next (Следующая дорожка), Play (Воспроиз- ведение), Pause (Пауза), Back (Назад), Step (Шаг), Stop (Стоп), Record (Запись) и Eject (Извлечь). Вы можете добавить для этих кнопок специальные фун- кции, написав для соответствующих кнопок процедуры обработки собы- тий. Однако обычно нет необходимости задавать конфигурацию кнопок вручную. В большинстве случаев вы обнаружите, что установленные по умолчанию функциональные возможности кнопок позволяют достаточ- но успешно проигрывать музыку и видеоклипы. Средство управ- ления Multimedia MCI позволяет использовать ряд весьма полезных кнопок * Воспроизведение аудио-CD Вставьте аудио-CD в CD-ROM п нажмите С гарт’ т——Щелкните не кнопке Всспройзнедекиг И ►ij ► |п 9 J9. Старт 1 . - . 8ыход •
Урок 17. Использование музыкальных эффектов и видеоклипов 525 Средство управления Multimedia MCI можно использовать несколькими спо- собами. Вы можете сделать средство управления видимым в процессе выполнения программы (установка по умолчанию) и использовать его, давая пользователю удобную возможность управления подключенными устройствами мультимедиа, такими как видеомагнитофоны или аудио CD-плейеры. Либо вы можете сделать средство управления невидимым в процессе выполнения программы, установив для свойства видимости Visible значение False (Ложь). Этот метод более полезен, если вы хотите ис- пользовать средство управления для воспроизведения звуковых или специальных эффектов в вашей программе. В данном уроке будут проде- монстрированы оба способа использования этого средства управления. Свойство DeviceType Прежде, чем вы сможете пользоваться кнопками средства управления Multimedia MCI, вам нужно открыть подходящее устройство мультимедиа с помощью свойства DeviceType. Это достигается помещением соответству- ющего программного кода в процедуру обработки события Form_Load, что- бы данное средство управления автоматически конфигурировалось (оп- ределялось) при запуске программы. Помимо этого, вы можете также изменять свойство DeviceType в процессе выполнения вашей программы, если хотите, чтобы одно и то же средство управления работало с несколь- кими различными устройствами мультимедиа. Синтаксис оператора, использующего свойство DeviceType, следующий: MMControll. DeviceType = DevName где DevName - это текстовая строка, представляющая одно из допусти- мых к использованию устройств. Например, для задания устройства, спо- собного отображать файлы .wav (WaveAudio), вам нужно будет исполь- зовать следующий оператор: MMControll. DeviceType = "WaveAudio” В приведенной ниже таблице содержится список устройств мультиме- диа, которые в настоящее время поддерживаются средствами управле- ния Multimedia MCI, и значения аргумента DevName, которые вы должны ис- пользовать при задании свойства DeviceType для каждого из устройств:
526 Часть 5. Возможности и средства профессиональной версии Устройство мультимедиа Значение DevName Описание Видеоклипы (файлы .avi) AVIVideo Видеоформат AVI Microsoft Аудио-CD CDAudio Музыкальные CD, проигры- ваемые через привод CD- ROM Цифровая магнитная запись DAT Подключенное устройство цифровой магнитной записи (DAT) Цифровое видео DigitalVideo Данные оцифрованного видео Видео MMMovie Формат видеоклипов муль- тимедиа (отображается в окне) Видео Overlay Устройство покадрового на- ложенного изображения (ото- бражается в окне) Сканер Scanner Подключенный сканер MIDI-секвенсер Sequencer Данные MIDI-секвенсера Видеомагнитофон VCR Подключенный видеомагни- тофон (отображается в окне) Проигрыватель ви- деодисков Videodisc Подключенный проигрыва- тель видеодисков Звуковые файлы .wav WaveAudio Файлы в аудио-формате Microsoft Windows Задаваемое пользо- вателем Other Устройство мультимедиа, оп- ределяемое пользователем Свойство Command После указания с помощью свойства DeviceType типа устройства, которое вы хотите использовать, вы можете приступить к посылке команд, при- нятых для интерфейса с устройствами мультимедиа MCI, непосредствен- но на это устройство. Это делается с помощью свойства Command. Виды команд, которые вы можете использовать, соответствуют названиям кно- пок средства управления Multimedia MCI: Prev (Предыдущая дорожка), Next
Урок 17. Использование музыкальных эффектов и видеоклипов 527 (Следующая дорожка), Play (Воспроизведение), Pause (Пауза), Back (Назад), Step (Шаг), Stop (Стоп), Record (Запись) и Eject (Извлечь). Кроме этого, вы также можете использовать несколько команд общего назначения MCI, включая команды Open (Открыть), Close (Закрыть), Sound (Звук), Seek (Ис- кать) и Save (Сохранить). Преимущество в использовании команд MCI со- стоит в том, что вам нет необходимости обладать полной информацией об устройстве мультимедиа, которое вы собираетесь применять. К приме- ру, вам не нужно знать, каким образом организовано хранение данных на CD-ROM, чтобы послать команду на начало воспроизведения. В приведенном ниже программном операторе используется свойство Command средства управления Multimedia MCI для начала воспроизведения с открытого устройства мультимедиа: MMControll.Command = “Воспроизведение" Свойство Command позволяет посылать команды MCI для управления вашим устройством мультимедиа. Программа PlayTune Ряд коммерческих программ (включая Microsoft Windows) воспроизво- дят «музыкальную заставку» при первом запуске их пользователем. Если у вас имеется файл .wav, содержащий некий музыкальный фрагмент, мелодию или клип, который вы хотели бы воспроизводить при запуске программы, вы можете легко реализовать этот эффект с помощью свой- ства управления Multimedia MCI. Формат .wav (WaveAudio) является обще- принятым стандартом для мультимедиа, используемым Microsoft для хранения звуковой информации. Ряд коммерческих приложений для ра- боты со звуком (например, Sound Forge) могут создавать и редактировать файлы в формате .wav. Ряд файлов .wav вы также можете найти в опера- ционной системе Windows и в таких приложениях, как Microsoft Office. Запустим программу PlayTune Попробуем запустить программу PlayTune, которая воспроизводит файл .wav, содержащий звуки аплодисментов, с помощью средства управле- ния Multimedia MCI. 1. Запустите Visual Basic и откройте проект с именем PlayTune.vbp, который содержится в nanKe\Vb6Sbs\Less17. 2. Щелкните на кнопке Start (Пуск) на панели инструментов, чтобы запустить программу.
528 Часть 5. Возможности и средства профессиональной версии Visual Basic отобразит форму, открывающую программу, и вос- произведет файл applause.wav с помощью средства управле- ния Multimedia MCI. Вид формы-заставки может показаться вам знакомым - она использовалась в уроке 9 для демонстрации загрузки внешней формы с целью отображения предваритель- ной информации о приложении. Однако в данном случае эта форма служит лишь визуальным фоном при воспроизведении файла .wav. * Добро пожапов<пь ОКПО в ЕВРОПУ 11 Ка ч встввнн 3. Щелкните на кнопке Continue (Дальше) формы после оконча- ния звуков аплодисментов. Поскольку это лишь демонстрационный пример, работа про- граммы на этом завершится. Теперь посмотрим на программный код, который обеспечивает данный звуковой эффект. Рассмотрим исходный текст программы, воспроизводящей файлы .WAV В программе PlayTune используется свойство управления Multimedia MCI для воспроизведения файла applause.wav при загрузке формы. Однако само средство управления Multimedia MCI при этом программой не отображает- ся. В этом примере средство управления Multimedia MCI используется для создания специального эффекта в программе без применения командных кнопок. Чтобы скрыть средство управления Multimedia MCI, на этапе раз- работки в окне Properties (Свойства) для свойства видимости Visible было установлено значение False (Ложь).
Урок 17. Использование музыкальных эффектов и видеоклипов 529 1. Откройте процедуру обработки события Form_Load програм- мы PlayTune в окне Code (Код). Вы увидите следующий программный код: Private Sub Form_Load() MMControll,Notify = False MMControll.Wait = True MMControll.Shareable = False MMControll .DeviceType = "WaveAudio” MMControll .FileName = "c:\vb6sbs\less17\applause.wav" MMControll.Command = "Open" MMControll.Command = "Play" End Sub Чтобы воспроизвести мелодию при первом запуске програм- мы, вы используете процедуру обработки события Form_Load для установки значения WaveAudio (для файлов .wav) свойству DeviceType устройства управления Multimedia MCI, а затем приме- няете свойство Command для выполнения двух стандартных ко- манд интерфейса MCI: Open (Открыть) и Play (Воспроизведение). Помимо этих основных свойств, устанавливаются значения и для ряда дополнительных свойств. Они позволяют подготовить средство управления Multimedia MCI для выполнения дальней- ших действий. Эти назначения свойств обычно не слишком раз- личаются для большинства приложений. Замечу, что: Для свойства Notify установлено значение False (Ложь), по- скольку нам не нужно, чтобы средство управления Multimedia MCI выдавало программное уведомление после завершения выполнения команд Open (Открыть) и Play (Воспроизведение). (Значение True (Истина) порождает событие, связанное с уведомлением о выполненной операции, что не нужно в этой достаточно простой программе.) Для свойства Wait установлено значение True (Истина), по- скольку нам необходимо, чтобы средство управления ожи- дало завершения выполнения команды Open (Открыть), прежде чем посылать команду Play (Воспроизведение) в ус- тройство. Для свойства Shareable средства управления Multimedia MCI установлено значение False (Ложь), чтобы другие приложе- ния в вашей системе не имели доступ к открытому устрой-
530 Часть 5. Возможности и средства профессиональной версии ству MCI. (Нам не нужно, чтобы два приложения одновре- менно воспроизводили разные фрагменты одного и того же звукового файла.) Для свойства FiieName установлен путь к файлу applause.wav — этот файл нам нужно открыть и воспроизвести. В большин- стве случаев вам нет необходимости использовать свойство FiieName для задания имени медиафайла, который вы хотели бы использовать, до выполнения команды открытия устрой- ства Open (Открыть). Важное исключение имеет место при использовании аудио-CD в подключенном приводе CD-ROM. В этом случае вам не нужно задавать имя файла, поскольку в аудио-CD не используются имена файлов для указания содержимого диска. При использовании этого носителя до- статочно просто воспользоваться командой Open (Открыть) для свойства Command, и воспроизведение начнется с пер- вой дорожки CD. 2. Откройте текст процедуры обработки события Form_Unload в окне Code (Код). Вы увидите следующий программный код: Private Sub Form_Unload(Cancel As Integer) MMControll.Command = “Close" End Sub После того, как вы закончили работу со средством управления Multimedia MCI, вам следует воспользоваться командой Close (Зак- рыть) свойства Command, чтобы освободить системные ресур- сы, занятые обслуживанием устройства мультимедиа. Лучше всего выполнить операцию закрытия средства управления в процедуре обработки события FormJJnload, поскольку эта про- цедура запускается всякий раз, когда ваше приложение завер- шается «нормальным» образом (т.е. без сбоя). Использование команды Close (Закрыть) в процедуре FormJJnload адресовано пользователям, которые предпочитают осуществлять выход из приложения щелчком на кнопке Close (Закрыть) в строке заго- ловка окна, поскольку это действие также приводит к вызову процедуры обработки события FormJJnload.
Урок 17. Использование музыкальных эффектов и видеоклипов 531 Воспроизведение видеоклипов из файлов .AVI Другой специальный эффект, позволяющий разнообразить вашу про- грамму, состоит в добавлении в нее живого видеоизображения из файлов .avi. Файлы .avi представляют собой стандартный формат файлов для хранения видеозаписей с поддержкой озвучивания. Чтобы задать кон- фигурацию средства управления Multimedia MCI для проигрывания фай- лов .avi, воспользуйтесь свойствами DeviceType, FiieName и Command следую- щим образом: MMControH. DeviceType = "AVlVideo" MMControll .FiieName = "c:\vb6sbs\less17\michael.avi" MMControH.Command = "Open” MMControH .Command = "Play" Если вы добавите в вашу программу эти операторы и разрешите исполь- зование средства управления Multimedia MCI, оно будет загружено и запу- стит указанный файл видеоклипа (в данном случае, michael.avi). Примечание. При запуске видеоклипа в формате .avi он появляется в собственном окне и воспроизводится автоматически. Вам не нужно создавать спе- циальную форму для видеоизображения или средство управления программным образом. Программа RunVideo Программа RunVideo демонстрирует, как вы можете использовать сред- ство управления Multimedia MCI для воспроизведения видеоклипа, храня- щегося в файле .avi, в приложении Visual Basic. Чтобы сделать програм- му более полезной, я добавил в форму объект типа диалоговое окно общего назначения, чтобы вы могли открывать любые файлы .avi в вашей систе- ме. Если у вас нет подходящего файла .avi, запустите файл michael.avi, ко- торый содержится в папке \Vb6Sbs\Less17. Он представляет собой краткое видеоприветствие и поздравление с успехами, достигнутыми при изуче- нии этого курса программирования на Visual Basic 6.0. (Методически вы не должны запускать эту программу, пока не изучите всю книгу цели- ком, но можете сделать это заранее.)
532 Часть 5. Возможности и средства профессиональной версии Запустим программу RunVideo 1. Откройте проект RunVideo.vbp, который содержится в папке \Vb6Sbs\Less17. 2. Щелкните на кнопке Start (Пуск) на панели инструментов для ► запуска программы. Visual Basic отобразит следующую форму: Откроите файл формата avi и воспроизведите его3 4 3. Щелкните на кнопке Открыть .avi формы, в появившемся диа- логовом окне Open (Открытие) найдите и откройте один из фай- лов .avi, имеющихся в вашей системе. Если вы хотите просмотреть записанный мною видеоклип, от- кройте файл michael.avi в папке \Vb6Sbs\Less17. (Да, это именно я герой видеоклипа!) 4. Щелкните на кнопке Старт .avi формы для запуска выбранного вами видеоклипа. Как показано ниже, появится второе окно, в котором будет вос- производиться видеоклип. Если вы смотрите мой видеоклип (отрывок из моего курса обучения программированию Learn Microsoft Visual Basic 6.0 Now), вы также услышите мою речь. Теперь испытаем действие нескольких кнопок средства управ- ления Multimedia MCI в ходе воспроизведения видеоклипа.
Урок 17. Использование музыкальных эффектов и видеоклипов 533 5. Прежде всего, переместите окно с видеоклипом, если оно зак- рывает окно формы. 6. Теперь щелкните на кнопке Prev (Предыдущая дорожка), крайней слева кнопке средства управления Multimedia MCI. Видеоклип начнется заново. (Если этого не произошло, щелк- ните на кнопке Play (Воспроизведение).) 7. Щелкните на кнопке Pause (Пауза) для временной остановки видеоклипа. 8. Щелкните на кнопке Play (Воспроизведение) для продолже- ния воспроизведения видеоклипа. 9. Щелкните на кнопке Stop (Стоп) для остановки видеоклипа. 10. Щелкните на кнопках Back (Назад) и Next (Вперед) для пере- хода соответственно на один кадр назад и вперед. 11. Наконец, снова щелкните на кнопке Play (Воспроизведение) и просмотрите видеоклип до его завершения. Как вы можете заметить, кнопки средства управления Multimedia MCI работают так же, как кнопки управления на вашем видео- магнитофоне. 12. Щелкните на кнопке Close (Закрыть) в окне видеоклипа .avi, чтобы закрыть его.
534 Часть 5. Возможности и средства профессиональной версии 13. Воспользуйтесь кнопками Открыть .avi и Старт.avi формы, что- бы просмотреть другие файлы .avi, имеющиеся в вашей систе- ме. 14. Закончив, щелкните на кнопке Выход формы для заверше- ния работы программы. Рассмотрим программный код для воспроизведения файлов .AVI Одним из наиболее существенных различий между двумя программами, с которыми мы имеем дело в этом уроке, является роль средства управ- ления Multimedia MCI в интерфейсе пользователя. В программе PlayTune сред- ство управления оставалось невидимым, так как для свойства Visible ус- тановлено значение False (Ложь). В программе RunVideo средство управления Multimedia MCI делается видимым потому, что в свою очередь для свойства Visible установлено значение True (Истина) (по умолчанию). При установленном значении True (Истина) пользователь имеет доступ к кнопкам для управления воспроизведением. Рассмотрим текст процедуры обработки события в программе RunVideo. 1. Откройте процедуру обработки события Form_Load в окне Code (Код). Как и программа PlayTune, программа RunVideo начинается с ини- циализации средства управления Multimedia MCI в процедуре обработки события Form_Load. Однако на этот раз для свойства DoviceType устанавливается значение AVIVideo, что подразуме- вает воспроизведение файлов .avi. Private Sub Form_Load() MMControll.Notify = False MMControll .Wait = True MMControll.Shareable = False MMControll .DeviceType = "AVIVideo" End Sub 2. Откройте процедуру обработки события cmdOpen_Click в окне Code (Код). Процедура обработки события cmdOpen_Click выполняется каж- дый раз, когда пользователь щелкает мышью на кнопке Open .avi (Открыть .avi) формы. Процедура использует объект типа диалоговое окно общего назначения для отображения диалого-
Урок 17. Использование музыкальных эффектов и видеоклипов 535 вого окна Open (Открытие), а также свойство Filter для отобра- жения в окне просмотра только файлов .avi. Если пользователь щелкает мышью на кнопке Cancel (Отмена), программа перехо- дит к метке Errhandler: окончания процедуры загрузки, пропус- кая операторы, описывающие средство управления Multimedia MCI. Однако, если пользователь выберет подходящий файл .avi в диалоговом окне Open (Открытие), средство управления Multimedia MCI немедленно открывает его путем присвоения свой- ству FiieName пути к данному файлу и выполнения команды Open (Открыть) для свойства Command. Private Sub cmdOpen_Click() CommonDialogl.CancelError = True On Error GoTo Errhandler: CommonDialogl .Flags = cdlOFNFileMustExist CommonDialogl.Filter = "Video (*.AVI)I*.AVI" CommonDialogl.ShowOpen MMControH .FiieName = CommonDialogl .FiieName MMControH.Command = "Open" Errhandler: 'Если имел место щелчок на кнопке Cancel (Отмена), то выйти из процедуры End Sub 3. Откройте процедуру обработки события cmdPlay_Click в окне Code (Код). Если пользователь щелкает мышью на кнопке Старт .avi формы, процедура обработки события инициирует команду Play для отображения файла .avi в собственном окне: Private Sub cmdPlay_Click() MMControH.Command = "Play" End Sub Команда Play (Воспроизведение) запускает видеоклип. 4. Откройте процедуру обработки события cmdQuit_Click в окне Code (Код). Процедура обработки события cmdQuit_Click завершает работу программы и выгружает форму из памяти. Это действие порож- дает выполнение процедуры обработки события Form_Unload, которая закрывает открытое устройство мультимедиа и воз- вращает занимаемые им ресурсы в системный пул.
536 Часть 5. Возможности и средства профессиональной версии Private Sub cmdQuit_Click() End End Sub Private Sub Form_Unload(Cancel As Integer) MMControll .Command = “Close” End Sub Следуйте этим основным принципам, если хотите добавить в ваше при- ложение видеоклипы, хранящиеся в формате .avi. Вы оцените их как хо- рошие средства для добавления эффектов анимации пошаговым инструк- циям, справочной информации, либо просто для того, чтобы сделать вашу программу привлекательной и неповторимой. Шаг вперед: воспроизведение музыки с аудио-CD В качестве последней демонстрации мощных возможностей средства уп- равления Multimedia MCI я включил в материал этого урока третью про- грамму. Программа PlayCD служит примером того, как вы можете проиг- рывать музыку, хранящуюся на стандартном аудио-CD, в вашем приложении Visual Basic. Добавление музыки в ваши программы имеет очевидные преимущества. Помните, однако, что описанная здесь мето- дика требует, чтобы аудио-CD был помещен в привод CD-ROM, имею- щийся в вашей системе. Это не всегда практично, некоторые из пользова- телей сочтут это не нужным. Однако большинство пользователей будут, скорее всего, рады возможности прослушивать в процессе работы свои любимые мелодии. Запустим программу PlayCD 1. Откройте проект PlayCD.vbp, который содержится в папке \Vb6Sbs\Less17. 2. Поместите аудио-CD в основной привод CD-ROM вашего ком- пьютера. 3. Подождите немного, не начнется ли автоматическое воспро- изведение CD. Во многих системах Windows будет автоматически распозна- вать, что CD, помещенный в дисковод, является аудио-CD, и
Урок 17. Использование музыкальных эффектов и видеоклипов 537 начнет автоматически воспроизводить его с помощью стандар- тной программы CD Player (Лазерный проигрыватель). Если это случится, закройте программу CD Player (Лазерный проигры- ватель), чтобы вы могли испытать, как работает программа PlayCD. 4. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы PlayCD в Visual Basic. На экране появится форма PlayCD, в которой будут содержать- ся средства управления Multimedia MCI. 5. Щелкните на командной кнопке Старт формы, чтобы открыть устройство воспроизведения аудио-CD (CDAudio) с помощью средства управления Multimedia MCI. В окне формы появится стрелка красного цвета и надпись «Щелкните на кнопке воспроизведение!». Я ввел эту инструк- цию, чтобы пользователю было ясно, что для запуска CD-плей- ера нужно щелкнуть на кнопке Play (Воспроизведение). (Это вовсе не для всех очевидно.) Изображение стрелки и надпись созданы в программе Paintbrush. Далее я использовал свойство Picture процедуры обработки события cmdPlay_Click для загрузки точечного рисунка в объект типа изображение данной формы. Я также отобразил содержимое объекта типа изображение с помощью программного кода, содержащегося в процедуре об- работки события щелчка на кнопке Старт. Воспроизведение аудио ('.[) ’ -Jnl х| Вставьте аудпо-CD в CD-ROM и нажмите Старт1 ,—Щелки щб на кнояке Been pts изь едем ие Ф Выход 6. Щелкните на кнопке Play (Воспроизведение) средства управ- ления Multimedia MCI. Начнется воспроизведение аудио-CD, помещенного в дисковод CD-ROM.
538 Часть 5. Возможности и средства профессиональной версии 7. Воспользуйтесь кнопками средства управления Multimedia MCI, чтобы воспроизвести различные дорожки с CD. 8. По завершении щелкните на кнопке Выход формы. Музыка будет остановлена, а программа закрыта. Рассмотрим исходный текст программы PlayCD 1. Откройте процедуру обработки события cmdPlay_Click в окне Code (Код). Процедура обработки события cmdPlay_Click запускается, когда пользователь щелкает мышью на кнопке Старт формы. Вместо загрузки устройства CDAudio в процедуре обработки события Form_Load, я предоставил пользователям возможность прочи- тать инструкцию на экране и поместить CD в дисковод после того, как программа начнет работу. У вас может возникнуть желание лучше разобраться с двумя интересными моментами в данной процедуре. Во-первых, указанный тип устройства (CDAudio) не требует задания имени файла для компакт-дис- ка. Вместо этого устройство CDAudio просто обращается к ос- новному (первичному) дисководу CD-ROM в вашей системе и начинает воспроизведение первой дорожки при выборе коман- ды Play (Воспроизведение). Хотя некоторые новейшие типы CD могут содержать информацию об имени файла, для открытого устройства CDAudio это в данном случае не требуется. Во-вто- рых, следует отметить последнюю строку в процедуре обра- ботки события, где для свойства Visible объекта Imagel устанав- ливается значение True (Истина). Этот программный оператор отображает стрелку и надпись «Щелкните на кнопке воспро- изведения!» в окне формы. Private Sub cmdPlay_Click() MMControH.Notify = False MMControH .Wait = True MMControH .Shareable = False 'задание типа аудио-CD (в дисководе CD-ROM) MMControH .DeviceType = "CDAudio" MMControH.Command = "Open" Imagel .Visible = True End Sub 2. Откройте процедуру обработки события MMControH _PlayClick в окне Code (Код). Как уже упоминалось ранее в этом уроке, вы
Урок 17. Использование музыкальных эффектов и видеоклипов 539 можете задавать действие кнопок средства управления Multimedia MCI путем добавления программного кода в соответ- ствующие процедуры обработки событий, ассоциированные с данными кнопками. В этой процедуре обработки события я до- бавил программный оператор, который скрывает изображение стрелки и текст «подсказки» («Щелкните на кнопке воспроиз- ведения!»), помещенные мною в окно формы. Private Sub MMControl1_PlayClick(Cancel As Integer) 'скрытие текста инструкции перед воспроизведением CD Imagel .Visible = False End Sub Обратите внимание, что установка свойства Imagel .Visible не за- меняет выполнение команды Play (Воспроизведение) с помощью кнопки Play (Воспроизведение). Эта операция лишь предшеству- ет выполнению команды Play (Воспроизведение). Говоря крат- ко, процедура обработки события, связанная с соответствую- щей кнопкой, позволяет вам адаптировать действие каждой кнопки средства управления Multimedia MCI в соответствии с ва- шими потребностями без замещения ее функционального на- значения. Каким образом воспользоваться этой возможностью, зависит от вас. 3. Откройте процедуру обработки события cmdQuit_Click в окне Code (Код). Командная кнопка Выход останавливает воспроиз- ведение аудио-CD, если оно не было завершено, а также за- вершает выполнение программы с помощью оператора End. Как уже говорилось ранее, оператор End порождает выполнение процедуры FormJJnload и закрывает открытое устройство муль- тимедиа. Private Sub cmdQuit_Click() 'остановка воспроизведения CD, если имел место щелчок на кнопке выхода MMControll .Command = "Stop" End End Sub Private Sub Form_Unload(Cancel As Integer) 'всегда закрывает устройство при завершении работы MMControll.Command = "Close" End Sub Поздравляю! Вы научились воспроизводить файлы .wav, .avi и аудио-CD с помощью средства управления Multimedia MCI - это три основных спосо- ба придания вашим приложениям возможностей мультимедиа.
540 Часть 5. Возможности и средства профессиональной версии Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 18. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание Чтобы Сделайте следующее Добавить средство управления Multimedia MCI ActiveX в вашу па- нель инструментов В меню Project (Проект) щелкните на команде Components (Компоненты). Щелкните на закладке Controls (Средства управления), установите фла- жок рядом с пунктом Microsoft Multimedia Control 6.0 и щелкните на кнопке ОК. Задать тип устрой- ства мультимедиа Воспользуйтесь свойством DeviceType средства уп- равления Multimedia MCI, Например, чтобы задать устройство WaveAudio для воспроизведения файлов .wav, введите: MMControH .DeviceType = "WaveAudio" Послать команду MCI в заданное уст- ройство мультиме- диа Воспользуйтесь свойством Command. Например, чтобы открыть устройство мультимедиа, заданное свойством DeviceType, и воспроизвести аудиоинфор- мацию, введите: MMControH .Command = "Open" MMControH.Command = "Play" Скрыть средство уп- равления Multimedia MCI в процессе вы- полнения программы Воспользуйтесь окном Properties (Свойства) для ус- тановки значения False (Ложь) для свойства Visible средства управления Multimedia MCI. Отобразить средство управления Multimedia MCI в процессе вы- полнения программы Установите для свойства Visible средства управле- ния Multimedia MCI значение True (Истина) в окне Properties (Свойства) или в исходном тексте про- граммы. Закрыть средство управления Multimedia MCI и высвободить си- стемные ресурсы Воспользуйтесь командой Close (Закрыть) свойства Command (обычно она помещается в процедуру об- работки события Form_Unload). Например: MMControH .Command = "Close"
УРОК « в я Я Я Я Ж 1 « 8 в в & в в 8 & в 8 & в в 8 в в 8 в в в — в . * 88 Ч ‘ в Alwr’^wV/ * gg Урок " рассчитан » на * .п 40 минут gg ss в к в в в & в 88 в S3 в & & в п & в в в в в в вввввввввввввввввввввввв^ввввввввввв Использование средств Windows API Вы научитесь: расширять возможности ваших программ путем исполь- зования функций Windows API; пользоваться утилитой API Viewer для вставки функций, констант и объявления типов; применять функцию GlobalMemoryStatus API для управле- ния использованием памяти в вашей системе. В уроке 18 вы научитесь расширять возможности ваших программ с помощью мощных функций Microsoft Windows API (application programming interface - интерфейс программи- рования приложений). Использование функций Windows API позволяет реализовать концепцию программирования с бо- гатыми возможностями, рассчитанными на опытных про- граммистов, реализующих достаточно сложные задачи. Однако, познакомившись с несколькими примерами, вы на- верняка найдете массу полезного и для себя. Первым делом мы познакомимся с общими принципами применения функ- ций Windows API и соглашениями по их использованию. Да- лее вы узнаете, как пользоваться средством Microsoft Visual Basic API Viewer для поиска определенных функций API и ко- пировать некоторые необходимые объявления (деклариро-
542 Часть 5. Возможности и средства профессиональной версии вания) в ваш проект. Наконец, вы узнаете, как применять функцию GlobalMemoryStatus API для контроля использования памяти на вашем ком- пьютере. Базовые знания, полученные в этом уроке, вы сможете в дальнейшем применять и для других случаев, когда понадобится восполь- зоваться средствами Windows API. Знакомство с функциями Windows API средства Итак, что же представляют собой Windows API? Фактически это обширный набор функций, призванных выполнять повседневные задачи в операци- онной системе Microsoft Windows. Приложения Windows и средства раз- работки программного обеспечения активно используют их для выполне- ния типовых вычислительных задач. Например, Visual Basic обращается к функциям Windows АР I при выполнении таких задач, как рисование изоб- ражений, сохранение файла, выделение памяти для другого приложения. Средства Windows API содержат более 1000 функций. Эти функции делят- ся на несколько крупных категорий: системные, обеспечивающие графи- ческий интерфейс, управление приложениями Windows, мультимедиа и т.д. На практике функции Windows API реализованы в виде набора файлов с расширением — .dll (библиотек динамических связей), которые загружа- ются в процессе выполнения для обеспечения вычислительных задач про- граммами, активизированными в операционной системе Windows. Если средства Windows API представляют собой обычные функции, отли- чаются ли они от регулярно используемых программистами на Visual Basic функций (таких как UCase, Eof, Format и т. д.)? Можно сказать, что нет. Един- ственное практическое различие состоит в том, что функции Visual Basic автоматически определяются в окружении разработчика Visual Basic, в то время как функции Windows API требуют предварительного объявле- ния их в вашем проекте в стандартном модуле или в процедуре обработ- ки события. После этого объявления функции Windows API работают так же, как встроенные функции Visual Basic - вы вызываете их по имени с указанием необходимых аргументов и получаете возвращаемое значе- ние, которое можете обработать в вашей программе для выполнения ка- кой-либо полезной работы. Функция GlobalMemoryStatus Одной из функций Windows API, которая будет использоваться в этом уро- ке, является функция GlobalMemoryStatus. Она возвращает полезную инфор- мацию о текущем использовании памяти в вашем компьютере. Для объяв-
Урок 18. Использование средств Windows API 543 ления функции GlobalMemoryStatus в стандартном модуле (файл .bas) вы добавляете в начало модуля программный оператор, сообщающий Visual Basic, что делает функция GlobalMemoryStatus и какие типы аргументов она требует. Как и большинство программистов, я разбил это объявление на две строки с символом переноса (_), чтобы оно легче воспринималось в окне Code (Код). Объявление функции GlobalMemoryStatus API выглядит сле- дующим образом: Public Declare Sub GlobalMemoryStatus Lib "kernel32“_ (IpBuffer As Memorystatus) Типичное объявление функции Windows API. Возможно, вы обратили внимание на особенность этого объявления. GlobalMemoryStatus является именем функции из библиотеки Windows API. Когда я в моей программе вызываю функцию GlobalMemoryStatus, то это имя используется для выполнения функции. В конце оператора объявления в скобках содержится список аргументов. (Эта функция требует только один аргумент, но некоторые функции требуют несколько аргументов.) Пара- метр «кегпе132» определяет имя используемой библиотеки. Данная 32- разрядная библиотека Windows API ассоциируется с функциями ядра опе- рационной системы. Требуемый аргумент носит имя IpBuffer. Двухбуквенный префикс 1р ука- зывает, что аргумент представляет собой целочисленный «длинный» указатель, используемый в качестве адреса памяти, указывающего на данные, которые будут использоваться в качестве информации о сис- темной памяти. Аргумент IpBuffer не относится ни к одному из стандарт- ных типов данных Visual Basic, таких как Integer (Целое), String (Строка) или Boolean (Булево). Вместо этого он объявляется как определяемый пользователем тип с именем MemoryStatus, содержащий восемь числен- ных элементов, задающих состояние физической и виртуальной памя- ти на вашем компьютере. Программист, который изначально написал эту API-функцию, создал тип MemoryStatus с помощью оператора описа- ния структуры struct на языке программирования С. (Я упомянул об этом, поскольку вам, вероятно, приходилось видеть оператор «struct», используемый для описания типа, так как большинство людей, которые применяют средства Windows API, знакомы с языком программирования С, где используется несколько отличающийся способ описания типов данных и вызова функций.) Объявление функций Windows API в Visual Basic довольно обременитель- но, поскольку вы должны указать тип объявления для каждого опреде- ляемого пользователем типа, являющегося частью функции API, кото-
544 Часть 5. Возможности и средства профессиональной версии рую вы хотите вызвать. В этом случае функция GlobalMemoryStatus требует аргумент с типом MemoryStatus. Заметим, что вы должцы поместить объяв- ление для функции GlobalMemoryStatus в стандартный модуль. Объявление типа MemoryStatus выглядит следующим образом: Public Type MemoryStatus dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Переменная с типом MemoryStatus содержит данные, получаемые в ре- зультате вызова функции API. Определяемый пользователем тип ограничивается в Visual Basic опера- тором Public Туре и ключевыми словами End Туре. Информация, содержа- щаяся между этими двумя операторами, определяет имя типа и каждый из элементов типа. Префикс dw перед каждым элементом в этом объяв- лении типа означает «двойное слово» («double word»), или DWORD на языке программирования С, представляющее собой 4-байтное (32-бито- вое) число. В Visual Basic вы можете осуществить это объявление типа с помощью ключевого слова Long, но префикс dw остается, поскольку именно с его помощью изначально описал объявление типа программист на С. Тип переменной Long (соответствующей достаточно большому целому числу) необходим потому, что числа, получаемые вами из функции GlobalMemoryStatus, измеряются в байтах и занимают очень много места. К примеру, 32 Мб ОЗУ эквивалентно 33554432 байтам. Прежде, чем вы вызовете функцию GlobalMemoryStatus, вам необходимо задать размерность глобальной переменной типа MemoryStatus в вашем стандартном модуле, чтобы вы смогли передать данные в функцию GlobalMemoryStatus и получить результаты. Вы можете присвоить любое имя объявленной вами переменной. В своей программе я выбрал для перемен- ной имя meminfo: Public meminfo As MemoryStatus Объявление переменной типа MemoryStatus.
Урок 18. Использование средств Windows API 545 Далее, вам необходимо подготовить переменную meminfo, которую вы объя- вили, для вызова функции GlobalMemoryStatus. Функция GlobalMemoryStatus требует, чтобы элемент dwLength в описании типа Memorystatus содержал длину (в байтах) всей переменной с типом MemoryStatUS. Это требование может показаться странным, поскольку нам заранее известна длина пе- ременной с типом MemoryStatUS; обычно она составляет 32 байта (восемь целых чисел длиной по 4 байта). Однако функции группы Windows API обычно требуют эту информацию, если в них используются указатели для доступа к областям памяти. (Такой синтаксис помогает функции зарезер- вировать для себя корректный объем памяти и дает возможность исполь- зовать большие числа в будущем.) Для программного задания этой длины вы должны перед вызовом функции GlobalMemoryStatus использовать в про- цедуре обработки события Form_Load, либо еще где-нибудь в вашем про- граммном коде следующий программный оператор: meminfo.dwLength = Len(memlnfo) Задание длины переменной с типом, определяемым пользователем. В этом операторе функция Len определяет полную длину переменной meminfo, содержащей описание типа MemoryStatUS. Затем осуществляется присвоение этого значения элементу dwLength переменной meminfo. После инициализации элемента dwLength с указанием соответствующей информации о длине, вы готовы к вызову функции GlobalMemoryStatus в вашей программе. Это делается с помощью оператора Call с указанием имени функции и переменной meminfo в качестве аргумента. (Если вы объя- вили функцию GlobalMemoryStatus в стандартном модуле, то можете помес- тить данный оператор в любую процедуру обработки события в вашем проекте.) Call GlobalMemoryStatus (meminfo) Вызов функции API. После вызова функции GlobalMemoryStatus API и ее успешного выполнения операционной системой Windows, переменная meminfo будет содержать восемь «длинных» целых чисел с информацией о текущих характерис- тиках памяти на вашем компьютере. Элемент dwLength будет содержать то же самое значение (32 байта), но другие элементы переменной данного типа теперь будут содержать информацию о системной памяти. Напри- мер, следующий оператор использует элемент dwTotalPhys для отображе- ния общего объема физической памяти вашей системы (ОЗУ) в окне со- общения: MsgBox memlnfo.dwTotalPhys
546 Часть 5. Возможности и средства профессиональной версии Элементы переменной mem Info содержат результаты вызова функции API. Аналогичным образом, следующий оператор отобразит общий объем вир- туальной памяти в вашей системе в байтах. (Виртуальная память пред- ставляет собой физическую память плюс область жесткого диска, исполь- зуемую для временного хранения данных.) MsgBox meminfo. dwTotalVirtual Каждый раз, когда вы осуществляете вызов функции GlobalMemoryStatus, операционная система Windows обновляет массив данных в переменной с заданным типом на значения, соответствующие новым характеристи- кам использования памяти - именно эта информация вам и нужна для создания утилиты, позволяющей отслеживать использование памяти в вашей системе! Вы уже получили первое представление о том, как функции Windows API используются в программах. Как вы могли заметить, для этого вам необ- ходимо освоить два основных приема. Сначала вам необходимо включить собственно функцию и объявление типа в текст вашей программы, чтобы вы могли правильно осуществить вызов средства Windows API. Затем вам придется иметь дело с некоторыми новыми терминами и синтаксически- ми конструкциями, пришедшими из языка программирования С. К по- добным терминам можно отнести указатель (pointer), описатель разме- ра типа двойное слово (DWORD), структура (structure) и еще несколько терминов, которых мы здесь не будем касаться. Большинство из этих тер- минов, однако, имеют эквиваленты в концепции программирования на Visual Basic, поэтому вам не потребуется осваивать нечто принципиаль- но новое, чтобы иметь возможность обращаться к средствам Windows API. Все это хорошо, но как вы определите, какие объявления, типы и кон- станты вам следует использовать для других более чем 1000 функций Windows API? Включена ли вся эта информация в оперативную справоч- ную систему или она имеется в какой-либо другой толстенной книге? Да, обе эти возможности для вас доступны. Библиотека MSDN Library вклю- чает полное описание всех функций Windows API. Вы также можете приоб- рести справочник, где описаны наиболее полезные функции Windows API для программирования на Visual Basic. Однако, прежде чем обратиться к справочникам, попрактикуйтесь в применении утилиты API Viewer, полез- ного инструмента, которым вы можете воспользоваться через меню Add- Ins (Дополнительно) панели инструментов Visual Basic. С помощью этой удобной утилиты вы сможете вставлять в исходный текст вашей програм- мы объявления, константы и типы, необходимые для вызова функций Windows API.
Урок 18. Использование средств Windows API 547 Использование утилиты API Viewer Для облегчения использования функций Windows API в Visual Basic 6 вклю- чен специальный текстовый файл Win32api.txt, который содержит все объявления, константы и определяемые пользователем типы, необходи- мые для вызова функций Windows API из вашего проекта в Visual Basic. Структура этого файла сознательно создана Microsoft такой, чтобы рабо- тать с утилитой API Viewer. При этом вы можете быстро находить нужные функции и автоматически вставлять в текст вашей программы необхо- димый код. Попробуем воспользоваться этой утилитой для добавления рассмотренных выше объявлений и описаний типов. Инсталляция утилиты API Viewer Прежде всего, вам нужно создать команду меню для вызова дополнитель- ной утилиты API Viewer. 1. Запустите Visual Basic и откройте новый стандартный про- ект. 2. В меню Add-Ins (Дополнительно) щелкните на команде Add-In Manager (Менеджер расширений). Появится диалоговое окно Add-In Manager (Менеджер расшире- ний) со списоком дополнительных утилит, которые вы можете добавить в ваше меню Add-Ins (Дополнительно) в строке меню Visual Basic. Расширение представляет собой специальную программу, разработанную для увеличения функциональных возможностей вашего приложения на Visual Basic. В Visual Basic 6 включено несколько стандартных расширений; вы так- же можете приобрести программы-расширения у сторонних разработчиков. 3. Дважды щелкните на расширении VB 6 API Viewer в окне спис- ка. Рядом с именем расширения появится слово «Loaded» («Заг- ружено»), а в окне Description (Описание) появится описание дан- ной утилиты и ее предназначение. Будет также установлен флажок в поле Loaded/Unloaded (Загружено/Выгружено). Если этот флажок установлен, то расширение появляется в меню Add-Ins (Дополнительно) всех проектов до тех пор, пока вы не удалите его. Окно Add-In Manager (Менеджер расширений) бу- дет выглядеть примерно следующим образом:
548 Часть 5. Возможности и средства профессиональной версии Add-In Manager AMfabteAddfe.................... Package and Deployment Wizard Source Code Control VB 6 ActiveX Ctrl Interface Wizard VB 6 ActiveX Doc Migration Wizard VB 6 Add-In Toolbar iVBSAPi Viewer VB 6 Application Wizard VB 6 Class Builder Utility VB 6 Data Form Wizard VB 6 Data Object Wizard VB 6 Property Page Wizard VB 6 Resource Editor Description API declaration viewer add-in for Visual Basic 6 , I Lwd Behavcr Startup ! Loaded -load Behavior Г LoededAWoaded Г Lo4dbn£latW₽"‘ Внимание! Если вы не найдете расширения VB 6 API Viewer, еще раз запустите про- грамму установки Visual Basic 6 и инсталлируйте все дополнитель- ные расширения. 4. Щелкните на кнопке ОК, чтобы добавить API Viewer в меню Add-Ins (Дополнительно). Ваше меню Add-Ins (Дополнительно) теперь будет содержать команду API Viewer. Воспользуемся утилитой API Viewer для вставки объявлений Теперь мы попрактикуемся в поиске функций API с помощью утилиты API Viewer. 1. В меню Add-Ins (Дополнительно) щелкните на команде API Viewer. На вашем экране появится окно API Viewer. Теперь вам нужно найти файл Win32api.txt. (API Viewer может открывать любой тек- стовый файл, содержащий объявления Windows API. По мере
Урок 18. Использование средств Windows API 549 пополнения набора функций API вы сможете открывать их с помощью этой же утилиты.) 2. В меню File (Файл) API Viewer щелкните на команде Load Text File (Загрузить текстовый файл). 3. Найдите файл Win32api.txt в вашей системе и откройте его. В большинстве случаев этот файл содержится в папке C:\Program Files\Microsoft Visual Studio\Common\Tools\Winapi. Если у вас нет пап- ки с таким именем, воспользуйтесь для поиска файла коман- дой Find (Найти) из меню Start (Пуск) Windows. (Этот файл так- же содержится на установочном диске Visual Basic.) Совет. Файл Win32api.txt занимает более 640 Кб и довольно громоздок в ис- пользовании. Для ускорения поиска информации в нем вы можете преобразовать его в формат базы данных Microsoft Get. Для этого вос- пользуйтесь командой Convert Text to Database (Преобразовать текст в базу данных) из меню File (Файл). 4. В текстовом окне API Viewer введите GlobalMemoryStatus. По мере ввода в текстовом поле Available Items (Найденные эле- менты) будут появляться имена функций API. По завершении ввода единственным выделенным элементом будет GlobalMemoryStatus. Внимание! Если ваша копия файла Win32api.txt не содержит функции GlobalMemoryStatus, попробуйте найти вместо нее функцию MemoryStatUS. Обе эти функции выполняют одну и ту же задачу и вызываются с од- ним и тем же типом аргумента (буфер MemoryStatUS). Файл Win32api.txt время от времени обновляется, чтобы отразить новые соглашения от- носительно имен в операционных системах Windows и Windows NT. 5. Щелкните на кнопке Add (Добавить), чтобы добавить объяв- ление функции GlobalMemoryStatus в список Selected Items (Выбран- ные элементы). Окно API Viewer будет выглядеть примерно сле- дующим образом:
550 Часть 5. Возможности и средства профессиональной версии GlobalReAlloc IGigbalMemoryStatus GlobalFix GlobalFlags GlobalFree GlobalGetAtomName GlobalHandle GlobalLock API Viewer - CAProgram FilesKMicrosoft Visual StudirACommonXT... (7TI 'Ji ГА-Х.- .......................... ^elected Items | Public Declare Sub GlobalMemoryStatus Lib "kernel32" Alias | "GlobalMemoryStatus" (IpBuffer As MEMORYSTATUS) Type the first few letters of the word you are looking for Available Items Теперь вы можете добавить объявление MemoryStatus в список Selected Items (Выбранные элементы). G. Щелкните на поле с ниспадающим списком API Туре (Тип API), а затем щелкните на элементе Types (Типы). API Viewer начнет поиск объявлений типа в файле Win32api.txt и отобразит первые найденные вхождения в поле списка Available Items (Найденные элементы). Если вам будет предложено сохра- нить файл Win32api.txt как базу данных для ускорения доступа, щелкните на кнопке No (Нет). Вы можете воспользоваться этой возможностью, если будете достаточно часто обращаться к файлу Win32api.txt. 7. Удалите функцию GlobalMemoryStatus из текстового поля «Вве- дите первые несколько букв...». Теперь введите MemoryStatus и щелкните на кнопке Add (Добавить). Объявление типа MemoryStatus будет скопировано из списка Selected Items (Выбран- ные элементы). Теперь вы можете вставить их в стандартный модуль в вашей программе на Visual Basic.
Урок 18. Использование средств Windows API 551 8. Щелкните на кнопке Сору (Копировать). API Viewer скопирует оба объявления в буфер обмена Windows. 9. Сверните окно API Viewer и разверните до максимального раз- мера окно среды разработчика Visual Basic. 10. В меню Project (Проект) щелкните на команде Add Module (До- бавить модуль), а затем щелкните на кнопке Open (Открыть), чтобы открыть новый стандартный модуль в вашем проекте. 11. Убедитесь, что курсор ввода находится в окне Code (Код) стандартного модуля. Затем щелкните на кнопке Paste (Вста- вить) на панели инструментов Visual Basic для вставки двух объявлений в модуле. Visual Basic добавит объявления в ваш стандартный модуль. 12. Разбейте первую строку на две с помощью символа подчер- кивания (_), чтобы объявление целиком поместилось в окне Code (Код). Лучше всего поместить символ переноса строки после имени библиотеки "kernel32”. Никогда не следует разрывать стро- ку посреди оператора или посреди слова, заключенного в ка- вычки. 13. Перенесите объявление GlobalMemoryStatus (теперь оно зани- мает две строки) ниже объявления типа MemoryStatUS. Ваше окно Code (Код) будет выглядеть следующим образом: Project! - Modulel (Code) ciarations) Public Type MEMORYSTATUS dwLength As Long dvMenioryLoad As Long dvTotalPhys As Long dvAvailPhys As Long dvTotalPageFile As Long chjAvailPageFile As Long dvTotalVirtual As Long dvAvailVirtual As Long End Type Public Declare Sub GlobalMemoryStatus Lib "kerneisa” (IpBuffer As MEMORYSTATUS)
552 Часть 5. Возможности и средства профессиональной версии Перенос объявления GlobalMemoryStatus ниже объявления типа необходим, поскольку объявление GlobalMemoryStatus использу- ет в своем описании тип MemoryStatus. Если объявление типа сле- дует после объявления функции, Visual Basic выдает сообще- ние об ошибке при попытке запуска программы. 14. Закройте утилиту API Viewer, свернутую до кнопки в панели задач Windows. Вот и все! API Viewer автоматически копирует всю информацию, которая вам необходима для запуска функции Windows API. Просто найдите нуж- ную функцию API и скопируйте ее в проект через буфер обмена! Совет. Некоторые функции и типы API содержат в своих объявлениях кон- станты. Хотя я и не показывал, как это делается, вы можете исполь- зовать API Viewer также для копирования объявления констант из файла Win32api.txt. Константы в файле Win32api.txt схожи с константами, с ко- торыми вы уже имели дело в Visual Basic (например, константа vbYesNo, которая использовалась для отображения кнопок Yes (Да) и No (Нет) в окне сообщения). Чтобы добавить константу с помощью утилиты API Viewer, щелкните на строке Constants (Константы) в списке Туре (Тип) окна API Viewer, введите имя константы в текстовое поле «Введите пер- вые несколько букв...», а затем скопируйте нужную вам константу в ваш стандартный модуль. Управление использованием памяти на вашем компьютере Теперь, когда вы получили определенные практические навыки, работая с функцией GlobalMemoryStatus, попробуем запустить программу FreeMem, написанную мною на Visual Basic для демонстрации возможностей фун- кции GlobalMemoryStatus API. Программа FreeMem в графическом виде ото- бражает общий объем физической и виртуальной памяти, используемой на вашем компьютере. Эта информация полезна, если вы хотите управ- лять объемом памяти ОЗУ и пространством на жестком диске, выделяе- мом программам. Если вам, к примеру, известно, что у вас не достаточно свободной виртуальной памяти, то вы можете выделить больший объем дискового пространства под системную память. Программа FreeMem так- же использует функцию GlobalMemoryStatus для отображения следующих характеристик использования вашей системной памяти:
Урок 18. Использование средств Windows API 553 общий объем физической памяти ОЗУ на вашем компьютере; общий объем свободной физической памяти ОЗУ; размер текущего файла замещения страниц; объем свободной памяти в текущем файле замещения страниц; общий объем виртуальной памяти (ОЗУ плюс пространство на жест- ком диске) на вашем компьютере. Этим значением управляет файл под- качки; общий объем свободной виртуальной памяти (ОЗУ плюс пространство на жестком диске). Теперь запустим программу FreeMem, чтобы определить объем памяти на вашем компьютере. Запустим программу FreeMem 1. Откройте проект FreeMem.vbp, который содержится в папке \Vb6Sbs\Less18. При появлении запроса, хотите ли вы сохранить изменения, щелкните на кнопке No (Нет). (Я уже добавил в этот проект все необходимые объявления API.) 2. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Программа FreeMem загружена и использует функцию GlobalMemoryStatus для получения информации о памяти на ва- шем компьютере. Через некоторое время вы увидите резуль- тат, который будет выглядеть, например, следующим образом: ч Свободная системная память Используется Физической памяти- 87.25’« liiffimiiiiiiiiiiii Используется виртуальной памяти 4 24£ I--------------------------- Детали I Выход
554 Часть 5. Возможности и средства профессиональной версии Функция FreeMem отображает в графическом виде две основ- ные характеристики использования памяти: общий объем ис- пользуемой физической памяти и общий объем виртуальной памяти в файле подкачки (Swap-файл). Значения обновляют- ся каждые три секунды за счет использования в программе объекта типа таймер. Информация представляется визуально в виде двух индикаторов хода выполнения операции, а также в процентах. Примечание. Насколько, по вашему мнению, используется физическая память? Хотя это может показаться странным, не удивляйтесь, если процент исполь- зования физической памяти (ОЗУ) на вашем компьютере будет около 100 %. Даже если у вас запущено только одно приложение (Visual Basic), диспетчер памяти Windows разместит в неиспользуемой области ОЗУ вашего компьютера модули операционной системы, файлы подкачки, программные коды ранее открытых приложений, полезные файлы .dll, содержимое буфера обмена и т.д. Высокий процент использования фи- зической памяти - вполне нормальное явление. 3. Щелкните на кнопке Details (Дополнительно) формы для ото- бражения более специальной информации об использовании памяти на вашем компьютере. Программа FreeMem откроет вторую форму для отображения более подробной информации, возвращаемой в результате об- ращения к функции GiobalMemoryStatusAPI. Вы увидите инфор- мацию, как на рисунке: JbkldilH 11(1 I И( 1РМНОЙ П кМ*11И [ t Ч Всего физ памяти (RAMJ: Б5М4 Й,’ } Свободно физ памяти (RAM):
Урок 18. Использование средств Windows API 555 Функция GlobalMemoryStatus возвращает каждое из этих значе- ний в структуре с типом MemoryStatUS. Хотя принятой по умол- чанию единицей измерения являются байты, я отображаю ин- формацию в килобайтах, чтобы не утомлять пользователя большими числовыми значениями. (Это достигается путем де- ления полученных значений на 1024.) Значения, относящиеся к объемам физической и виртуальной памяти, должны быть вам понятны, значения, связанные с файлом замещения страниц, нуждаются в дополнительном пояснении. Страница представляет собой блок памяти фиксированного размера, ассоциированный с файлом подкачки Windows (Swap- файл) в виртуальной памяти. Этот блок памяти может быть выделен в программе в процессе ее выполнения. Диспетчер па- мяти Windows отслеживает размещение файлов замещения страниц в виртуальной памяти, чтобы для наиболее часто ис- пользуемых программ выделялась более быстрая физическая память. Файлы замещения страниц также дают дополнитель- ное преимущество: они освобождают программиста от забот, связанных с точным указанием на область физической памяти в создаваемых им программах. Файл замещения страниц мо- жет располагаться в любом месте файла подкачки Windows - в физическом ОЗУ, на жестком диске, либо в каком-либо дру- гом хранилище информации вашей системы. При заполнении одного файла замещения страниц, диспетчер памяти Windows открывает другой файл. Файл замещения страниц представляет собой блок виртуальной па- мяти. 4. Щелкните на кнопке ОК для закрытия формы Details (Допол- нительно), а затем щелкните на кнопке Quit (Выход) для завер- шения работы программы. Теперь рассмотрим программный код, который обеспечивает работу это- го приложения. Рассмотрим исходный текст программы FreeMem 1. Откройте стандартный модуль (FreeMem.bas) в окне Code (Код), чтобы посмотреть, как осуществляется объявление функции GlobalMemoryStatus. Вы увидите те же программные операторы, о которых мы гово- рили ранее в этой главе: структуру с типом MemoryStatUS, со-
556 Часть 5. Возможности и средства профессиональной версии держащую восемь значений, связанных с характеристиками си- стемной памяти, оператор объявления функции GlobalMemoryStatus API и оператор объявления, который создает переменную Meminfo с типом Memorystatus. Ф Project! Module! (Code) j(Genernl) ~y] j {Declarations) - Public Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Public Declare Sub GlobalMemoryStatus Lib "kernel32" _ (IpBuffer As MEMORYSTATUS) Public meminfo As MEMORYSTATUS I 2. 2. Откройте первичную форму (Forml) в окне Code и отобразите в окне текст процедуры обработки события Form_Load, чтобы посмотреть, как используется функция GlobalMemoryStatus. Вы увидите следующий исходный код: Private Sub Form_Load() 'Определение длины типа meminfo meminfo.dwLength = Len(memlnfo) 'Вызов функции GlobalMemoryStatus API для установки параметров ‘индикатора хода выполнения pgbPhysMem.Min = О pgbPhysMem.Max = mem Info.dwTotalPhys pgbVirtMem.Min = 0 pgbVirtMem.Max = meminfo.dwTotalVirtual End Sub Как говорилось ранее, вы должны перед первым вызовом фун- кции GlobalMemoryStatus установить для элемента dwLength типа meminfo длину данного типа. После присвоения этого значения (32 байта) с помощью функции Len я вызываю функцию
Урок 18. Использование средств Windows API 557 GlobalMemoryStatus API и использую элементы dwTotalPhys и dwTotalVirtual для установки максимального ограничения двух индикаторов хода выполнения операции в моей программе. (Я присвоил этим индикаторам хода выполнения соответственно имена pgbPhysMem и pgbVirtMem.) 3. Откроем процедуру обработки события Timer1_Timer и посмот- рим, как обновляются значения индикаторов хода выполнения операции в соответствии с объемом используемой памяти. Вы увидите следующий программный код: Private Sub Timer1_Timer() Dim PhysUsed Dim VirtUsed 'Вызов функции GlobalMemoryStatus API для получения информации ' об использовании памяти Call GlobalMemoryStatus(memlnfo) Phusllsed = meminfo.dwTotalPhys - meminfo.dwAvailPhys PgbPhysMem.Value = Phusllsed 'Отображение информации об использовании памяти с помощью 'числовых значений ииндикаторов хода выполнения IbIPhysUsed.Caption = "Использовано физической памяти:" & _ Format(PhysUsed / meminfo.dwTotalPhys, ”0.00%") VirtUsed = meminfo.dwTotalVirtual - meminfo.dwAvailVirtual PgbVirtMem.Value = VirtUsed LblVirtUsed.Caption = "Использовано виртуальной памяти:" & _ FormatfVirtUsed / meminfo.dwTotalVirtual, "0.00%”) End Sub Поскольку объем используемой памяти постоянно изменяет- ся, необходимо через определенные интервалы времени обнов- лять отображаемую информацию, чтобы пользователь мог оце- нить эти изменения. (Например, попробуйте запустить программу, а затем закрыть открытое приложение и посмот- реть, как изменятся значения.) Самый простой способ перио- дического обновления отображаемой информации заключает- ся в использовании объекта типа таймер с установкой для свойства Interval значения 3000 (три секунды). По мере выпол- нения программы процедура обработки события Timer1_Timer будет вызывать функцию GlobalMemoryStatus каждые три секун- ды, и обновлять показания индикаторов о ходе выполнения и числовые значения. (Обратите внимание, что для получения процента используемой памяти значение доступной памяти вычитается из общего объема памяти.)
558 Часть 5. Возможности и средства профессиональной версии Вы увидите следующий программный код: Private Sub Form_Load() 'Использование типа meminfo для отображения дополнительной ‘информации об использовании памяти IbITotalPhys.Caption = "Всего физ. памяти (RAM):" & _ meminfo.dwTotalPhys /1024 & "Кб” IblAvailPhys.Caption = "Свободно физ. памяти (RAM):" & _ meminfo.dwAvailPhys 11024 & “Кб" IbITotalPage.Caption = "Всего Кб в текущей файловой странице:" & _ meminfo.dwTotalPageFile 11024 IblAvailPage.Caption = "Свободо Кб в текущей файловой странице:" & _ memlnfo.dwAvailPageFile /1024 IbITotalVirtual.Caption = “Всего виртуальной памяти: ” & _ meminfo.dwTotalVirtual /1024 & “Кб" IblAvailVirtual.Caption = “Свободно виртуальной памяти:" & _ memInfo.dwAvailVirtual /1024 & “Кб" End Sub Форма frmDetails представляет собой вторую форму, созданную мной в программе. Она предназначена для более детальной информации об использовании памяти. Я поместил программный код, отображающий дан- ные, в процедуру обработки события Form_Load, чтобы данные отобража- лись в ответ на щелчок пользователя мышью на кнопке Details (Дополни- тельно). В отличие от индикаторов хода выполнения и числовых значений в форме Forml, форма Details не содержит динамически изменяющейся информации, а лишь фиксированные данные относительно текущего ис- пользования памяти. Поскольку для отображения данных в форме исполь- зовано шесть текстовых меток, я присвоил их именам префикс 1Ы и вклю- чил описание их назначения, чтобы лучше их упорядочить. Каждый элемент структуры с типом meminfo, отображаемый процедурой обработ- ки события, делится на 1024, поэтому информация представляется в ки- лобайтах. Шаг вперед: завершение программ с помощью оператора Unload Пока программа FreeMem еще открыта, обратите внимание, каким обра- зом осуществляется завершение программы, когда пользователь щелка- ет мышью на кнопке Quit (Выход) в форме Forml.
Урок 18. Использование средств Windows API 559 > Откройте процедуру обработки события Command2_Click для формы Forml в окне Code (Код). Вы увидите следующий исходный код: Private Sub Command2_Click() Unload frmDetails 'выгрузка обеих форм для выхода Unload Forml End Sub Ранее в этой книге вам уже приходилось завершать выполне- ние ваших программ с помощью оператора End. Этот метод хо- рош, но когда вы приступите к работе с более сложными про- граммными объектами (и начнете изучать дополнительную литературу о программировании на Visual Basic), то, вероятно, обнаружите, что некоторые программисты на Visual Basic ис- пользуют для завершения своих программ оператор U nload. Сам по себе оператор Unload не является для вас новинкой - вы ис- пользовали его для закрытия открытой формы в уроке 8. Как вы помните, оператор Unload не только удаляет форму с экрана, но также освобождает память, которую использовала форма. Кроме того, оператор Unload можно применять для завершения работы программы, если она используется для текущей (и един- ственной) формы в открытом приложении. Именно этим спосо- бом я воспользовался в программе FreeMem - оператор Unload удаляет формы frmDetails и Forml из памяти. Пользуйтесь этим методом в ваших программах как достаточно профессиональ- ной альтернативой оператору End. Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 19. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке No (Нет).
560 Часть 5. Возможности и средства профессиональной версии Краткое содержание Чтобы Сделайте следующее Объявить в вашей программе функцию Windows API Скопируйте необходимые объявления функции, типа и констант в стандартный модуль вашего про- екта. Самый лучший способ сделать это - найти нужную функцию с помощью дополнительной утилиты API Viewer и скопировать объявления че- рез буфер обмена Windows. Задать длину для оп- ределенного пользо- вателем типа Воспользуйтесь функцией Len. Например: Meminfo.dwLength = Len(memlnfo) Вызвать функцию Windows API Используйте оператор Call с необходимыми аргу- ментами. Например, для вызова функции GlobalMemoryStatus введите: Call GlobalMemoryStatus(mem Info) Получить доступ к элементам структу- ры заданного типа, возвращаемых фун- кцией Windows API Задайте имя переменной, ассоциированное с дан- ным типом, и имя элемента. Например, чтобы на- значить свойству Мах, индикатора хода выполне- ния операции, значение элемента dwTotalPhys переменной meminfo (с типом MemoryStatus), введи- те: pgbPhysMem.Max = meminfo.dwTotalPhys Завершить выполне- ние программы с по- мощью оператора Unload Используйте оператор Unload с указанием в каче- стве аргумента имени первичной формы в вашей программе. Например: Unload Forml
ж I Основы программирования > приложений для работы с Internet

УРОК . 19 = Ж я ж и я : Пересылка файлов : с помощью : средства i Internet Transfer я Я Урок * рассчитан * на № 20 минут » Вы научитесь: загружать документы HTML из World Wide Web; пересылать файлы через Internet с использованием про- токола передачи файлов FTP (file transfer protocol); обрабатывать ошибки, имеющие место в процессе Internet-транзакций. В части 6 вы познакомитесь с особыми методами програм- мирования, необходимыми для работы с Web-сайтами, с протоколами и приложениями для динамического языка ги- пертекстовых ссылок Dynamic HTML в Internet. Для разра- ботчика программного обеспечения в Internet предусматри- ваются три уровня организации приложений для работы с Web. На базовом уровне вы можете вводить в ваши прило- жения возможность загружать файлы и документы HTML из Internet. Эта возможность позволяет вам получать важ- ную информацию из удаленных источников, но не обязатель- но создает условия для ее обработки. (К примеру, вы може- те загружать файлы .zip). На следующем уровне вы можете таким образом организовывать ваши программы, чтобы они
564 Часть 6. Основы программирования приложений для работы с Internet обладали возможностью отображать документы HTML из Web-сети внут- ри ваших приложений. При этом пользователи имеют программно орга- низованный доступ к документам HTML через утилиту просмотра, та- кую как Microsoft Internet Explorer. Наконец, вы можете использовать Microsoft Visual Basic и специальный инструмент, называемый Разработ- чиком страниц для динамических гипертекстовых ссылок — Dynamic HTML Page Designer - для создания Web-приложений (DHTML-стра- ниц), которые работают с Internet-серверами в Web. В части 6 вы позна- комитесь с основами каждой из этих трех техник программирования. В уроке 19 вы научитесь загружать файлы на ваш компьютер из Internet с помощью средства управления Internet Transfer ActiveX. Охватить все воз- можности работы с Internet довольно сложно, но чтобы переписать не- сколько файлов с вашего любимого Web-сайта, вам и не нужно знать все детали. В этом уроке вы будете загружать файлы с использованием двух широко распространенных протоколов Internet: HTTP (hypertext transfer protocol - протокол передачи гипертекста) и FTP (file transfer protocol — протокол передачи файлов). Средство управления Internet Transfer представ- ляет собой простой инструмент, управляющий процессом передачи фай- лов с самым разнообразным содержанием. Загрузка документов HTML из сети World Wide Web Для большинства современных приложений становится нормой возмож- ность связи с Internet. Ваша компания может использовать Internet для пересылки файлов по всему миру, либо иметь постоянную связь с опре- деленным Web-сайтом, на котором хранятся документы и иная инфор- мация, которая регулярно используется вашей компанией. Если вы хо- тите, чтобы ваше приложение на Visual Basic обладало набором средств для работы с Internet, прежде всего надо дать пользователям возмож- ность загружать файлы с компьютера-сервера на компьютер-клиент. Сервер представляет собой связанный с Internet компьютер, на котором хранится и поддерживается Web-страница и через который оказывают- ся другие виды услуг. Клиент ~ это компьютер, обладающий доступом к Internet и запрашивающий информацию с сервера. Клиент обращается за информацией и получает ее с помощью программы-браузера, такой как Internet Explorer, или с помощью программы на Visual Basic. Чтобы ввести в вашу программу на Visual Basic возможность обращаться за информацией к Internet-серверу, вы можете использовать средство управления Internet Transfer ActiveX, включенное в профессиональную вер- сию Visual Basic Professional Edition. Средство управления Internet Transfer
Урок 19. Пересылка файлов с помощью средства Internet Transfer 565 позволяет загружать файлы с использованием двух наиболее широко распространенных протоколов в Internet: HTTP и FTP. Протокол HTTP используется, прежде всего, для пересылки документов HTML (докумен- тов с гипертекстовыми ссылками) с Web-серверов. Когда вы указываете в качестве начального адреса в вашем Web-браузере символы «http://», то тем самым сообщаете серверу, что хотите открыть документ, содер- жащий коды HTML, которые ваш браузер может понимать и отображать. Средство управления Internet Тransfer также может использовать этот про- токол для загрузки Web-страниц с серверов в Internet. Протокол FTP главным образом используется для пересылки двоичных файлов или текстовых файлов со специальных серверов, известных как FTP-серверы или FTP-сайты. FTP-серверы можно идентифицировать по префиксу «ftp:/» перед именем сервера. Обычно организации использу- ют FTP-сайты для пересылки файлов в формате .zip (сжатом) и пересыл- ки других двоичных файлов, таких как файлы библиотек динамических связей (.dll) и выполняемых файлов (.ехе). Средство управления Internet Transfer также управляется FTP-транзакциями (пересылка как с сервера на компьютер клиента так и наоборот, с компьютера клиента на сервер). Вы можете использовать функцию Openllrl средства управления Internet Transfer для загрузки всего файла целиком за одну операцию, либо исполь- зовать средство.Internet Transfer для управления особым механизмом - по- байтной передачи файла. Приведенные в данном уроке примеры про- демонстрируют простейшие случаи использования функции OpenURL, когда весь файл целиком загружается за одну операцию синхронной пе- ресылки данных. (Другими словами, Visual Basic не будет выполнять ни- каких дополнительных программных операторов, пока не завершится передача файла.) Метод побайтной пересылки также подходит для наи- более простых Internet-приложений, но он весьма удобен и для тех слу- чаев, когда предъявляются более жесткие требования к передаче фай- лов. Для получения данных этим методом используется функция GetChunk средства Internet Transfer. I Внимание! I I Средство Internet Transfer относится к средствам управления ActiveX, I I включенным в профессиональную версию Visual Basic Professional | I Edition и в коммерческую версию Enterprise Edition. Напомним, для | I того, чтобы добавить средство управления в вашу панель инструмен- I I тов, вы должны щелкнуть на команде Components (Компоненты) в меню I I Project (Проект), установить флажок рядом с именем средства управ- Т I ления (Microsoft Internet Transfer Control 6.0) и щелкнуть на кнопке ОК. |
566 Часть 6. Основы программирования приложений для работы с Internet Запустим программу GetHTML Попробуем запустить программу GetHTML и посмотрим, что вы можете сделать с помощью средства Internet Transfer. 1. Запустите Visual Basic и откройте проект GetHTML, который хранится в папке \Vb6Sbs\Less19 на вашем жестком диске. 2. Щелкните на кнопке Start (Пуск) на панели инструментов для ► i запуска программы. Интерфейс пользователя в вашей програм- ме выглядит, как показано на рисунке. i. Загрузка HTML документов Введите URL для существующего HTML документа и нажмите кнопку Загрузить HTML z^z;^ihttp7/www microsoft com й Загрузить HTML | Программа GetHTML предназначена для загрузки на ваш ком- пьютер и сохранения документов HTML, хранящихся на Web- сервере. Хотя в программе GetHTML предусмотрено текстовое окно, позволяющее вам видеть код HTML, который вы загру- жаете, в программе нет браузера, который дает вам возмож- ность просматривать документ как Web-страницу. (О том, как отображать Web-страницы, вы узнаете в уроке 20.) Тем не ме- нее, вы можете просмотреть загруженный документ HTML в автономном режиме (offline) с помощью Internet Explorer или другой программы-браузера. В программе GetHTML предусмотрено еще одно текстовое поле, которое позволяет вам находить документ, который вы хотите
Урок 19. Пересылка файлов с помощью средства Internet Transfer 567 загрузить, путем задания адреса Internet, - имя пути, также известное как единообразный указатель ресурса (URL — uniform resource locator). По умолчанию текстовое поле URL со- держит адрес Internet для домашней страницы корпорации Microsoft, но вы можете изменить этот адрес на адрес любой Web-страницы по вашему желанию. 3. Щелкните на кнопке Загрузить HTML. Visual Basic использует средство управления Internet Transfer для соединения с Internet и копирования заданной страницы HTML в текстовое окно. Если вы в настоящий момент не подключены ксети, средство управления Internet Transfer для открытия соеди- нения с Internet будет использовать поставщика услуг (провай- дера) Internet, установленного для вас по умолчанию. (В моей системе в этом случае появляется экран Microsoft Network Sign In, и я должен ввести свой идентификатор ID и пароль для уста- новления соединения.) Через некоторое время в вашем текстовом окне появится текст с HTML из домашней страницы Microsoft, который выглядит, подобно представленному на рисунке. В текстовом окне име- ются полосы прокрутки, поэтому вы можете просмотреть весь документ HTML целиком. *< 1.11 |>Ч JI I III Ml ДП( <|М< КК1П Г"Г? Файл Веедиге'иВКдлясуществующегоНТМЬдокументаинаАмиге кнопку Загрузить HTML | Ч*" jhttp7/www microsoft com . .л' <HEAD> ZJ <META HTTP-EQUIV="Content-Type" CONTE NT “"text/html; charset=iso8853-1 "> <TITLE>Welcome to Microsoft's Homepage</TITLE> <META http-equiv="PICS-Label" content=’(PICS-1.1 "http://www.rsac.org/ratingsv01 I <META NAME="KEYv/ORDS" CONTENT “"products; headlines; downloads; news; V/ <META NAME="DESCRIPTION" CONTENT="The entry page to Microsoft's Web site : ' -y5- <META NAME="MS.LOCALE" CONTENT="EN-US"> <META NAM E="CATEGORY"CONTENT “"home page">
568 Часть 6. Основы программирования приложений для работы с Internet В отличие от привлекательно выглядящих Web-страниц, вы увидите коды форматирования, или теги, заключенные в уг- ловые скобки. К таким тегам относятся: <HTML>, сигнализи- рующий о начале документа HTML; <TITLE>, определяющий текст, который появляется в строке заголовка вашего браузе- ра при появлении документа. Домашняя страница Microsoft является достаточно сложным документом HTML и содержит множество тегов, различные стили и шрифты. Однако каждый используемый здесь элемент имеет свой смысл и значение. Подобно стандарту RTF, рассмотренному нами в уроке 15, HTML представляет собой текстовый формат с разделителя- ми, содержащий множество специальных тегов, которые сооб- щают HTML-браузеру, каким образом отображать форматы и графику в документе. 4. Щелкните на меню Файл в программе GetHTML, а затем щелк- ните на команде Сохранить как HTML. Visual Basic отобразит диа- логовое окно Save As (Сохранение). (Ваша текущая папка может быть другой.) 5. Найдите папку \Vb6Sbs\Less19 (если она не открыта в настоя- щий момент) и введите Microsoft Home Page в текстовом поле File Name (Имя файла). 6. Щелкните на кнопке Save (Сохранить). Visual Basic сохранит документ HTML на диске с расширением .htm. 7. Щелкните на меню Файл программы GetHTML, затем щелкните на команде Выход. Visual Basic закроет приложение.
Урок 19. Пересылка файлов с помощью средства Internet Transfer 569 Отобразим документ HTML с помощью Internet Explorer Теперь посмотрим, как домашняя страница Microsoft документа HTML выглядит в виде Web-страницы. 1. Запустите ваш браузер, например так: щелкните на кнопке Start (Пуск), укажите на строку Programs (Программы), укажите на папку Internet Explorer и щелкните на значке Internet Explorer. 2. Если вам будет предложено установить соединение с Internet, щелкните на кнопке Cancel (Отмена), чтобы работать в автоном- ном режиме. Для просмотра загруженного документа нет необ- ходимости устанавливать соединение с Internet. Этот документ уже находится на вашем жестком диске. 3. Введите C:\Vb6Sbs\Lessl9\Microsoft home page.htm в тек- стовом поле Address (Адрес) вашего браузера и нажмите клави- шу | Enter |. Если вы сохранили документ Microsoft HTML, как рекомендовалось в предыдущем разделе, ваш браузер загру- зит документ с домашней страницей Microsoft из папки \Vb6Sbs\Less19. Ваш экран будет выглядеть подобно представ- ленному на рисунке: I г'- а аа _______________ iMfest |ф' С \VB6SBS\Less19\Microsoll Ноте Page.HTML 1 Product Families BackOffice Developer Tools Office Windows Business Solutions Industries Srnali Business Test Drive Windows 2U6P at Windows V/orid Attend Windows World April 19-22 in Chicago and see Windows 2000 Professional and Server editions in action. Microsoft will demonstrate these powerful, upcoming operating system releases and even hand you the wheel for your own test run, Developers Software Develop* Web Site Builders Education Academic Products Education Resellers K-12 Education IT Professionals Digital Nervous System Solution Pro vid ers How to Protect. Yourself From tire ‘Melissa* Word Macro Virus Countdown to Tax Time.> File Online Technology Providers t Get the Tools You Need to Compete Presenting Equal Access Windovrs World P.ffi.?.9..200.f’...Qffex5..Eri.hanced Sec.uri^.Against.Vjros.A.ttacks Microsoft Addresses Customer's* Privacy Concerns Partners Sc Resellers becoming a Partner Find a Services Partner Res-ailerg^Congultants ree Downloads Compeer
570 Часть 6. Основы программирования приложений для работы с Internet Совет. Если вы используете браузер Netscape, для отображения документа HTML щелкните на команде Open Page (Открыть страницу) в меню File (Файл) Netscape, щелкните на команде Choose File (Выбор файла), най- дите документ Microsoft HTML, загруженный вами ранее, и дважды щелкните на кнопке Open (Открыть). Теперь вместо сложных и запутанных тегов форматирования HTML вы увидите загруженный документ в виде Web-страницы. Хотя вы сейчас не подключены к сети, на этой странице вы можете увидеть выделения миганием и графические выделения. Это результат применения специ- ального форматирования, примененного Microsoft для Web-страницы. Кроме того, обратите внимание, что ни одна из гиперсвязей на Web-стра- нице в настоящий момент не активизирована. Причина заключается в том, что вы загрузили лишь копию открытого документа HTML, представлен- ного Microsoft на Web-сайте, но не полную копию Web-приложения с файлами поддержки. Примечание. Некоторые документы HTML сами включают в себя файлы, содер- жащие все ресурсы, необходимые для функционирования в вашем браузере. Другие требуют дополнительной поддержки работы с до- кументами HTML, программами и средствами ActiveX, хранящимися на сервере. 4. Просмотрите содержимое Web-страницы Microsoft, после чего закройте ваш браузер. В уроке 20 вы'снова будете использовать Internet Explorer. Там вы узна- ете, как отображать документы HTML в ваших приложениях на Visual Basic. Совет. Чтобы сэкономить на плате за соединение, используйте это приложе- ние для загрузки Web-страниц, которые содержат подробную инфор- мацию, которую вы хотите внимательно изучить. После загрузки до- кумента HTML разорвите соединение с Internet и просматривайте страницу в автономном режиме сколь угодно долго!
Урок 19. Пересылка файлов с помощью средства Internet Transfer 571 Рассмотрим исходный текст программы GetHTML Теперь, когда у вас есть некоторый опыт работы с документами HTML, рассмотрим программный код для программы GetHTML. 1. Откройте раздел объявлений Declarations формы Forml в окне Code (Код). Вы увидите следующий программный код: 'объявление переменной для текущего адреса URL Dim strURL As String Раздел Declarations (исходный код над текстом первой процеду- ры обработки события) используется для объявления глобаль- ных переменных, значения которых используются в каждой из процедур обработки события в форме. В разделе объявлений я объявляю глобальную строковую переменную с именем strURL для хранения адреса Internet для файла в Web, который я хочу загрузить. Это же имя используется и в процедуре обработки события Command1_Click. 2. Отобразите в окне Code (Код) текст процедуры обработки со- бытия Command"!_Click. Вы увидите следующий код: Private Sub Command1_Click() On Error GoTo errorhandler StrUrl = txtURLbox.Text 'проверка наличия не менее 11 символов (http://www.) If Len(strUrl) > 11 Then 'копирование документа html в текстовое окно txtNote.Text = Inetl .OpenUR L(strUrl) Else MsgBox "Введите правильно имя документа в поле URL адреса" End If Exit Sub errorhandler: MsgBox "Ошибка открытия URL-адреса”,, Err.Description End Sub Эта процедура обработки события копирует Internet-адрес в первом текстовом поле (txtURLbox) глобальной переменной StrUrl. Затем она использует средство управления Internet Transfer для соединения с Internet и копирует заданный документ HTML. В операторе txtNote.Text = Inetl .OpenURL(strUrl)
572 Часть 6. Основы программирования приложений для работы с Internet используется функция OpenURL объекта Internet Transfer для заг- рузки файла, задаваемого переменной strllrl, и осуществляется копирование ее во второе текстовое поле (окно) формы (txtNote). Если пересылка оказалась неудачной, то возвращается ошиб- ка, и обработчик ошибок отображает ошибку с помощью свой- ства Description объекта Err. В большинстве случаев причиной ошибок являются неправильные имена URL (адресов Internet) или перерыв в соединении (тайм-аут). z-z-: '''.'zz.::/:жг | Внимание! | I В средстве управления Internet Transfer предусмотрено свойство | I SetTimeout, устанавливающее число секунд, которое является допус- I J тимым для тайм-аута. [Тайм-аут представляет собой ошибку, воз- | | пикающую в результате превышения допустимой задержки времени I | при транзакции.) В этой программе я установил величину допусти- у | мой задержки, равную 80 секундам, чтобы дать пользователю доста- | | точно времени на соединение с Internet-провайдером, но при жела- I 1 нии вы можете уменьшить это значение. Замечу, что если вы И в I попытаетесь выити из вашего приложения до истечения лимита вре- | i мени, установленного на транзакцию, Visual Basic продолжит ожида- I щ ние и закроет программы лишь по истечении указанного времени. I 3. Отобразите в окне Code (Код) текст процедуры обработки со- бытия mnultemHTML_Click. Вы увидите следующий программный код: Private Sub mnultemHTML_Click() 'примечание: файл представляет собой строковую переменную CommonDialogl .DefaultExt = "НТМ" CommonDialogl.Filter = "HTML файлы (*.HTML;*.HTM)I*.HTML;HTM" CommonDialogl .ShowSave 'отображение диалогового окна Save (Сохранение) If CommonDialogl .FileName <> Then Open CommonDialogl.FileName For Output As #1 Print #1, txtNote.Text 'сохранение строки в файл Close #1 'закрытие файла End If End Sub Эта процедура обработки события выполняется, когда пользо- ватель щелкает на команде Save As HTML (Сохранить как HTML) в меню File (Файл) программы GetHTML. Она просто сохраняет документ HTML, который вы загрузили в ваше текстовое окно как текстовый файл, и добавляет расширение .htm к файлу,
Урок 19. Пересылка файлов с помощью средства Internet Transfer 573 если пользователь этого не сделал. (Документ HTML представ- ляет собой обычные текстовые файлы с тегами форматирова- ния и имеет расширение .htm.) Процедура открытия и сохра- нения текста аналогична той, которая обсуждалась в уроке 12. 4. Отобразите текст процедуры обработки события mnultemSave_Click в окне Code (Код). Вы увидите следующий программный код: Private Sub mnultemSave_Click() 'примечание: файл представляет собой строковую переменную CommonDialogl .DefaultExt = "TXT" CommonDialogl.Filter = "Текстовые файлы (*.TXT)I*.TXT“ CommonDialogl .ShowSave 'отображение диалогового окна Save (Сохранение) If CommonDialogl .FiieName о"" Then Open CommonDialogl.FiieName For Output As #1 Print #1, txtNote.Text 'сохранение строки в файл Close #1 'закрытие файла End If End Sub Эта процедура обработки события выполняется, если вы щел- кните на команде Save As Text (Сохранить как текст) в меню File (Файл). Вы не проверяли работу этой команды при запуске про- граммы GetHTML, однако действие ее очень похоже на действие команды Save As HTML (Сохранить как HTML). Единственное от- личие состоит в том, что команда Save As Text (Сохранить как текст) добавляет расширение .txt к вашему документу, в ре- зультате чего он отображается в содержимом папки как тек- стовый файл. Тем не менее, команда не удаляет теги формати- рования HTML из вашего документа (она лишь изменяет расширение файла). Теперь, когда вы познакомились с операцией загрузки документов HTML с помощью средства управления Internet Transfer, перейдем к рассмотре- нию вопроса об использовании протокола FTP для копирования файлов, которые не содержат тегов форматирования HTML. Передача файлов в соответствии с протоколом FTP В качестве альтернативы загрузки файлов с помощью функции OpenURL вы можете использовать для копирования файлов команды FTP функции Execute средства управления Internet Transfer. Команды FTP представляют собой коды, которые выполняют операции с файлами, определяемые FTP-
574 Часть 6. Основы программирования приложений для работы с Internet протоколом — стандартом, принятым разработчиками Internet. К полез- ным командам FTP относятся GET (для загрузки файлов из сети), PUT (для передачи файлов в сеть), SIZE (для определения размера файла на FTP- сайте) и DIR (для выдачи списка файлов в текущей директории FTP). В последующих упражнениях вы посмотрите, как пользоваться командой GET для загрузки текстового файла из FTP-сайта корпорации Microsoft. Совет. Чтобы подробнее узнать о командах ИР, которые вы можете исполь- зовать с помощью средства управления Internet Transfer, щелкните на вкладке Index (Предметный указатель) в оперативной справочной си- стеме MSDN Library и введите FTP servers, arguments for Execute method. Запустим программу FTP 1. Откройте проект (FTP.vbp) HP.vbp, который содержится в папке \Vb6Sbs\Less19 на вашем жестком диске. Если появится со- общение с предложением сохранить изменения в программе GetHTML, щелкните на кнопке No (Нет). ► 2. Щелкните на кнопке Start (Пуск) на панели инструментов, чтобы запустить программу. Программа ИР начнет свою рабо- ту, а ваш экран будет выглядеть следующим образом: Загрузка файлов через FTP P Введите URL для FTP-сайта, с которого будете загружать Файл. и. введя имя Файла для сохранения на жестком диске, щелкните на Загрузить. Показать опции-—— (- Показать в текстовом Окне |ffp //ftp microsoft com disclaimer txt С Wb6Sbs\Less13\disclaimer.txt Загрузить ,
Урок 19. Пересылка файлов с помощью средства Internet Transfer 575 Программа ИР была разработана мной для загрузки файлов из FTP-сайтов на жесткий диск компьютера. Эта утилита рабо- тает с файлами любого типа. Она включает в себя две кнопки выбора - Показать в текстовом окне (Display) и Не показывать (Don’t Display). Это дает вам возможность выбирать, отображать ли файл после того, как он был загружен. Некоторые файлы, на- пример файл disclaimer.txt в корневой директории FTP-сайта Microsoft, являются простыми текстовыми файлами, которые легко можно просматривать в текстовом окне Visual Basic. Од- нако файлы других типов, например .zip, .exe, .dll, написаны в двоичном формате и не предназначены для отображения в тек- стовом окне. (Именно поэтому в данной утилите предусмотре- на возможность выбора.) 3. Щелкните на кнопке выбора Показать в текстовом окне, а затем щелкните на кнопке Загрузить. Программа FTP использует средство управления Internet Transfer для установки соединения с Internet и загружает заданный вами файл. (Если вы не подключены к сети, средство управле- ния Internet Transfer откроет окно входа в Internet и предложит вам ввести ваш идентификатор ID и пароль.) Чтобы дать вам практический пример, как работает функция Execute, я задал FTP-сайт Microsoft и файл disclaimer.txt, кото- рый должен быть на этом сайте. Однако в том случае, если Microsoft переместил этот файл в другое место с того момента, как была написана эта книга, то при попытке функции Execute загрузить этот файл, вы увидите сообщение об ошибке. Если зто произойдет, задайте другое имя файла на FTP-сайте Microsoft, либо обратитесь к другому знакомому вам имени FTP-сайта. Внимание! Установленные по умолчанию настройки в программе ИР предпола- гают, что вы инсталлировали учебные файлы в папку, предложенную по умолчанию. Если папка \Vb6Sbs\Less19 не существует, задайте дру- гую папку в текстовом поле указания места назначения файла (тре- тье поле сверху). Через некоторое время ваша форма примет следующий вид:
576 Часть 6. Основы программирования приложений для работы с Internet Si Загрузка файлов через FTP . . - . ИЕН1 Введите URL для FTP-сайта, с которого будете загружать файл, я, введя ' имя Файла для сохранения на жестком диске, щелкните на Загрузить. .---------------------------- г Показать опции :- jttp //ftp microsoft com | ^ок^ье“1 ’ Idisclaimer tst ! f j Г пепоказавЭть ____________________________I____„________________ jr '•.'зСЗзл',I I Загрузить I THE INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY -* KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESSED OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, “ ЕШ IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR 4. Снова щелкните на кнопке Загрузить, не изменяя описания пути в текстовом поле. Средство управления Internet Transfer ге- нерирует сообщение об ошибке, поскольку вы не изменили имя файла назначения, а операция загрузки, которую вы хотели бы осуществить, может при этом произвести запись поверх име- ющегося файла. Вы увидите сообщение о том, что файл уже существует и следует ввести новое имя файла назначения. 5. Щелкните на кнопке ОК, чтобы закрыть окно сообщения. За- дайте новое имя файла назначения и снова щелкните на кноп- ке Загрузить. Программа скопирует файл в заданное вами место назначения и снова отобразит содержимое файла disclaimer.txt в текстовом окне. 6. Если вы знаете адрес какого-либо другого FTP-сайта, задай- те его в первом текстовом поле. Затем ведите имя исходного файла, который вы хотите скопировать, во второе текстовое поле, после чего вводите путь к файлу назначения на вашем жестком диске в третье текстовое поле. При необходимости воспользуйтесь браузером Internet для поиска нужного вам файла. Если есть возможность, укажите двоичный файл (например, .zip), вы увидите как данная утили-
Урок 19. Пересылка файлов с помощью средства Internet Transfer 577 та работает с другим форматом файлов. (В этом случае не за- будьте щелкнуть на кнопке выбора Не показывать.) 7. Щелкните на кнопке Загрузить для загрузки заданного вами файла. 8. По завершении работы с FTP-приложением щелкните на кнопке Close (Закрыть) в строке заголовка окна программы для выхода из нее. Рассмотрим исходный текст программы FTP Программа FTP использует функцию Execute средства управления Internet Transfer для загрузки файлов с заданного FTP-сайта и событие StateChanged для обнаружения завершения передачи и проверки наличия ошибок. Пе- рейдем к рассмотрению программного кода. 1. Откройте раздел объявлений Declaration формы FTP в окне Code (Код). Вы увидите следующий программный код: 'Объявление переменных для адреса URL, места расположения файла на сервере 'и пути к файлу назначения на жестком диске Dim StrUrl As String 'URL - это адрес FTP-сайта Dim strSource As String Dim strDest As String Как и в программе GetHTML, в программе FTP используется раз- дел объявления глобальных переменных, которые будут ис- пользоваться всей программой. Строковая переменная StrUrl содержит Internet-адрес FTP-сайта; переменная strSource со- держит описание пути к исходному файлу, копируемому с FTP- сайта; переменная strDest содержит описание пути к файлу на- значения на жестком диске пользователя. 2. Откройте процедуру обработки события Command1_Click в окне Code (Код). Вы увидите следующий программный код: Private Sub Command1_Click () 'Установка соединения с FTP-сайтом и копирование файла на жесткий диск StrUrl=1xtURLbox.Text 'получение адреса URLn копирование файла нажесткий диск strSource = txtServerPath.Text 'получение пути к исходному файлу strDest = txtLocalPath.Text 'получение пути к файлу назначений 'Использование функции Execute и команды GET для копирования файла Inetl .Execute StrUrl, "GET" & strSource & "" & strDest End Sub
578 Часть 6. Основы программирования приложений для работы с Internet Эта процедура обработки события присваивает FTP-адрес, исходный путь и путь к файлу назначения для операции заг- рузки трем глобальным переменным в программе. Далее про- цедура использует эти три переменные в качестве аргументов для функции Execute средства управления Internet Transfer. Син- таксис функции Execute не слишком сложен. Собственно функ- ции Execute необходимо передать строковые аргументы, отве- чающие соглашениям, принятым при использовании команд FTP в Internet. Синтаксис команды GET (которая и загружает фай- лы из FTP-сайта) выглядит следующим образом: GET исходныйфайл файлназначения При использовании функции Execute синтаксис для операции загрузки файла выглядит так: Inetl .Execute strllrl, "GET" & strSource & & strDest (Я использовал оператор конкатенации для объединения вме- сте строк и создания необходимых пропусков между ними.) 3. Откройте процедуру обработки события Inetl.StateChanged в окне Code (Код). Вы увидите следующий программный код: Private Sub Inetl.StateChanged (ByVai State As Integer) 'Это событие наступает при завершении выполнения различных 'задач, таких как установка соединения или обнаружение ошибки Dim strAIIText As String 'задание типов двумя переменными Dim strLine As String 'для отображения текстового файла 'Когда пересылка завершается, или имеет место ошибка, 'осуществляется соответствующая обработка состояния Select Case State Case icError 'если имела место ошибка, идентифицировать ее If Inetl .ResponseCode = 80 Then 'файл уже существует MsgBox“Файл уже существует! Пожалуйста, укажите новое имя файла" Else 'если код не равен 80, выдать сообщение о неизвестной ошибке MsgBox Inetl .Responseinfo ,, "Неизвестная ошибка" End If Case icResponseCompleted If Optionl.Value = True Then Open strDest For Input As #1 Do Until E0F(1) Line Input #1, strLine StrAIIText = strAIIText & strLine & vbCrlf Loop 'если FTP-сайт успешно найден 'отобразить требуемый файл 'открыть требуемый файл 'чтение каждой строки
Урок 19. Пересылка файлов с помощью средства Internet Transfer 579 Close #1 txtNote.Text = strALLText 'копировать требуемый файл Else 'если выбран не текстовый режим (по умолчанию) txtNote.Text ="" 'сообщение о завершении пересылки MsgBox "Перенос завершен",, strDest End If End Select End Sub Процедура обработки события StateChanged весьма подходит для того, что- бы проверить ход выполнения операции загрузки, инициированной фун- кцией Execute. Как вам известно, функция OpenllRL средства управления Internet Transfer управляет пересылкой файлов в синхронном режиме, ожи- дая пока не будет загружен весь файл (или пока не будет обнаружена ошибка по тайм-ауту), и лишь потом приступает к обработке следующего оператора в программе. Функция Execute работает по-другому, она управ- ляет пересылкой файлов в асинхронном режиме, т.е. посылает команду FTP на FTP-сервер, а затем продолжает выполнять другие программные операторы. Если вы используете функцию Execute, вам необходимо каким-то образом определить, что происходит с командой, переданной вами на FTP-сер- вер. Такой механизм должен содержаться в процедуре обработки собы- тия StateChanged Visual Basic, для чего вам нужно написать соответствую- щий программный код. Эта процедура выполняется каждый раз, когда средство управления Internet Transfer обнаруживает изменение состояния в Internet-соединении. Процедура обработки события StateChanged вклю- чает в себя специальный параметр с именем State, который содержит чис- ловой код, индицирующий самое последнее событие в процессе переда- чи, которое имело место в вашем соединении. Этот код дает вам возможность использовать структуру Select Case для определения вида воз- вращаемого параметром State значения и соответствующим образом от- реагировать. Обратите внимание на блок IcResponseComplete в процедуре обработки со- бытия StateChanged. Этот программный сегмент выполняется по заверше- нии операции GET, т.е. после того, как файл был успешно загружен с FTP- сайта. После этого структура с условием If...Then...Else проверяет, какая из кнопок выбора активизирована в форме, в результате чего выполня- ется та или иная ветвь в программе. Если выбрана первая опция - Отобра- зить в текстовом окне (Display In Text Box), файл открывается снова, а его со- держимое копируется в текстовое окно формы. Если же нет, текстовое окно очищается, и отображается окно с сообщением, что текущая пере- сылка успешно завершена.
580 Часть 6. Основы программирования приложений для работы с Internet Функция Execute средства управления Internet Transfer является прекрасным инструментом для управления FTP-пересылкой. Если вы используете ее, убедитесь, что вы предусмотрели сред- ства для контроля успешного завершения пересылки или для контроля возникновения ошибки при ее выполнении в проце- дуре обработки события StateChanged. Шаг вперед: контроль ошибок в ходе Internet-транзакций Как вы смогли узнать из предыдущего раздела, процедура обработки со- бытия StateChanged представляет собой полезный механизм для обнару- жения завершения процесса пересылки файла, инициированного функ- цией Execute. Вы также можете применять процедуру обработки события StateChanged для выявления вида ошибки, возникающей при использова- нии команд FTP и других функций. Если в вашем Internet-соединении имеет место ошибка, средство управ- ления Internet Transfer устанавливает для параметра State в процедуре об- работки события StateChanged значение, представленное константой IcError (номер 11). Если вы будете осуществлять проверку состояния параметра State в процедуре обработки события StateChanged с помощью оператора Case, то сможете выявить любые ошибки и отобразить их в свойстве ResponseCode средства управления Internet Transfer. Обычно свойство ResponseCode имеет значение 0 (отсутствие ошибки), но при установке значения IcError для параметра состояния в процедуре обработки события StateChanged для идентификации имевшей место ошибки свойству ResponseCode присваи- вается специально оговоренное значение. Откройте процедуру обработки события lnet1_StateChanged в окне Code (Код) (если она не была открыта) и осуществите прокрутку содержимого окна, чтобы найти первый оператор Case в процедуре. Блок IcError будет выглядеть следующим образом: Case IcError 'если имела место ошибка If Inetl .ResponseCode = 80 Then 'файл уже существует MsgBox "Файл уже существует! Пожалуйста, укажите новое имя файла” Else 'если код не равен 80, выдать сообщение о неизвестной ошибке MsgBox Inetl .Responseinfo ,, “Неизвестная ошибка" End If Если IcError имеет значение True (Истина), значит, в текущем соединении с Internet имела место ошибка, и пользователя необходимо проинформи-
Урок 19. Пересылка файлов с помощью средства Internet Transfer 581 ровать, что ему следует делать дальше. Я выбрал для проверки значения свойства ResponseCode число 80, которое указывает на то, что файл назна- чения, заданный в третьем текстовом поле, уже существует в системе пользователя. (К счастью, команда GET не записывает автоматически но- вый файл поверх существующего файла; вместо этого вы получаете со- общение об ошибке.) Если обнаружено значение, равное 80, программа отображает окно с соответствующим предупреждающим сообщением, и пользователь имеет возможность исправить ситуацию. Если ошибка свя- зана с другой проблемой, отличной от той, что данный файл уже суще- ствует, для отображения универсального сообщения об ошибке «Неизве- стная ошибка» и выдачи уточненной информации о виде ошибки с помощью свойства Responseinfo используется ветвь Else. В процессе выпол- нения свойство Responseinfo содержит поясняющий текст, сходный с тем, который содержится в сообщении, порождаемом свойством Description объекта Err. Добавив механизм обнаружения и идентификации ошибки в вашу про- цедуру обработки события, вы сможете предотвратить сбои в работе ва- шего DTP-приложения, вызываемые известными ошибками соединения. Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 20. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке No (Нет). Краткое содержание Чтобы Сделайте следующее Добавить средство управления Internet Transfer ActiveX в вашу панель инст- рументов Скопировать доку- мент HTML из Web в текстовое окно ва- шей программы В меню Project (Проект) щелкните на команде Components (Компоненты). Щелкните на закладке Controls (Средства управления), установите флажок рядом с именем Microsoft Internet Transfer Control 6.0 и щелкните на кнопке ОК. Воспользуйтесь функцией OpenllRL средства управ- ления Internet Transfer. Например: TxtNote.Text = Inetl .OpenURL(strllrl)
582 Часть 6. Основы программирования приложений для работы с Internet Чтобы Сделайте следующее Загрузить файл с FTP-сайта Воспользуйтесь функцией Execute средства управле- ния Internet Transfer. Например: Inetl .Execute strUrl, "GET" & strSource _ && strDest Реагировать на из- менение состояния в вашем Internet- соединении Напишите структуру с условием Select Case, которая бы осуществляла проверку свойства State средства управления Internet Transfer в процедуре обработки события StateChanged.
УРОК . 20 = Урок рассчитан на 40 минут Отображение документов HTML с помощью Internet Explorer Вы научитесь: исследовать объектную модель Microsoft Internet Explorer; просматривать документы HTML из ваших приложений; использовать события Internet Explorer. В уроке 19 вы узнали, как загружать файлы в приложениях на Visual Basic с использованием средства управления Internet Transfer. С помощью этого полезного инструмента вы можете загружать почти все виды представления информации из Internet, включая текстовые файлы, документы HTML, вы- полняемые файлы, сжатые файлы (например, .zip), элект- ронные таблицы и т.д. В этом уроке вы узнаете, как отобра- жать документы HTML в ваших приложениях с помощью объекта Internet Explorer, программируемой компоненты со свойствами, функциями и событиями, которые доступны каждой компьютерной системе, в которой представлена ко- пия программного обеспечения Internet Explorer. По мере ис- следования объектной модели Internet Explorer вы узнаете,
584 Часть 6, Основы программирования приложений для работы с Internet как добавлять объект Internet Explorer в ваши проекты на Visual Basic, а также как использовать свойства Internet Explorer, функции и события для отображения документов HTML. Как вы увидите в дальнейшем, Internet Explorer представляет собой полезную объектную модель, во многом схожую с объектами, обрабатываемыми приложениями Microsoft Office. С помощью Internet Explorer вы можете отображать сложные до- кументы HTML и Web-страницы без самостоятельного написания про- граммы-браузера. Основы работы с объектом Internet Explorer Microsoft Internet Explorer является программой-браузером общего на- значения, которая отображает документы HTML, хранящиеся в Internet или на вашем жестком диске. Фирма Microsoft разработала программу Internet Explorer таким образом, чтобы вы могли использовать ее как от- дельное приложение (запускаемое из стартового меню Windows), или как составной объект в созданной вами программе. Соответственно, Internet Explorer представляет свои возможности как набор свойств, функций и событий, которые распознаются в виде объектной модели. Вы можете ис- следовать объектную модель с помощью браузера объектов Visual Basic Object Browser и использовать возможности объекта в ваших програм- мах. Объект Internet Explorer не является средством управления ActiveX, вклю- ченным в профессиональную версию Visual Basic Professional Edition. Он представляет собой объектную библиотеку, присущую всем системам, на которые была инсталлирована копия Internet Explorer. (Другими слова- ми, Internet Explorer должен быть представлен в системном реестре.) По- скольку Microsoft использует Internet Explorer для отображения файлов помощи Help во многих своих приложениях (включая Visual Basic 6), вы обнаружите объектную библиотеку Internet Explorer в большинстве сис- тем, в которых имеется программное обеспечение Microsoft.
Урок 20. Отображение документов HTML с помощью Internet Explorer 585 Внимание! В данном уроке описывается версия Internet Explorer 4.0 (она постав- ляется с Visual Basic 6). Основные свойства, функции и события в | I объекте Internet Explorer не претерпевают значительных изменений | I от одной версии к другой. Однако прежде чем приступить к этому уро- I ку, проверьте, какую версию Internet Explorer вы используете. Если у вас установлена версия, отличная от 4.0, воспользуйтесь средством | просмотра объектов Object Browser, чтобы убедиться, что она содержит I j свойства, функции и события, которые вы планируете использовать. Подобно объектным библиотекам приложений в Microsoft Office, I объектная модель Internet Explorer время от времени подвергается I обновлению. Без сомнения, последующие версии будут иметь некото- I рые отличия (обладать несколько большими возможностями). I Добавление ссылки Microsoft Internet Controls в ваше приложение Прежде чем использовать объект Internet Explorer, необходимо добавить в ваше приложение ссылку на объектную библиотеку. Это можно сделать с помощью команды References (Ссылки) в меню Project (Проект) Visual Basic, как показано в следующем упражнении. Если у вас есть желание, вы мо- жете попрактиковаться в добавлении ссылок сейчас, либо просто уяснить для себя, как это делается, чтобы прибегнуть к этой операции в дальней- шем. (Подготовленная мною для этого урока программа уже включает в себя эту ссылку, но вам лучше потренироваться в добавлении ссылок сей- час, если вы хотите далее в этом разделе исследовать объектную модель.) Как включить объект Internet Explorer в ваш проект 1. Запустите Visual Basic и откройте новый стандартный проект. 2. В меню Project (Проект) щелкните на команде Preferences (Ссылки). 3. Найдите в списке ссылку Microsoft Internet Controls (shdocvw.dll), а затем щелкните на поле флажка слева от имени ссылки. Ваше диалоговое окно будет выглядеть примерно следующим образом:
586 Часть 6. Основы программирования приложений для работы с Internet References - Project! Available References: Priority I.icrosof.t Internet Controls ! i Microsoft Dialog Automation Object: Ll Microsoft Excel 5.0 Obiect Library i.j Microsoft Excel 8.0 Obiect Library iJ Microsoft Exchange Event Service Config 1.0 Type Lil L i Microsoft Graph 5.0 Object Library i j Microsoft Graph 8.0 Object Library L J Microsoft HTML Intrinsic Controls .................. i i Microsoft Office 8.0 Obiect Library i I Microsoft Office 95 Obiect Library Lj Microsoft OLE DE Service Component 1.0 Type Librar i„ I Microsoft OLE DE Simple Provider 1.5 Library i i Microsoft Outlook 8.0 Object Library 1 Microsoft Remote Data Obiect 2,0 ; Microsoft Internet Controls Location: CilWINV5¥Sra4\S^OCVW,DLL Language: Standard 4. Щелкните на кнопке OK, чтобы добавить ссылку в ваш про- ект. Visual Basic добавит объектную библиотеку Internet Explorer в ваш проект. Исследование объектной модели Internet Explorer Прежде чем начать использовать объект Internet Explorer в программе, просмотрите его свойства, функции и события с помощью средства Visual Basic Object Browser. Объект Internet Explorer входит в состав класса с именем Internet Explorer, который является элементом библиотеки SHDocVw (именно ей соответствует ссылка Microsoft Internet Controls, которую вы до- бавили в ваш проект). События, функции и свойства внутри класса Internet Explorer вы можете использовать для отображения документов HTML в ваших программах. Как вам известно из урока 14, с помощью средства Object Browser вы легко можете получить информацию относи- тельно объектных библиотек, не включенных в Visual Basic. К ним отно- сится и объектная библиотека Internet Explorer.
Урок 20. Отображение документов HTML с помощью Internet Explorer 587 Как использовать средство просмотра объектов Object Browser 1. Щелкните на кнопке Object Browser (Просмотр объектов) на панели инструментов, чтобы отобразить окно Object Browser Visual Basic. I Совет. Для отображения окна Object Browser (Просмотр объектов) вы можете воспользоваться клавишей | F2 |. Окно Object Browser (Просмотр объек- тов) можно также открыть, щелкнув на команде Object Browser (Про- смотр объектов) в меню View (Вид). 2. В ниспадающем списке Project/Library (Проект/Библиотека) щелкните на библиотеке SHDocVw. В полях со списком Classes (Классы) и Members (Состав) будут отображены составные час- ти библиотеки SHDocVw (объекты, ассоциированные со сред- ством Microsoft Internet Controls). 3. Осуществите прокрутку вниз поля со списком Classes (Клас- сы) и щелкните на классе InternetExpiorer. Окно Object Browser (Про- смотр объектов) будет выглядеть примерно так, как показано на следующем рисунке: Object Browser jSHDocVw '' < »- - [ Clashes О «globals» ; aP CorrimandStateChaij Ш DShellFoldetViewEv Ш Folder Ж Folderltern Ш Folderltems Ш FolderltemVerb Ш FolderltemVerbs InternetExpiorer aP OLECMDEXECOPT OLECMDF sP OLECMDID Members of InternetExpiorer' Й? AddressBar Й? Application BeforeNavigate2 Й? Busy » ClientToWindow $ CommandStateChange B®* Container Й? Document $ DocumentComplete £ DownloadBegin ft DownloadComplete ExecWB
588 Часть 6. Основы программирования приложений для работы с Internet В правом списке Members (Состав) появятся свойства, функции и события, принадлежащие классу InternetExplorer. Вы можете щелкнуть на любом из этих элементов, чтобы увидеть синтак- сис (и краткое описание каждого из элементов, управляющих работой Internet Explorer). Попробуем сделать это для несколь- ких свойств, функций и событий. 4. Щелкните на функции Navigate в поле со списком Members (Со- став). Вы увидите следующее описание синтаксиса: Object Browser SHPoeVw Classes O ;globals> iff CommardStateChai||' ® DShellFolderViewEv ® Folder Ш Folderltem J|i © Folderltems Д ® FolderltemVerb ® FolderltemVerbs InternetExplorer ЩД ff> "ole cmdexecopt ff OLECMDF ВННМшИИНВННННиЕ 3 41 A jJ 3 iiw Members of'InternetExplorer' Й? LocationName Ж E§* LocationURL ES1 MenuEiar Й? Name Navigate Navigate? p NavigateComplete? 0 NewWindow? E§’ Offline OnFullScreen £ OnMenuEiar Sub Navigate(OF?L^5 Siring, [flags], {TargetFrameName], [PostData], [Headers]} Member of SHbocVw.tmei notExnto; w Navigates to a URL or file. Функция Navigate открывает заданный указатель URL, который может быть либо адресом Internet, либо местом хранения до- кумента HTML в вашей системе. Аргумент Flags задает, вносить ли данный указатель URL в журнал Internet Explorer, или в дис- ковый кэш. Аргументы TargetFrameName, PostData и Headers описы- вают, как документ HTML будет открываться и идентифици- роваться в окне браузера. (Аргументы Flags, TargetFrameName, PostData и Headers являются не обязательными.) Хотя синтаксис может оказаться довольно сложным, команда Navigate очень про- ста в использовании. В большинстве случаев вам нужно лишь иметь возможность просматривать документы HTML в вашем приложении.
Урок 20. Отображение документов HTML с помощью Internet Explorer 589 Функция Navigate открывает документ по указателю URL. 5. Щелкните на свойстве Location URL в поле со списком Members (Состав). Свойство LocationURL содержит путь к документу HTML, кото- рый в настоящий момент открыт в браузере Internet Explorer. Если вы хотите регистрировать каждый Web-сайт, который пользователь посещал в ходе сеанса, вы можете воспользовать- ся функцией Navigate для копирования текстовой строки из свой- ства LocationURL в текстовое окно или поле с ниспадающим спис- ком после каждого успешного соединения с Web-страницей. 6. Щелкните на событии NavigateComplete2 в поле со списком Members (Состав). Объект Internet Explorer использует событие NavigateComplete2 в том случае, если функция Navigate успешно завершила опера- цию, и новый документ HTML был загружен в окно браузера. Мы используем это событие в упражнении раздела «Шаг впе- ред» в конце этого урока, чтобы создать журнал посещений Web-сайтов. I Примечание. I I Когда Microsoft усовершенствует объектную модель Internet Explorer, | I при этом часто создаются обновленные версии существующих I I свойств, функций и событий, что сопровождается добавлением циф- и I ры к соответствующему имени. Изучив новый синтаксис и его описа- | I ние, вы можете определить, какие появились дополнительные аргу- I менты и каково назначение нового элемента. Именно этим объясняется I I наличие в объектной библиотеке Internet Explorer 4 функций Navigate I I и Navigate2. 7. Изучите другие заинтересовавшие вас свойства, функции и события с помощью средства просмотра объектов Object Browser. 8. Закончив изучение объектной модели, щелкните на кнопке Close (Закрыть), чтобы выйти из программы просмотра объек- тов Object Browser. Отображение документов HTML Чтобы отобразить документ HTML с помощью объекта Internet Explorer, в программный код приложения на Visual Basic требуется ввести лишь
590 Часть 6. Основы программирования приложений для работы с Internet несколько строк. Прежде всего, вы должны создать объектную перемен- ную в вашем приложении, представляющую объект Internet Explorer. Затем вы открываете приложение Internet Explorer, установив для свойства Visible этой объектной переменной значение True (Истина). Далее вы заг- ружаете документ HTML в браузер с помощью функции Navigate, указав правильный адрес URL или локальный путь в качестве аргумента. Вот как это выглядит в программном коде: Set Explorer = New SHDocVw.lnternet Explorer Explorer.Visible = True Explorer. Navigate “http://www.microsoft.com/" В этом примере я создаю объектную переменную с именем Explorer, пред- ставляющую класс InternetExpiorer в объектной библиотеке shdocvw.dll. Если вы хотите использовать эту объектную переменную в каждой про- цедуре обработки события в вашей форме, вы должны объявить ее как глобальную переменную с помощью ключевого слова Public в стандартном модуле или в разделе объявлений Declarations вашей формы. Чтобы увидеть, как объект Internet Explorer работает в программе, запусти- те демонстрационную программу ShowHTML, созданную мною для этого урока. В программе ShowHTML для представления пользователю перечня его любимых Web-сайтов используется поле со списком, а для отображе- ния выбранного пользователем документа HTML применяется функция Navigate Internet Explorer. Запустим программу ShowHTML 1. Откройте проект ShowHTML.vbp, который содержится в папке \Vb6Sbs\Less20. ► 2. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. Ваша форма будет выглядеть следующим образом: iai. Показать HTML документ Введите URL для существующего HTML документа и нажмите на кнопку Показать HTML л.........-.....г,-...................'.............-...z
Урок 20. Отображение документов HTML с помощью Internet Explorer 591 3. Щелкните на направленной вниз стрелке в поле со списком формы, чтобы отобразить перечень любимых Web-сайтов про- граммистов на Visual Basic. Вы увидите следующий список указателей URL: Показать HI Ml документ Введите URL дяя существующего HTML документа и нажмите на кнопку ПсказатьНТМЕ jhftgT/WW^njCrosoftXOmJ hup: Z/www. Microsoft, com/ http //mispress microsoft сот/ http //www microsoft com/vbasic/ http.//www windx.com http.//www apexsc com/vb/ Как вы могли заметить в ходе работы с вашим браузером Internet, поле со списком может стать удобным средством для предоставления пользователю информации об URL. В моих Web-приложениях я обычно даю возможность пользователю выбирать из списка в пять или шесть URL-указателей, а так- же возможность добавлять в список новые адреса после посе- щения других сайтов. Приведенные мною адреса Internet да- дут вам возможность связаться с несколькими сайтами, которые, по моему мнению, представляют интерес для програм- мистов на Visual Basic. Вы можете свободно ими воспользовать- ся, но имейте в виду, что через год или два некоторые URL мо- гут измениться. (Это происходит достаточно часто.) В следующей таблице приведен список Web-сайтов, присут- ствующих в программе: Internet-адрес Описание http://www.microsoft.com/ Домашняя страница корпорации Microsoft http://www.mspress. rnicrosoft.com/ Домашняя страница Microsoft Press (имеются гиперссылки на книги по Visual Basic) http://msdn.microsoft.com/vbasic/ Домашняя страница Microsoft для про- граммирования на Visual Basic
592 Часть 6. Основы программирования приложений для работы с Internet Internet-адрес Описание http://www.windx.com/ Ресурсы Fawcette Publication для про- граммирования на Visual Basic http://www.apexsc.com/vb/ Домашняя страница для программиро- вания на Visual Basic (не сайт) 4. Щелкните на строке с адресом домашней страницы Microsoft для программирования на Visual Basic (http://msdn.microsoft.com/ vbasic/) в списке. 5. Щелкните на кнопке Показать HTML. Visual Basic откроет Internet Explorer и загрузит в браузер адрес URL Microsoft Visual Basic. Если вы в настоящий момент не подключены к сети, Internet Explorer запросит ваш идентификационный номер (ID) у поставщика услуг Internet (ISP) и пароль, которые вы долж- ны ввести в текстовое поле открывшегося диалогового окна, после чего соединит вас с Internet. (Если вы подсоединены к Internet через корпоративную сеть, процедура подключения может быть несколько иной.) Через некоторое время вы увиди- те домашнюю страницу Microsoft Visual Basic, которая будет выглядеть подобно представленной на рисунке. (Ваш документ HTML будет содержать более свежую информацию.) Microsoft Visual Basic Home Paqe Miciosofl * j File До Favorites Help L 11J G ' 3 A О i ] Address //msdn. microsoft.com/vbasic/ i Links $5JBesi ofthe Web gjChannel Guide gJFree Email with HotMail g] Internet Start gj Microsoft g_'> Visual Basic Home | Events & Training | Product Support | MSDN Online | Developer Products + Product Information !±; Technical Resources fe Samples & Downloads i.t; News & Reviews Registration Visual Basic 6.0 wins Datamation*» 1999 Product of the Year Award afflr According to Datamation, Visual Basic 6.0 "has ДММИд been dramatically enhanced for Web-oriented 1 МИ*****7 and server-side applications through support for dynamic HTML and middle-tier testing and ( deployment." Visual Important information Now Online; Keynote'. J Basic News for Visual Studio 6.0 from VBITS 99 San ▼ |: <1 1 2J 0] i Г internet zone - .
Урок 20. Отображение документов HTML с помощью Internet Explorer 593 6. Разверните окно Internet Explorer во весь экран, а затем щел- кните на какой-либо из заинтересовавших вас связей. Домашняя страница программирования на Visual Basic предо- ставляет отличную возможность для знакомства с последними новостями о средствах программирования, она позволяет уз- навать о конференциях, книгах, получать советы и другую по- лезную информацию относительно Visual Basic. 7. Закончив просмотр страницы, закройте окно Internet Explorer. Если появится запрос, хотите ли вы разорвать соеди- нение с Internet, щелкните на кнопке No (Нет). 8. Снова отобразите форму ShowHTML. Программа ShowHTML по-прежнему работает, хотя на этот мо- мент у вас может быть открыто несколько других приложений. Если вы не видите окно ShowHTML, нажмите клавиши | Al 11 +1 Tab |. В списке открытых в данный момент приложений, щелкните на Показать HTML документ, чтобы вывести приложе- ния на передний план. 9. Выберите другой Web-сайт из списка, а затем щелкните на кнопке Показать HTML, чтобы открыть его. После того, как вы познакомились с выбранными мною сайта- ми, откройте с помощью этой программы ваши собственные любимые сайты. 10. Поместите курсор в поле со списком формы ShowHTML, уда- лите текущий адрес URL и введите URL по вашему собствен- ному выбору. Затем щелкните на кнопке Показать HTML. Помимо этого, вы можете при желании использовать эту про- грамму для отображения документов HTML, имеющихся на вашем жестком диске. 11. После того, как вы отобразите три или четыре документа HTML, щелкните на кнопке Close (Закрыть) в строке заголовка окна программы ShowHTML, а затем закройте каждое из откры- тых окон Internet Explorer в панели задач. Теперь рассмотрим программный код приложения ShowHTML, чтобы вы- яснить, как используется объект Internet Explorer.
594 Часть 6. Основы программирования приложений для работы с Internet Рассмотрим исходный текст программы ShowHTML, обеспечивающий работу Internet Explorer 1. Откройте раздел объявлений Declarations формы в окне Code (Код). Вы увидите следующий программный код: 'Объявление переменной для хранения текущего адреса URL Public Explorer As SHDocVw.InternetExplorer Программа ShowHTML начинается с объявления глобальной объектной переменной с именем Explorer, которая будет ис- пользоваться для связи программы с объектной библиотекой Internet Explorer. Объявление ссылается на класс InternetExplorer в файле shdocvw.dll, который должен быть включен в ваш про- ект с помощью команды References (Ссылки) меню Project (Про- ект). Explorer — это глобальная переменная. 2. Откройте процедуру обработки события Command1_Click в окне Code (Код). Вы увидите следующий программный код: Private Sub Command1_Click() On Error GoTo Errorhandler Set Explorer = New SHDocVw.lnternetExplorer Explorer.Visible = True Explorer.Navigate ComboUext Exit Sub errorhandler: MsgBox "Ошибка отображения файла",, Err.Description End Sub Процедура обработки события запускается, когда пользователь щелкает на кнопке Показать HTML. Это событие означает, что пользователя либо устраивает предлагаемый по умолчанию адрес (http://www.microsoft.com/) и он хочет отобразить эту стра- ницу, либо что он хочет задать другой документ HTML в поле со списком для его дальнейшего отображения программой. Со- ответственно, процедура обработки события с помощью обра- ботчика ошибок контролирует возникновение непредвиденных ошибок при соединении, а затем создает новый объект Internet
Урок 20. Отображение документов HTML с помощью Internet Explorer 595 Explorer. Далее, она делает видимым окно Internet Explorer и откры- вает документ в браузере в зависимости от сделанного пользо- вателем выбора в поле со списком (данное значение в этот мо- мент содержится в свойстве Text объекта типа поле со списком). С этого момента приложение ShowHTML работает в фоновом ре- жиме на заднем плане, а внимание пользователя переносится на открывшееся окно Internet Explorer, которое управляет соеди- нением с Internet (если необходимо) и дает возможность пользо- вателю просматривать избранные Web-сайты, а также осуще- ствлять переходы по гиперсвязям, представленным на странице. 3. Откройте процедуру обработки событий Form_Load в окне Code (Код). Вы увидите следующий программный код: Private Sub Form_Load() 'Добавление нескольких полезных Web-сайтов в поле со списком при запуске 'Домашняя страница Microsoft Corp. Combol .Additem http://www.microsoft.com/ 'Домашняя страница Microsoft Press Combol .Additem http.7/www.mspress.microsoft.com/ 'Домашняя страница для программирования на Visual Basic Combol .Additem http://www.microsoft.com/vbasic/ 'Ресурсы программирования на Visual Basic от Fawcette Publication Combol .Additem http://www.windx.com 'Домашняя страница для программирования на Visual Basic (не Microsoft) Combol .Additem http://www.apexsc.com/vb/ End Sub Когда загружается программа ShowHTM L, пользователь автома- тически получает возможность доступа к нескольким «попу- лярным» Web-сайтам. Соответствующие URL-адреса пред- ставлены в поле со списком, элементы которого изначально задаются в процедуре обработки события Form_Load с помощью функции Additem. Вы можете свободно, добавить ваши собствен- ные любимые адреса URL в список, включив в текст процеду- ры, дополнительные операторы Additem — объект типа поле со списком имеет полосы прокрутки, которыми можно восполь- зоваться в случае большого количества элементов для поиска нужной вам строки.
596 Часть 6. Основы программирования приложений для работы с Internet Шаг вперед: реакция на события Internet Explorer В этом уроке вы манипулировали свойствами и функциями объекта Internet Explorer для отображения в окне документов HTML. Вы также можете рас- ширить рамки контроля за действиями при просмотре файлов путем ре- агирования на события, имеющие место для объекта Internet Explorer. Как вы знаете из предыдущих уроков, каждое средство управления Visual Basic способно порождать изменения состояния, или события, в ходе выполнения операций. Эти события могут быть самыми различными, от простого перемещения мыши для средства управления окном с изобра- жением ImageBox (событие Drag) до уведомления о завершении операции загрузки (событие Response Complete для средства управления Internet Transfer). Объект Internet также порождает события, на которые вы може- те программно отреагировать с помощью процедур обработки событий. К этим событиям относятся NavigateComplete2, DownloadBegin, DownloadComplete, TitleChange, DocumentComplete и OnQuit. Если вы хотите использовать события Internet Explorer в вашей програм- ме, вам, прежде всего, надо модифицировать в тексте программы опера- тор, который объявляет переменную объекта Internet Explorer. События, порождаемые внешними компонентами ActiveX, не появляются автомати- чески в ниспадающем списке Object (Объект) окна Code (Код). Тем не ме- нее, вы можете включить эти события с использованием ключевого слова WithEvents при написании объявления вашего объекта. В программе ShowHTML, которую вы использовали в этом уроке, следует откорректи- ровать раздел объявлений следующим образом: 'Объявление переменной для текущего адреса URL Public WithEvents Explorer As SHDocVw.lnternetExplorer Ключевое слово WithEvents добавляет события в окно Code (Код). После того, как вы используете ключевое слово WithEvents, объект Explorer автоматически появляется в ниспадающем списке Object (Объект) в окне Code (Код). Если вы выделите объект Explorer, его события появятся в нис- падающем списке Procedure (Процедура). Вы можете затем выбрать каж- дое из событий, которым вы хотите управлять и сформировать для него процедуру обработки события. Посмотрим, как это делается для програм- мы ShowHTML.
Урок 20. Отображение документов HTML с помощью Internet Explorer 597 Использование события NavigateComplete2 В этом упражнении вы напишете процедуру обработки события, которая добавляет адрес URL текущего Web-сайта Internet Explorer в объект типа поле со списком в программе ShowHTML. 1. Сохраните форму ShowHTML под именем MyHtmlHist.frm и сохраните проект ShowHTML под именем MyHtmlHist.vbp. 2. Отобразите окно Code (Код) и перейдите к разделу объявле- ний Declarations программы, который находится в начале текста программы. 3. Добавьте ключевое слово WithEvents в объявление объекта Internet Explorer после слова Public. Ваше объявление объекта будет выглядеть следующим обра- зом: Public WithEvents Explorer As SHDocVw.lnternetExplorer 4. Щелкните на поле с ниспадающим списком Object (Объект) в окне Code (Код), затем щелкните на объекте Explorer. 5. Щелкните на поле с ниспадающим списком Procedure (Проце- дура) в окне Code (Код), затем щелкните на событии NavigateComplete2. В окне Code (Код) появятся параметры для процедуры обработ- ки события Explorer_l\lavigateComplete2. 6. Введите в текст процедуры обработки события следующий оператор: Combol .Additem Explorer.LocationUrl Исходный текст вашей процедуры будет выглядеть следующим образом: Private Sub Explorer_l\lavigateComplete2 (ByVai pDisp_ As Object, URL As Variant) Combol.Additem Explorer.LocationUrl End Sub Законченный проект HtmIHist.vbp вы также можете найти в папке \Vb6Sbs\Less20 на диске. Событие l\lavigateComрIete2 имеет место, когда объект Internet Explorer успешно осуществил загрузку указанного документа в
598 Часть 6. Основы программирования приложений для работы с Internet браузер. Это событие происходит, только когда документ заг- ружен успешно - неправильное задание Web-страницы или адреса URL не приводят к его наступлению. В результате, кон- троль события NavigateComplete? является весьма полезным спо- собом отследить последние загруженные Web-документы. Если вы воспользуетесь свойством LocationURL объекта Explorer, то сможете создать собственный журнал документов HTML, ко- торые вы загружали. В этом примере я просто добавляю адрес URL документа в поле со списком формы, чтобы вы могли по- вторно посетить сайт путем простого щелчка мышью. Наряду с этим вы также можете сохранять эту информацию на диске, записывая URL в файл или базу данных. 7. Щелкните на кнопке Save (Сохранить) на панели инструмен- тов, чтобы сохранить внесенные вами изменения. 8. Щелкните на кнопке Start (Пуск) на панели инструментов для запуска программы. 9. Щелкните на одном из Web-сайтов в поле со списком, затем щелкните на кнопке Показать HTML. 10. После установки соединения щелкните на какой-либо ги- персвязи сайта для перехода к новому URL. 11. Щелкните на значке Показать HTML документ на панели ин- струментов, затем щелкните на поле со списком. В нижней части списка появятся новые сайты, которые вы по- сетили, как представлено на следующем рисунке: Введите URL для существующего HTML документа и нажмите на кнопке Покавать HTML ЕЛЗИШЕЗЕЕЗ!! http: //www. microsoft. corn/ http: //mspress. microsoft.com/ http: //wwh. microsoft. com/vbasic/ http://www.Vsiindx.com http: //www. apexsc. com/vb/ http: //www. microsoft. com/ http://www. microsoft. com/ms. htm http://home.microsoft.com/exptoring/exploring.asp Поэкспериментируйте с событием NavigateComplete?, посетив еще несколько Web-сайтов и добавляя их в поле со списком.
Урок 20. Отображение документов HTML с помощью Internet Explorer 599 12. Закончив работу, закройте открытые окна Internet Explorer. Затем щелкните на кнопке Close (Закрыть) в строке заголовка окна приложения HtmIHist. В этом уроке вы завершили работу с HTML. Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 21. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). (Вы сохраните внесенные изменения в со- зданный вами проект MyHtmIHist.) Краткое содержание Чтобы Сделайте следующее Добавить ссылку на объектную биб- лиотеку Internet Explorer в вашу программу В меню Project (Проект) щелкните на команде References (Ссылки) и установите флажок слева от строки Microsoft Internet Controls (shdocvw.dll). Исследовать объектную модель Internet Explorer Щелкните на кнопке Object Browser (Просмотр объек- тов) в панели инструментов, чтобы открыть окно Object Browser (Просмотр объекта), выберите библио- теку SHDocVw в ниспадающем списке Project/Library (Проект/Библиотека), выделите класс InternetExpiorer и щелкните на отдельных элементах класса, чтобы получить более подробную информацию о синтак- сисе для каждого свойства, функции и события. Запустить Internet Explorer из вашей программы Объявите объектную переменную с типом SHDocVw и установите для свойства Visible значение True (Ис- тина). Например: Set Explorer = New SHDocVw.lnternetExplorer Explorer. Visible = True Отобразить Web-сайт с помощью объекта Internet Explorer Используйте функцию Navigate. Например: Explorer.Navigate http://www.microsoft.com/
600 Часть 6. Основы программирования приложений для работы с Internet Чтобы Сделайте следующее Получить доступ к внешнему объекту (например, Internet Explorer) Объявите ваш объект с использованием ключевого слова WithEvents. Например: Public WithEvents Explorer As SHDocVw.lnternetExplorer
УРОК » ё§ £§ £§ ё§ §2 £3 S3 £§ £3 & S3 ёЗ ёЗ ёЗ £ё ёЗ £3 ёЗ £ё ёЗ Урок рассчитан па 40 минут £ё ёЗ £ё ёЗ ЙЙ £ё Й? ёЗ £ё & Создание страниц с динамическими гипертекстовыми связями Dynamic HTML Вы научитесь: программировать страницы Dynamic HTML; создавать Web-страницы с помощью средства DHTML Page Designer; добавлять в ваш документ эффекты форматирования текста, атрибуты ID и SPAN-теги; вставлять гиперсвязи для открытия дополнительных HTML-страниц; создавать средства поддержки HTML-страниц в Microsoft Word 97. Из урока 20 вы узнали об основных принципах организации HTML и о способах отображения документов HTML в при- ложениях Microsoft Visual Basic с помощью объекта Microsoft Internet Explorer. В этом уроке вы узнаете, как раз- рабатывать ваши собственные HTML-приложения с помо-
602 Часть б. Основы программирования приложений для работы с Internet щью средства DHTML Page Designer, входящего в состав профессиональной версии Microsoft Visual Basic Professional Edition. Язык построения (markup) динамического гипертекста (Dynamic hypertext markup language - DHTML) - это сложная технология для Internet, основанная на спецификации компонентной объектной модели Microsoft (component object model - COM) и документах, разработанных консорциумом Word Wide Web. Хотя полное описание DHTML не является задачей данной книги, вам следует представлять, что средство DHTML Page Designer позволяет создавать Web-приложения даже в том случае, если у вас прак- тически нет опыта в программировании для Internet или в разработке Web-страниц. Основные принципы языка динамического построения гипертекста Dynamic HTML Технология Dynamic HTML включена Microsoft в версии Internet Explorer 4.01 и выше. С помощью DHTML вы можете создавать HTML-приложе- ния, в которых используется Internet Explorer для отображения пользо- вательского интерфейса Web-приложений, и обрабатывать многие зап- росы, традиционно обслуживаемые Internet-сервером. Создаваемые вами приложения хранятся в виде файлов HTML и библиотек динамических связей (DLL) на «стороне клиента» в соединении Internet или Intranet. Другими словами, технология DHTML дает вам возможность строить Web-приложения, обеспечивающие доступ к Internet-серверу, но физи- чески находящихся на Компьютере пользователя. Этот распределенный «динамический» подход делает DHTML-программы более гибкими, чем традиционные Web-приложения, находящиеся на сервере, поскольку DHTML-программы могут не обращаться для информации, хранения дан- ных и обработки запросов к удаленному компьютеру. В DHTML-прило- жениях локальный браузер выполняет многие рутинные задачи обработки информации, изменяет разметку страниц и выполняет программы вне DHTML-страниц без обращения к серверу для обновления данных. Это позволяет повысить скорость работы приложения, сократить время заг- рузки с Web-сервера и (во многих случаях) дает возможность пользова- телям работать с уже загруженными данными из Internet или Intranet в автономном режиме. Средство DHTML Page Designer помогает вам создавать Web-приложения.
Урок 21. Создание страниц с динамическими гипертекстовыми связям 603 В профессиональную версию Visual Basic 6 включено специальное сред- ство редактирования DHTML Page Designer, которое позволяет вам ин- тегрировать возможности Dynamic HTML в ваши приложения на Visual Basic. С помощью средства DHTML Page Designer (Конструктор DHTML-стра- ниц) вы можете придавать имеющимся HTML-страницам динамические свойства, характерные для DHTML. Как язык программирования DHTML представляет собой расширение для версии Microsoft Visual Basic Scripting Edition, предназначенное для раз- работки Internet-приложений, но он имеет много общего и с тем языком Visual Basic, который вы изучаете в данной книге. Язык DHTML не явля- ется полностью совместимым с Visual Basic, поскольку он должен оста- ваться совместимым с более ранними стандартами HTML, особенно с объектной моделью, используемой в ранних версиях Internet Explorer. В результате определенные средства управления, свойства, функции, со- бытия и ключевые слова Visual Basic не поддерживаются языком Dynamic HTML. В уроках 21 и 22 вы рассмотрите некоторые из этих важных раз- личий. Вы также научитесь применять навыки работы с Visual Basic в Internet-приложениях. Хотя Dynamic HTML является новым для вас ви- дом языка программирования, средство DHTML Page Designer позволяет сгла- дить ряд затруднений, связанных с необходимостью ориентироваться в особенностях языка DHTML, представляя концепцию HTML в виде зна- комой объектной модели и традиционной среды разработчика Visual Basic. Новый принцип программирования В чем заключаются основные различия между программированием на Visual Basic ина DHTML? Прежде всего, в DHTML используется несколь- ко иной принцип программирования, чем в Visual Basic. В Visual Basic в качестве первичного элемента пользовательского интерфейса использу- ются формы, в то время как в DHTML информация предоставляется пользователю посредством одной или более HTML-страниц с соответству- ющим программным кодом поддержки. Вы можете создавать эти страни- цы в отдельном редакторе HTML (таком как Microsoft Word или Microsoft FrontPage), либо вы можете создавать их с помощью специального сред- ства DHTML Page Designer, входящего в Visual Basic. Другое различие связа- но с отличием используемых двумя языками расширений файлов: HTML- страницы хранятся в виде файлов с расширением - .htm, а формы Visual Basic хранятся в виде файлов с расширением - .frm.
604 Часть 6. Основы программирования приложений для работы с Internet Разработка DHTML-программ Шаг за шагом Поскольку средство DHTML Page Designer запускается в программном окружении Visual Basic, процесс разработки DHTML-программ очень похож на процесс создания традиционных приложений Visual Basic. Ниже приведена необходимая последовательность действий. 1. Запустите Visual Basic и откройте новый проект DHTML Application (Приложение DHTML). 2. В окне Project (Проект) откройте папку Designers, щелкните на элементе DНТМLРаде 1, а затем щелкните на кнопке View Object (Просмотр объекта). 3. Измените размеры окна проекта DHTML, чтобы оно могло вместить вашу Web-страницу целиком. 4. Добавьте на вашу Web-страницу текст, элементы панели инструментов DHTML и средства управления ActiveX по свое- му усмотрению. 5. Отформатируйте текст с помощью инструментов форма- тирования и присвойте ID-теги к текстовым элементам, для которых вы хотите установить ссылки на программный код. 6. Напишите процедуры обработки событий для всех элемен- тов интерфейса пользователя, которые этого требуют. 7. Добавьте дополнительные Web-страницы в проект с помо- щью команды Add DHTML Page (Добавить DHTML-страницу) из меню Project (Проект), а затем добавьте текст, средства управ- ления и процедуры обработки событий, как описано в пунк- тах с 4 по 6. 8. Сохраните проект с помощью команды Save As (Сохранить как) из меню File (Файл). 9. Запустите проект, щелкнув на кнопке Start (Пуск) в панели инструментов Visual Basic, и проверьте работу каждого из элементов в вашем приложении. (Для запуска программы не- обходимо, чтобы в вашей системе был установлен Internet Explorer версии 4.01 или выше.)
Урок 21. Создание страниц с динамическими гипертекстовыми связям 605 10. Если вы собираетесь распространять созданное вами при- I ложение, откомпилируйте проект с помощью команды I MakeDHTMLProject.dll изменю File (Файл). Затем отобразите ваше I приложение, запустив мастер Package And Deployment Wizard, ко- | торый содержится в папке Visual Studio 6.0 Tools в стартовом I меню Windows. I На НТML-странице программируемые средства управления называют- ся «элементами». Подобно форме, страница HTML может содержать текст, графические изображения, кнопки, поля со списком, средства управления ActiveX и дру- гие объекты, предназначенные для обработки входных и отображения выходных данных. Тем не менее, базовый набор средств управления, ко- торый вы используете для создания HTML-страницы, не совпадает с теми, которые представлены в панели инструментов Visual Basic 6. Вместо этого в DHTML Page Designer имеется панель инструментов, содер- жащая несколько отличные программируемые объекты, называемые эле- ментами, которые выполняют в пользовательском интерфейсе задачи в соответствии с правилами, содержащимися в спецификации HTML. Каж- дому из этих элементов присущи собственные уникальные функции, свой- ства и события, которые отличаются от тех, которые вы использовали для объектов Visual Basic. К примеру, хотя элемент DHTML Button выглядит и работает очень похожим образом со средством управления CommandButton Visual Basic, щелчок мышью на кнопке при этом инициирует процедуру обработки события Button"!_onclick, а не процедуру обработки события Command1_Click. В уроке 22 мы подробно расскажем о добавлении элемен- тов DHTML и процедур обработки событий в ваше Web-приложение. Знакомство с конструктором страниц DHTML Page Designer Лучший способ научиться создавать приложения Dynamic HTML состо- ит в том, чтобы практически освоить использование средства DHTML Page Designer. В этом разделе вы откроете средство Page Designer в Visual Basic и создадите HTML-страницу с форматированным текстом, который по- служит основой для вашего Internet-приложения. Программа, которую вы создадите, представляет собой HTML-версию программы игрового автомата Счастливая семерка из уроков 2 и 10, работающую под управлени- ем Internet Explorer. (Проект будет называться WebLucky.vbp.) В этом уро-
606 Часть б. Основы программирования приложений для работы с Internet ке вы добавите текст и коды форматирования в HTML-приложение, а в уроке 22 добавите средства управления из панели инструментов и про- цедуры обработки событий. Откроем новое DHTML-приложение Проделайте следующие действия, чтобы запустить Visual Basic и открыть новое DHTML-приложение в окне DHTML Page Designer. 1. Запустите Visual Basic. 2. В меню New Project (Создать проект) щелкните на значке DHTML Application и щелкните на кнопке Open (Открыть). Если вы исполь- зуете для открытия нового проекта значок DHTML Application, Visual Basic загружает средство DHTML Page Designer и конфигу- рирует компилятор для создания библиотеки динамических связей (.dll) ActiveX. Файл .dll ActiveX обеспечивает объекты и вы- числительные ресурсы HTML-странице, поддерживающей команды Dynamic HTML. (В этом файле .dll хранится ваш про- граммный код на Visual Basic.) После открытия средства Раде Designer ваш экран будет выглядеть следующим образом:
Урок 21. Создание страниц с динамическими гипертекстовыми связям 607 'Ш 3. Откройте папку Designers в окне Project (Проект). В папке Designers появится используемая по умолчанию в про- екте HTML-страница (DHTMLPagel). Конструктор (designer) — это индивидуальная HTML-страница, которая содержит текст, средства управления и другие элементы пользовательского интерфейса вашего приложения. (В терминологии Microsoft конструктор является специальным инструментом, который создает часть вашего приложения на Visual Basic. В этой книге вы будете использовать конструкторы для создания DHTML- приложений и объектов данных ActiveX.) Если вы хотите вклю- чить в ваше приложение более одной HTML-страницы, то мо- жете добавить в папку Designers дополнительные конструкторы с помощью команды Add DHTM L Page (Добавить DHTML-страни- цу) из меню Project (Проект). 4. Щелкните на имени DHTMLPagel в папке Designers, а затем щел- кните на кнопке View Object (Просмотр объекта) в окне Project (Проект). Visual Basic отобразит конструктор DHTML Page Designer в про- граммном окружении. Поскольку окно Page Designer при откры- тии не развернуто во весь экран (по умолчанию), вам нужно уве- личить его размеры и соответственно уменьшить пространство, занимаемое окнами Project (Проект), Properties (Свойства) и Form Layout (Макет формы). 5. Установите указатель мыши на левую границу окна Project (Проект), чтобы он принял вид размерного маркера, а затем перетащите границу окна вправо, чтобы уменьшить занимае- мое окном пространство в программной среде Visual Basic. Теперь вы увеличите окно конструктора страниц DHTML Page Designer. 6. Установите указатель мыши в верхний правый угол окна Раде Designer. Как только указатель примет вид размерного маркера, увеличьте окно Page Designer, чтобы оно выглядело, подобно пред- ставленному на следующем рисунке:
608 Часть б. Основы программирования приложений для работы с Internet 7. Обратите внимание на основные инструменты редактирова- ния в окне конструктора страницы Page Designer. В правой панели окна конструктора страниц Page Designer ото- бражается используемая по умолчанию, страница DHTMLPagel. (Сейчас эта страница чистая.) В левой панели окна - дерево для описания HTML-кода в вашем документе. По мере добавления текста, средств управления и эффектов форматирования в вашу HTML-страницу, выбранные вами стили и инструменты вы можете увидеть в иерархической структуре, представлен- ной на этой панели. Помимо двух панелей, в окне конструктора страниц Page Designer имеется панель инструментов форматирования, включающая в себя кнопки для форматирования, позиционирования и ре- дактирования элементов на вашей HTML-странице. В этом уроке вы используете некоторые из этих кнопок. В левой части окна Page Designer имеется панель инструментов, содержащая средства управления DHTML, которые вы можете в качестве
Урок 21. Создание страниц с динамическими гипертекстовыми связям 609 программируемых элементов добавлять в ваши HTML-стра- ницы. В дополнение к этим средствам управления DHTML, вы также можете добавлять средства управления ActiveX, включая знакомые вам по предыдущим урокам средства. Теперь вы готовы к тому, чтобы добавить текст в вашу первую HTML- страницу. Добавление текста в HTML-страницу Хотя средства управления и специальные эффекты форматирования ча- сто придают привлекательность HTML-страницам и делают их исполь- зование более удобным, в основе хорошо разработанных HTML-прило- жений обычно лежит информативный текстовый интерфейс. Сейчас вы добавите текстовые элементы для программы Счастливая семерка в HTML- страницу, отображаемую в правой панели окна конструктора страниц Раде Designer. 1. Щелкните на странице HTML (в правой части окна Page Designer). В верхней части HTML-страницы появится мигающий курсор, а в левой панели окна Page Designer появится дерево-диаграмма вашего документа. 2. Введите в HTML-страницу следующий текст, следуя инст- рукциям в [скобках], чтобы добиться необходимых пропусков: Счастливая семерка [Enter][Enter][Enter] 0 [Space][Space][Space] 0 [Space][Space][Space] 0 [Enter] Побед: [Enter] О счастливой семерке Каждая инструкция [Enter] соответствует нажатию клавиши | Enter |. Каждая инструкция [Space] соответствует нажатию клавиши [~Spacebar~|. По завершении ваша HTML-страница будет выглядеть подобно представленной на рисунке. I Примечание. I I При использовании средства Page Designer Visual Basic вам нет необхо- I I димости знать специальные теги форматирования HTML. Тем не ме- I I нее, вы увидите теги HTML в левой панели. Отображаемая там иерар- I I хическая структура в виде дерева дает вам возможность лучше I I представлять, как организован ваш документ. I
610 Часть 6. Основы программирования приложений для работы с Internet Si DHTMLPtojecl - DHTMLPage! (DHTMLPageJ йЦHoimal Д;|[Noimal) j[Noiirialj j |з | В Z U i Ж ! i'g/ ; 3 й[~0 ocument ? ~-7], .+, J) BODY Счастливая гемврка Счастливая семерка ’ ООО Побед: О счастливой семерке] Обратите внимание, что тег BODY в левой панели несет инфор- мацию о начальном содержимом HTML-страницы, над которой вы работаете. В языке HTML тег BODY содержит инструкции, которые управляют основами графического представления и поведением содержимого на Web-странице. Форматирование текста в конструкторе страниц Page Designer В языке DHTML стили заменили индивидуальные теги форматирова- ния, изначально используемые в языке HTML для форматирования от- дельных элементов текста на Web-странице. (Теги форматирования HTML по-прежнему существуют, но конструктор страниц Page Designer скрывает их в файле с расширением .dsx вашего проекта.) Стиль - это набор свойств, которые управляют внешним обликом элементов в доку- менте DHTML. Стили могут быть применены как к отдельному элементу, так и к группе элементов. Помимо этого, вы можете применять к каждому элементу на странице множество стилей (например, стиль заголовка или стиль гиперсвязи).
Урок 21. Создание страниц с динамическими гипертекстовыми связям 611 Сейчас вы отформатируете текст, введенный вами ранее в приложении Счастливая семерка с помощью стилей форматирования из панели инстру- ментов окна конструктора страниц Page Designer. 1. Выделите текст «Счастливая семерка» в верхней части HTML-страницы. Прежде чем вы сможете изменить стиль текста в окне конст- руктора страниц Page Designer, вам необходимо его выделить. 2. Щелкните на поле с ниспадающим списком Style (Стиль) в верхнем левом углу окна конструктора страниц Page Designer и укажите на стиль Heading 1. Ваш экран будет выглядеть, как на представленном ниже ри- сунке: 3. Щелкните на стиле Headingl для форматирования текста «Сча- стливая семерка» в стиле заголовка Headingl. Конструктор страниц Page Designer применит стиль заголовка Headingl к тексту, который будет увеличен и примет следую- щий вид:
612 Часть 6. Основы программирования приложений для работы с Internet X DHTMLProject DHTMLPaget (DHTMLPage) '3||Normall Y]|lNorni; 1S »3' 3F3i в 1 и P(I P (0 0 0) P (Побед:) P (0 счастливой семе|( Н1 (Счастливая семе£ ^Document d В 1,§1 BODY(Счастливая ..... г- fif Ж £ -fT &-Н1 Счастливая семерка о |о о Побед: О счастливой семерке Примечание. Стили конструктора страниц Page Designer аналогичны стилям, исполы зуемым в Microsoft Word и других текстовых процессорах. Теперь попробуем использовать еще несколько стилей для ва- шей HTML-страницы. 4. В левой панели с изображением структуры в виде дерева щелкните на первом пустом абзаце - Р() - в документе и от- форматируйте его с использованием стиля Heading?. (Если вы не увидите тег Р(), щелкните на знаке плюс рядом с элементом BODY в структуре, а затем выделите первый тег Р() и отформа- тируйте его с использованием стиля Heading?. Помимо выделения текста на HTML-странице вы также можете выделять и форматировать отдельные строки в панели струк- туры. После того, как вы щелкните на стиле заголовка Heading?, конструктор страниц Page Designer увеличит размер шрифта. (Однако поскольку строка пустая, видимый эффект проявится лишь в некотором увеличении интервала между строками.)
Урок 21. Создание странице динамическими гипертекстовыми связям 613 5. Щелкните на следующем пустом абзаце Р( ) в документе и отформатируйте его с применением стиля Heading2. Обратите внимание, что при применении стилей форматиро- вания к текстовым элементам в вашем документе конструктор страниц Page Designer идентифицирует выбор формата с помо- щью двухзначных кодов (Hl, Н2 и т.д.) и помещает их в дерево панели со структурой. (Если вы ранее работали с HTML, по- добные теги заголовков будут вам знакомы.) 6. Выделите три нуля в документе (0 0 0) и отформатируйте их с использованием стиля заголовка Headingl. 7. Выделите текст «Побед:» в документе и отформатируйте его с использованием стиля заголовка Headings. 8. Выделите текст «О счастливой семерке» (внизу HTML-стра- ницы) и отформатируйте его с использованием стиля заголов- ка Headings Ваша HTML-страница будет выглядеть подобно представлен- ной на рисунке. $ DHTMLProject - DHTMLPagel (DHTMLPageJ d|lNo.™l) H « H Document H'ljy BODY (Счастливая cer +1 Hl HI (Счастливая re г H2 H2(l i H2 H2 () t hi Hi(oooj = НЗ НЗ (Побед:) ; H4 H4 (0 счастливой ci Счастливая семерка ООО Побед: О счастливой семерке
614 Часть 6. Основы программирования приложений для работы с Internet С помощью стилей форматирования вы можете придавать ва- шим HTML-страницам логически ясный и строго организован- ный вид и воспроизводить его в дальнейшем. I Совет. I I Кроме рассмотренных нами предлагаемых по умолчанию стилей, вы | I можете использовать поля с ниспадающим списком Font Size (Размер I I шрифта) и Font Name (Имя шрифта) в конструкторе задания атрибутов I I шрифта на вашей HTML-странице. Вы также можете пользоваться I I кнопками Bold (Полужирный), Italic (Курсив)и Underline (Подчеркнутый) I I на панели инструментов для корректировки стиля шрифта, и кноп- I I ками Left (По левому краю), Center (По центру) и Right (По правому краю) I I для корректировки выравнивания текста на странице. I Создание SPAN-тегов для разделения отдельных символов Когда вы пишете DHTML-приложение на Visual Basic, обычной вашей задачей является установка значений свойств для изменения отдельных слов или символов на Web-странице. Например, вы хотите обновить чис- ло, отображающее количество посетителей Web-сайта за указанный ме- сяц, либо число, представляющее запасы определенного продукта. Если вам известно, какие слова или символы нужно отделить с помощью опе- раторов Visual Basic при создании вашей HTML-страницы, вы можете использовать конструктор страниц Page Designer для обрамления строки с помощью разъединительных SPAN-тегов. Вы не увидите этих тегов в вашем HTML-документе, но они будут существовать «за кадром» в кон- структоре страниц Page Designer, а также будут отображаться в панели со структурой. Проделайте следующие действия для отделения друг от друга трех ну- лей в приложении Счастливая семерка с помощью SPAN-тегов, чтобы вы могли позднее заменить их случайными числами в процедуре обработки события. 1. Выделите первый «О» в документе и щелкните на кнопке Wrap Selection In SPAN (Обрамление выделенного SPAN-тегами) в па- нели инструментов конструктора страниц Page Designer. Выделить текст вы можете либо с помощью клавиатуры, либо с помощью мыши. (Если символы разделены пробелами, то для их выделения удобнее использовать клавиатуру.)
Урок 21. Создание страниц с динамическими гипертекстовыми связям 615 2. Выделите второй «О» и снова щелкните на кнопке Wrap Selection In SPAN (Обрамление выделенного SPAN-тегами) в панели ин- струментов конструктора страниц Page Designer. 3. Выделите третий «О» и еще раз щелкните на кнопке Wrap Selection In SPAN (Обрамление выделенного SPAN-тегами) в па- нели инструментов конструктора страниц Page Designer. Обратите внимание, что рядом с текстовым тегом в панели со структурой появился знак плюс (+), указывающий на наличие только что созданных вами разделительных SPAN-тегов. 4. Щелкните на знаке плюс в окне со структурой, чтобы ото- бразить SPAN-теги. Вы увидите три индикатора интервальных тегов в структуре форматов. 5 DHTMLProject. DHTMLPagel (DHTMLPagel Л ^!в ту gj -Н1 i- -Н2 i Н2 Й Н1 В "й| Document % й-щ BODY (Счастливая сег Н.1 (Счастливая се Н2|) | Н2() | Н1 (0 0 0) S g SPAN (0) < jg SPAN (0) Счастливая семерка .•••НЗ НЗ (Побед:) ...Н4 Н4 (0 счастливой с 0 0 0 Побед: О счастливой семерке Теперь, когда вы разделили позиции для каждого из случайных чисел в вашем документе, вы можете по отдельности манипулировать ими в тек- сте программы.
616 Часть 6. Основы программирования приложений для работы с Internet I Примечание. I I Кроме разделения элементов в вашей HTML-странице с помощью | I SPAN-тегов, вы также можете связывать вместе абзацы с использо- I I ванием DIV-тегов. DIV-тег очень удобен, если вы хотите отформати- I в ровать несколько элементов одним и тем же стилем за единую опера- | I цию. Поскольку данные, ограниченные DIV-тегами, имеют одинаковые I I атрибуты форматирования, DIV-теги могут стать мощным инструмен- I и том для объединения воедино информации на Web-странице. Кнопка I I на панели инструментов для расстановки DIV-тегов расположена I I рядом с кнопкой SPAN и носит название Wrap Selection In <DIV>...</DIV> I I (Обрамление выделенного DIV-тегами). I Назначение ID-атрибутов в окне Properties (Свойства) В программе на Visual Basic каждый объект в пользовательском интер- фейсе вашего приложения имеет уникальное имя, которое компилятор использует при обработке событий в процессе выполнения программы. К примеру, первый объект типа текстовое поле в форме именуется Textl, второй - Text2 и т.д. В приложении Dynamic HTML каждый элемент на странице также должен иметь уникальное имя, или ID-атрибут, если вы хотите манипулировать им в тексте программы. Каждый из атрибу- тов воспринимается как объектное имя элемента в вашем DHTML-при- ложении. Выполните следующие действия для присвоения ID-атрибутов каждому текстовому элементу на вашей HTML-странице. 1. Щелкните на заголовке Счастливая семерка в панели со струк- турой (тег Н1). 2. Откройте и увеличьте размеры окна Properties (Свойства), если оно не видимо или закрыто другим окном. 3. Щелкните на текстовом поле рядом с элементом ID в окне Properties (Свойства), введите LuckyHead и нажмите клавишу | Enter |. Конструктор страниц Page Designer установит для ID- атрибута выделенного текста значение LuckyHead. Хотя вам нет необходимости программно управлять этим заголовком в дан- ном DHTML-приложении, для получения практических навы- ков программирования вы присвоите имя каждому из исполь- зуемых вами абзацев.
Урок 21. Создание странице динамическими гипертекстовыми связям 617 4. Щелкните на втором заголовке в панели со структурой (пер- вая пустая строка в документе) и измените значение ID-атри- бута на Bianki в окне Properties (Свойства). 5. Щелкните на третьем заголовке в структуре и измените его ID-атрибут на Blank2. 6. Щелкните на четвертом заголовке (который содержит все три цифры) и измените его ID-атрибут на Num. Атрибут Num (как имя группы) применяется ко всем трем цифрам. Однако вы мо- жете также присвоить отдельные ID-атрибуты для текстовых строк, символы которых отделены SPAN-тегами. 7. Щелкните на первом SPAN-номере и назначьте ему ID с име- нем Numl. 8. Щелкните на втором SPAN-номере и назначьте ему ID с име- нем Num2. 9. Щелкните на третьем SPAN-номере и назначьте ему ID с именем Num3. Ю.Щелкните на заголовке Побед и назначьте ему ID с именем Result. Ваша HTML-страница будет выглядеть следующим образом: Ete W*" Tc^s Add-W ’findow Help 181S, 1545 6340 хбШ cumenl l;l<>rik 2 BODY (Счастливая ce 1 1 uckyHead Н1 (Счастлива l;hnk1H2(] Bhnk21H2(] Num H1 (0 0 0) Num1 SPAN (0) g Num2SPAN (0) g* Num3SPAN (0) f I Ctsutt: НЭ (Побед') H4 H4 (0 счастливой семерке] Счастливая семерка 0 0 0 |Побед: О счастливой семерке UCSiyi ICI 5 0OWM.Pagel (ОН .11................J ±1 (ftaperties- Result 4ке5и|Гр|5р1Ш | Categorized |
618 Часть 6. Основы программирования приложений для работы с Internet Последнему заголовку в тексте (О счастливой семерке) сейчас нет необходимости присваивать ID-атрибут, Создание связи с другой HTML-страницей Если в вашем Web-приложении будет более одной HTML-страницы, вам нужно знать о существовании удобного инструмента форматирования, кнопки Make Selection Into Link (Создать связь для выделения) на панели ин- струментов конструктора страниц Page Designer. Кнопка Make Selection Into Link (Создать связь для выделения) форматирует выделенный текст как гиперсвязъ, которая будет загружать новую HTML-страницу в Internet Explorer, чтобы заменить текущую страницу, когда пользователь щел- кает мышью на связи. После форматирования выделенного текста как ги- персвязи вы можете задать необходимое соединение (в виде адреса URL или локального пути) с использованием свойства ссылки текстового эле- мента в окне Properties (Свойства). Выполните следующие действия для форматирования текста «О счаст- ливой семерке» как гиперсвязь: 1. Щелкните на элементе Н4 (О счастливой семерке) в панели со структурой для выделения последнего заголовка на страни- це. Прежде чем вы сможете отформатировать текст на вашей HTML-странице как гиперсвязь, вам необходимо выделить его. 2. Щелкните на кнопке Make Selection Into Link (Создать связь для выделения) на панели инструментов конструктора страниц Раде Designer. Выделенный заголовок в правой панели будет отформатиро- ван как гиперсвязь. 3. Теперь щелкните на другой строке в HTML-документе. Как только курсор перемещается со строки, содержащей ги- персвязь, формат гиперсвязи становится видимым (синий под- черкнутый текст), а в панели со структурой появляется знак плюс (+). 4. Щелкните на знаке плюс в панели со структурой, чтобы уви- деть ID-атрибут для гиперсвязи (Нуреrlink1). 5. Щелкните на теге Hyperlinkl в панели со структурой, чтобы отобразить свойства гиперсвязи в окне Properties (Свойства).
Урок 21. Создание странице динамическими гипертекстовыми связям 619 6. Найдите свойство href в окне Properties (Свойства) и щелкните на текстовом поле справа от свойства. Ваш экран будет иметь следующий вид: f [Heading 4 )ж|[(Но|та[) :j"|Normal) "" * - % DHTMLPioivlI (MHMLIW'I (DIMMIT. IЧ й? DHTMLProject (DHTMtl ocumcnl Blank2 BODY (Счастливая c I uckyHnad HI (Счастлиг r!2 Bianki H2 () ! H2 Blank21 H2 () : HI Num H1 (0 0 0) g Num1 SPAN (0) : В Num2 SPAN (0) g Num3^PAN (0) : H3 Result НЗ (Побед:) • h4 H4 (0 счастливой семерке) i I lyperlinkl A (Q счаст Счастливая семерка iti Designers $0H Ш. ООО Побед: О счастливой семеоке ?| Ну per link 1 DispIHTMLAnch-i AW5«betic|categ-3it»d| ) dataSrc ) hash s host ; hostname '« " jr a А * □ с 7. Введите c:\vb6sbs\less21\lucky.htm в качестве значения для свойства href для гиперсвязи и нажмите клавишу Enter Далее в этом уроке вы создадите документ HTML с именем Lucky.htm (в разделе «Шаг вперед»). Однако конструктор стра- ниц Page Designer Visual Basic сейчас не проверяет, существует документ или нет. (Эта проверка осуществляется в процессе выполнения программы.) Итак, вы создали все текстовые элементы в Web-приложении Счастливая семерка и попрактиковались в форматировании текста, создании SPAN- тегов, назначении ID-атрибутов и создании гиперсвязей. Эти навыки вам пригодятся в будущем при создании ваших собственных DHTML-прило- жений.
620 Часть 6. Основы программирования приложений для работы с Internet Сохраним проект WebLucky Теперь вы сохраните созданный вами проект на диске под именем Му WebLucky .vbp. 1. В меню File (Файл) выберите команду Save Project As (Сохра- нить проект как). 2. Введите MyWebLucky в качестве имени вашего файла про- екта (.vbp). 3. Введите MyWebLucky в качестве имени вашего файла кон- структора (.dsr). Файл конструктора - это особый файл, который содержит вашу HTML-страницу и все присущие ей средства управле- ния и форматирования. 4. Введите MyWebLucky в качестве имени файла вашего про- граммного модуля (.bas). В DHTML-приложении файл .bas содержит функции, которые управляют операциями PutProperty и GetProperty - механизмами для сохранения и получения важных данных на Web-страни- це при переходе браузером от одной страницы к другой. (Более подробно об этих функциях вы узнаете в уроке 22.) Запустим DHTML-приложение Теперь, когда ваше DHTML-приложение успешно сохранено на диске, вы запустите его с помощью Internet Explorer. Примечание. Проект WebLucky.vbp содержится в папке C:\Vb6Sbs\Less21 на диске. Вы можете открыть эту папку, если не создавали приложение MyWebLucky в ходе этого урока, либо если хотите сравнить вашу работу с ориги- нальной версией.
Урок 21. Создание страниц с динамическими гипертекстовыми связям 621 1. Щелкните на кнопке Start (Пуск) в панели инструментов Visual Basic, чтобы запустить программу MyWebLucky (или WebLucky, если вы выбрали загрузку с диска). При первом запуске этого приложения вы можете увидеть ди- алоговое окно Project Properties (Свойства проекта), которое выг- лядит подобно представленному на рисунке: В этом окне содержится запрос, хотите ли вы начать работу вашего приложения с загрузки HTML-формы, созданной вами в конструкторе страниц Page Designer. Нужный вид HTML уже задан, поэтому просто щелкните на кнопке ОК. Visual Basic загрузит Internet Explorer и отобразит ваше DHTML-приложение. В версии 4.01 Internet Explorer ваша про- грамма будет выглядеть так:
622 Часть 6. Основы программирования приложений для работы с Internet n I 'AlN\TEMP\DHTMLProject_DHTMLPage1.html Microsoft Internet Explorer O5Tg jj Address|#J C \WIN\TEMP\DHTMLProiect_DHTMLPage1.html ’ Kinks QBeslof the Web gj Channel Guide fjFree Email wife HotMait Счастливая семерка ООО Побед: О счастливой семерке i lj|f Ир Computer - ia Скорее всего, вы увидите ряд незначительных отличий в спо- собе форматирования, с которым Internet Explorer представ- ляет вашу HTML-страницу. На данный момент ваше приложе- ние готово только наполовину, поэтому вы не сможете взаимодействовать с программой, но зато сможете увидеть, как браузер отображает созданные вами эффекты форматирова- ния и гиперсвязи. I Примечание. ттл- ттт/г тттл’ 1 Обратили ли вы внимание на странное имя пути, которое содержится в текстовом поле Address (Адрес) вашего браузера? Когда Visual Basic осу- ществляет компиляцию вашего DHTML-приложения, он создает вре- менный файл на вашем жестком диске для хранения программы в про- цессе ее работы. Путь, который вы видите, является лишь временным местом хранения, которое Visual Basic использует для этого файла.
Урок 21. Создание страниц с динамическими гипертекстовыми связям 623 2. Щелкните на кнопке Close (Закрыть) в строке заголовка окна Internet Explorer, чтобы закрыть Internet Explorer. Internet Explorer будет закрыт, но ваше приложение по-пре- жнему будет выполняться, поскольку Internet Explorer явля- ется лишь программой для просмотра, но не управляющей про- граммой. 3. Щелкните на кнопке End (Стоп) на панели инструментов Visual Basic, чтобы остановить выполнение DHTML-приложения. Через какое-то время программа закроется, и в программной среде Visual Basic вновь появится окно конструктора страниц Page Designer. Шаг вперед: создание документов HTML Microsoft Word Вы узнали из этого урока, что можете создавать страницы Dynamic HTML в Visual Basic с помощью конструктора страниц DHTML Page Designer и до- кументы HTML с помощью внешнего редактора или текстового процес- сора, а затем вводить эти файлы непосредственно в ваш программный проект. В следующем уроке вы узнаете, что конструктор страниц DHTML Page Designer является чрезвычайно удобным средством, если вы хотите создать сложные эффекты форматирования с помощью средств управ- ления DHTML и средств управления ActiveX, разработанных третьими ли- цами. Однако если вы просто вводите текст в ваш документ HTML, иног- да бывает удобнее предварительно создавать ваши документы HTML во внешнем редакторе, а затем помещать их в ваш проект. В уроке 14 вы уже использовали Microsoft Word 97 для создания эффек- тов Automation (Автоматизация) в ваших приложениях на Visual Basic. Вы также можете использовать Word 97 в качестве редактора документов IITML, не вводя ваш собственный HTML-код (Word 97 делает это авто- матически). Если в вашей системе установлен Word 97, попробуйте ис- пользовать его для создания простого справочного файла Help, который содержит описание работы приложения MyWebLucky. Используем Word для создания справочного файла Lucky.htm 1. Сверните окно программной среды Visual Basic и запустите Microsoft Word 97.
624 Часть 6. Основы программирования приложений для работы с Internet Я запускаю Microsoft Word через стартовое меню Windows, указывая на папку Programs (Программы) и щелкая на значке Microsoft Word 97. 2. Когда Word запустится и появится новый чистый документ, введите следующий текст и отформатируйте его соответству- ющим образом. Игра Счастливая семерка Игра Счастливая семерка является DHTML-приложением, разработанным для книги Microsoft Visual Basic 6.0, профес- сиональная версия, Шаг за шагом, Майклом Хальворсоном (Microsoft Press, ЭКОМ). (Просмотрите этот документ с помо- щью Internet Explorer, версия 4.01 или выше.) Чтобы более подробно узнать, как было создано данное приложение, про- чтите материал уроков 21 и 22 в этой книге. Правила игры: Цель игры: Получить 7 в группе из трех случайных цифр Вероятность выигрыша: По меньшей мере, одна 7 будет появ- ляться примерно в 28 попытках из 100 По окончании ваш документ Word будет выглядеть примерно следующим образом: liyWtocxoff Wmd - Document! Дей Insert Format Xock Т^Ые _ .. .Jgl *1 pJormai V) |frmes New Romai c pl 8 | 4 — I^X.T.1 831 > Игра Счастливая семерка Игра Счастливая семерка является DHTML-приложением, разработанным для книги Microsoft Visual Basic 6.0, профессиональная версия, Шаг за шаззм Майклом Хальворсоном (Microsoft Press, ЭКОМ). (Просмотрите этот документ с помощью Internet Explorer, версия 4.01 или выше.) Чтобы более подробно узнать, как было создано данное приложение, прочтите материал уроков 21 и 22 в этой книге Правила игры: Цель игры: Получить 7 в группе из трех случайных цифр Вероятность выигрыша: По меньшей мере, одна 7 будет появляться примерно в 28 попыткахиз 10С|
Урок 21. Создание страниц с динамическими гипертекстовыми связям 625 Теперь вы сохраните этот документ как HTML-файл, чтобы его можно было отобразить в приложении WebLucky. 3. В меню File (Файл) Word щелкните на команде Save As HTML (Сохранить как HTML). 4. Когда появится диалоговое окно Save As (Сохранение), задай- те папку C:\Vb6Sbs\Less21 и введите MyLucky в качестве имени вашего HTML-файла. Word преобразует файл в формат HTML и сохранит его в пап- ке Less21. Если появится запрос, хотите ли вы продолжить, не сохраняя файл в формате Word 97 (чтобы не потерять эффекты форма- тирования, которые не могут быть преобразованы в формат HTML), или хотите соединиться с Web для загрузки более но- вых версий средств (для автоматизации) Web, то щелкните на кнопке Yes (Да) в первом случае и на кнопке No (Нет) во втором случае. (Вы не использовали каких-либо эффектов формати- рования, которые не могут быть преобразованы, вы также не хотите в данный момент использовать новые средства.) 5. В меню File (Файл) Word щелкните на команде Exit (Выход) для выхода из Word. Теперь вы снова запустите программу WebLucky, чтобы посмот- реть, как она работает с активной гиперсвязью. 6. Распахните окно Visual Basic. Внимание! I Если вы в точности выполняли эти инструкции, вам потребуется пе- | ред запуском программы WebLucky изменить значение свойства href | объекта Hyperlink1 на C:\Vb6Sbs\Less21\MyLucky.htm, чтобы открывался со- зданный вами файл HTML. Я установил для свойства href значение I C:\Vb6Sbs\Less21\Lucky.htm (этот файл вы также можете использовать), поскольку мне хотелось, чтобы вы могли загружать и запускать про- I граммы в этой главе. Однако если у вас возникли проблемы с создани- I ем файла MyLucky.htm, вы также можете воспользоваться файлом I Lucky.htm. 7. Если необходимо, измените значение свойства href для объек- та Hyperlink1, а затем щелкните на кнопке Start (Пуск) в панели ин- струментов Visual Basic, чтобы запустить DHTML-программу.
626 Часть 6. Основы программирования приложений для работы с Internet 8. Когда в Internet Explorer появится страница WebLucky, щелк- ните на гиперсвязи 0 счастливой семерке, чтобы отобразить свя- занную страницу. Через некоторое время вы увидите следующее окно в Internet Explorer: Игра Счастливая семерка - Microsoft Internet Explorer j Favorites Де1р ; QсЭ Л О 3„ Address [F C: WB6SBS\Less21 Mucky him F ‘ j Ник? ^TBestof ths Web ^TCharmel Guide SSJResEiriaifwitliHqtMail g] Internet Start gj Microsoft ffiWint * Игра Счастливая семерка Игра Счастливая семерка является DHTML-приложением, разработанным для книги Microsoft Игй'гл' Basic 6.0, профессиональная версия, Шаг за шагом Майклом Хальворсоном (Microsoft Press, ЭКОМ). (Просмотрите этот документ с помощью Internet Explorer, версия 4.01 или выше.) Чтобы более подробно узнать, как было создано данное приложение, прочтите материал уроков 21 и 22 в этой книге. Правила игры: Цель игры: Получить 7 в группе из трех случайных цифр Вероятность выигрыша: По меньшей мере, одна 7 будет появляться примерно в 28 попытках из 100. Г 1 9. Щелкните на кнопке Back (Назад), чтобы вернуться к HTML- странице WebLucky. Ю.Щелкните на кнопке Close (Закрыть) в строке заголовка окна Internet Explorer. 11. Щелкните на кнопке End (Стоп) на панели инструментов Visual Basic. Возможность использования Microsoft Word (или другого редактора HTML или текстового процессора) часто является весьма полезным до- полнением к конструктору страниц Page Designer в Visual Basic. Если у вас имеется подобная программа, можете воспользоваться ею в процессе раз- работки DHTML-страниц.
Урок 21. Создание странице динамическими гипертекстовыми связям 627 Если вы хотите перейти к следующему уроку: > не выходя из Visual Basic, перейдите к уроку 22. Если вы хотите завершить работу с Visual Basic: > в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание Чтобы Сделайте следующее Создать новое прило- жение DHTML «- Запустите Visual Basic, щелкните на значке DHTML Application в диалоговом окне New Project (Создать проект) и щелкните на кнопке Open (Открыть). Отобразить окно кон- структора страниц DHTML Page Designer Откройте новое или существующее DHTML-при- ложение в Visual Basic, откройте папку Designer в окне Project (Проект), щелкните на DHTML-стра- нице, которую вы хотите открыть, а затем щелк- ните на кнопке View Object (Просмотр объекта). Добавить текст на DHTML-страницу Щелкните на правой панели в окне конструктора страниц Page Designer, чтобы переместить курсор ввода на открытую DHTML-страницу, после чего введите текст с клавиатуры. Отформатировать текст на DHTML- странице Выделите текст, который вы хотите отформати- ровать, а затем щелкните на имени стиля форма- тирования в ниспадающем списке Styles (Стили) в панели инструментов конструктора страниц Раде designer. Создать SPAN-теги, чтобы получить воз- можность индивиду- ального программи- рования символов на DHTML-странице Выделите символы, которые вы хотите отделить на DHTML-странице, а затем щелкните на кнопке Wrap Selection In SPAN (Обрамление выделенного SPAN-тегами) в панели инструментов конструк- тора страниц Page designer.
628 Часть 6. Основы программирования приложений для работы с Internet Чтобы Сделайте следующее Назначить ID-атри- буты тексту на DHTML-странице Щелкните на текстовом блоке в панели со струк- турой в окне конструктора страниц Page designer, чтобы присвоить ему имя, а затем введите уни- кальный ID-атрибут для свойства ID в окне Properties (Свойства). Отформатировать текст на DHTML- странице как гипер- связь Щелкните на текстовом блоке, который вы хотите отформатировать как гиперсвязь в панели со структурой, а затем щелкните на кнопке Маке Selection Into Link (Создать связь для выделения) в панели инструментов конструктора страниц Раде designer. Сохранить компонен- ты в DHTML-проекте Выберите команду Save Project As (сохранить про- ект как) в меню File (Файл) и задайте имена компо- нентам вашего проекта. Запустить DHTML- приложение Щелкните на кнопке Start (Пуск) в панели инстру- ментов Visual Basic Создать HTML-доку- мент в Microsoft Word 97 Запустите Word, введите текст вашего документа и выберите команду Save As HTML (Сохранить как HTML) из меню File (Файл) Word.
УРОК . 22 = & & & « Добавление : элементов и ?3 : средств управления : ActiveX на §1 : DHTML-страницы & sa is _________________________________ JJ Вы научитесь: 4УД)“1 использовать элементы из панели управления Dynamic JJ HTML для обработки вводимой информации на Web- Урок * странице; рассчитан & применять средства управления ActiveX для улучшения на JJ качества DHTML-страниц; 50 минут к и писать процедуры обработки для DHTML-событий; s s использовать средство DHTML Property Bag (Портфель ® свойств DHTML) для хранения и извлечения важной ин- s формации; в ® компилировать ваше приложение в файлы HTML .dll. * к В уроке 21 вы научились использовать конструктор страниц | DHTML Page Designer для создания базовых DHTML-приложе- ний с форматированием текста и с гиперсвязями. В этом уроке н вы познакомитесь с тем, как добавлять характерные элемен- ты панели инструментов DHTML и средства управления
630 Часть 6. Основы программирования приложений для работы с Internet ActiveX на вашу Web-страницу, а также как написать для этих объектов про- цедуры обработки событий. Кроме того, вы воспользуетесь средством Property Bag (Портфель свойств) для сохранения ключевой информации для вашей Web-страницы в момент времени между загрузками страниц, и уз- наете, как компилировать ваш проект в файл HTML с поддерживающими библиотеками динамических связей и другими файлами. Знакомство с элементами панели инструментов DHTML Как вы узнали в предыдущем уроке, в конструкторе страниц DHTML Page Designer имеется панель инструментов со средствами управления DHTML, или элементами, с помощью которых вы можете повысить качество пользо- вательского интерфейса вашей Web-страницы. Эти элементы панели ин- струментов не совпадают с характерными средствами управления Microsoft Visual Basic, хотя во многом с ними схожи. Элементы панели инструментов DHTML создают объекты в соответствии со стандартом языка программи- рования гипертекстовых ссылок HTML, чтобы Microsoft Internet Explorer мог отображать Web-страницы, составленные с использованием этих стан- дартов. Элементам панели инструментов DHTML присущи свойства и фун- кции, отличные от тех, которые присущи средствам управления Visual Basic. Эти элементы также порождают другие события. Наконец, средства управления DHTML оптимизированы для операций на Web-страницах, где ключевыми факторами являются размеры и быстродействие. Элементы панели инструментов DHTML приведены на следующем рисунке: Инструмент Pointer (УказательЛ йИЫ& Элемент SubmitButton (Кнопка передачи) Элемент TextField _ (Текстовое поле) Элемент PasswordField (Поле с паролем) Элемент Checkbox (Поле с флажком) Элемент Image (Изображение) Элемент HorizontalRule (Горизонтальная линейка) Элемент Hidden Field (Скрытое поле) Элемент List (Список) Элемент Button (Кнопка) Элемент ResetButton (Кнопка сброса) ЭлементTextArea (Текстовая область) Элемент Option (Опция) Элемент Select (Выбор) Элемент Hyperlink (Гиперсвязь) Элемент FileUpload (Пересылка файла в сеть) Элемент Inputimage (Ввод изображения)
Урок 22. Добавление элементов и средств управления ActiveX 631 Примечание. У вас есть возможность переключаться между элементами панели инструментов DHTML и средствами управления панели инструмен- тов Visual Basic. (Хотя характерные для Visual Basic средства управ- ления не доступны в DHTML-приложении, зато у вас есть доступ к панели инструментов средств управления ActiveX.) Чтобы переходить от элементов к средствам управления и обратно, необходимо щелк- нуть мышью соответственно на кнопке General (Стандартная панель инструментов) или на кнопке HTML (Панель инструментов HTML) в панели инструментов. (Обратите внимание, что кнопка HTML (Панель инструментов HTML) занимает место в нижней части панели инстру- ментов, если отображаются стандартные средства управления.) Описание панели инструментов DHTML Прежде чем перейти к использованию элементов панели инструментов в ваших DHTML-приложениях, следует представлять, что эти элементы делают. Хотя в этом уроке вы не будете использовать каждый элемент из панели инструментов, приведенная ниже краткая обзорная информация весьма пригодится вам в дальнейшем, когда вы будете создавать собствен- ные приложения. Чтобы получить более подробную информацию об ис- пользовании элементов панели инструментов в DHTML-приложениях, введите HTML Intrinsic Controls в текстовом поле на вкладке Index (Пред- метный указатель) в оперативной справочной системе MSDN Library. Внимание! Ниже приводится описание некоторых наиболее важных свойств и событий, относящихся к характерным элементам панели инструмен- тов DHTML. [Чтобы получить полный их перечень, изучите для каж- дого элемента, список свойств в окне Properties (Свойства) и содержи- мое ниспадающего списка Procedure (Процедуры) в окне Code (Код).] Button (Кнопка) Элемент Button (Кнопка) создает командную кнопку на DHTML- странице. Свойство Value содержит текст, который отобража- ется на кнопке, а процедура обработки события OnClick выпол- няется каждый раз, когда пользователь щелкает мышью на кнопке. Элемент Button (Кнопка) обычно используется во время ввода данных в форме, для вычисления новых значений, либо для закрытия Web-страниц.
632 Часть 6. Основы программирования приложений для работы с Internet SubmitButton (Кнопка передачи) Элемент SubmitButton (Кнопка передачи) также создает команд- ную кнопку на DHTML-странице. Однако элемент SubmitButton (Кнопка передачи) обычно используется для пересылки инфор- мации с Web-страницы на внешнее устройство обработки, та- кое как Internet-сервер. При переходе данных на внешнее уст- ройство информация, пропускаемая через элементы ввода, посылается как текст. Свойство Value содержит текст, который отображается на кнопке, а процедура обработки события вы- полняется каждый раз, когда пользователь щелкает мышью на кнопке. ResetButton (Кнопка сброса) Z1 Подобно элементу Button (Кнопка), элемент ResetButton (Кнопка сброса) отображается на DHTML-странице как объект типа командная кнопка. Однако элемент ResetButton (Кнопка сброса) очищает все текстовые поля на текущей странице. (Эта кнопка обычно используется для очистки Web-страницы для ввода данных.) Свойство Value содержит текст, который отображает- ся на кнопке, а процедура обработки события выполняется каж- дый раз, когда пользователь щелкает мышью на кнопке. TextField (Текстовое поле) В Элемент TextField (Текстовое поле) создает однострочное тексто- вое поле на DHTML-странице, в которое можно вводить тексто- вую информацию в процессе работы программы. Этот элемент работает во многом схожим образом со средством управления TextBox Visual Basic. Свойство Value содержит текст, который ото- бражается в поле. Вы можете определить это свойство на этапе разработки в окне Properties (Свойства), либо считывать значе- ние этого свойства в ходе выполнения программы, чтобы иден- тифицировать введенные пользователем данные. Элемент TextField (Текстовое поле) порождает событие OnSelect, когда со- держимое текстового поля выделяется, а также событие OnChange, когда изменяется содержимое текстового поля. Text Area (Текстовая область) —— Элемент TextArea (Текстовая область) создает на DHTML-стра- нице большое текстовое поле (окно), которое позволяет осуще-
Урок 22. Добавление элементов и средств управления ActiveX 633 ствлять ввод и вывод многострочного текста. Если необходимо, элемент TextArea (Текстовая область) содержит полосы прокрут- ки, с помощью которых можно просматривать строки текста, которые в данный момент не видны в окне. Свойство Value со- держит текст, который отображается в окне. Вы можете опре- делить это свойство на этапе разработки в окне Properties (Свой- ства), либо считать значение этого свойства в ходе выполнения программы, чтобы идентифицировать данные, введенные пользователем. Свойство Rows дает вам возможность устанав- ливать высоту элемента (окна) в строках, а свойство Cols позво- ляет устанавливать ширину элемента (окна) в символах. По- добно элементу TextField (Текстовое поле), элемент TextArea (Текстовая область) порождает событие 0nSelect при выделении содержимого текстового окна, а также событие OnChange при из- менении содержимого текстового окна. PasswordField (Поле с паролем) Элемент PasswordField (Поле с паролем) создает текстовое поле на DHTML-странице, которое скрывает или маскирует пароль либо какую-нибудь другую информацию, вводимую пользова- телем. Элемент PasswordField (Поле с паролем) хорошо исполь- зовать, если вам нужно скрыть вводимые данные от посторон- них глаз. Подобно элементу TextField (Текстовое поле), свойство Value элемента PasswordField (Поле с паролем) содержит текст, который отображается в поле пароля. Вы можете задать скры- тое, используемое по умолчанию значение пароля на этапе раз- работки, установив это значение для свойства Value в окне Properties (Свойства), либо считывать значение свойства Value для получения введенных пользователем данных в ходе выполне- ния программы. Элемент PasswordField (Поле с паролем) порож- дает событие OnSelect, когда содержимое поля с паролем выде- ляется, а также событие OnChange, когда меняется текст в поле с паролем. Option (Опция) а Элемент Option (Опция) создает кнопку выбора, или радио кноп- ку, на DHTML-странице. В Visual Basic вы создаете группу вза- имоисключающих кнопок выбора (из которых только одна мо- жет быть выбрана в текущий момент) путем помещения каждой кнопки внутрь средства управления Frame (Кадр) в вашей фор-
634 Часть 6. Основы программирования приложений для работы с Internet ме. Однако в конструкторе страниц DHTML Page Designer нет сред- ства управления Frame (Кадр). Чтобы объединить вместе кноп- ки выбора на DHTML-странице, вы должны воспользоваться окном Properties (Свойства). В окне Properties (Свойства) вам пер- вым делом необходимо установить для свойств Name (Имя) каж- дой из кнопок одно и то же значение, а затем установить для свойства ID каждой из кнопок уникальный ID-атрибут. Свой- ство Checked предписывает одной из кнопок в группе быть выб- ранной по умолчанию, а событие ОпСlick наступает, когда пользо- ватель щелкает мышью на одной из отдельных кнопок выбора. Checkbox (Поле с флажком) р Элемент Checkbox (Поле с флажком) используется для добавле- ния поля с флажком на DHTML-страницу. В отличие от поля с флажком Visual Basic, элемент Checkbox (Поле с флажком) DHTML не содержит встроенной метки описания флажка. (Тек- стовую метку вы должны добавить путем ввода текста на DHTML-странице.) Свойство Checked определяет текущее со- стояние флажка. Задайте для свойства Checked значение True (Истина), чтобы установить флажок, либо задайте значение False (Ложь), чтобы сбросить флажок. Событие 0nClick наступает, ког- да пользователь щелкает мышью на поле с флажком. Select (Выбор) Элемент Select (Выбор) добавляет на DHTML-страницу поле с ниспадающим списком, подобно средству управления Combo Box (Поле с ниспадающим списком). Свойство Size определяет ко- личество элементов, которые одновременно являются видимы- ми в списке, а свойство Selected определяет выделение заданно- го по умолчанию элемента списка. Если элемент Select (Выбор) изменяется в ходе выполнения программы, наступает событие OnChanged. Чтобы добавить элементы списка в поле Select (Вы- бор) на этапе разработки, щелкните правой кнопкой мыши на элементе Select (Выбор) на странице, щелкните на команде Properties (Свойства) и воспользуйтесь страницей свойств Property Page, чтобы добавить элементы списка в поле. Image (Изображение) Элемент Image (Изображение) используется для добавления на DHTML-страницу стандартного графического изображения.
Урок 22. Добавление элементов и средств управления ActiveX 635 Чтобы загрузить изображение в элемент на этапе разработки или в ходе выполнения программы, установите для свойства SГС имя пути к изображению, которое вы хотите загрузить. Вы можете также воспользоваться свойством Title, чтобы отобра- зить «всплывающий» текст, когда пользователь щелкает на элементе Image (Изображение) на странице. Hyperlink (Гиперсвязь) Элемент Hyperlink (Гиперсвязь) используется для создания свя- зи с другой HTML-страницей в вашем приложении. Чтобы за- дать имя документа HTML или адрес URL, с которым вы хоти- те связаться, установите значение свойства href в окне Properties (Свойства). Обратите внимание, что текст, который появляет- ся на вашей странице в виде отформатированной гиперсвязи, управляетсяне элементом Hyperlink (Гиперсвязь), а соответству- ющим текстовым элементом. (Вы можете редактировать текст гиперсвязи только на DHTML-странице.) Вы также можете однозначно задавать, как элемент Hyperlink (Гиперсвязь) вызы- вает переход к другому документу HTML, написав программ- ный код в процедуру обработки события OnClick для элемента Hyperlink (Гиперсвязь). HorizontalRule (Горизонтальная линейка) Элемент HorizontalRule (Горизонтальная линейка) добавляет го- ризонтальную линию на DHTML-странице. Вы можете регу- лировать толщину линии с помощью свойства Size, а также цвет линии с помощью свойства Color. Длину линии можно задавать с помощью свойства Width. FileUpload (Пересылка файла в сеть) Элемент FileUpload (Пересылка файла в сеть) добавляет тексто- вое поле с командной кнопкой на DHTML-страницу. С помощью этой кнопки пользователи могут пересылать файлы с локаль- ного жесткого диска на Internet-сервер. Пользователи могут либо вводить путь в текстовое поле, либо щелкнуть на кнопке Browser (Обзор) для открытия диалогового окна, которое дает возможность находить файлы в вашей системе. Событие OnClick наступает, когда пользователь щелкает на элементе FileUpload (Пересылка файла в сеть), а событие On Select наступает, когда выделяется текст в текстовом поле.
636 Часть 6. Основы программирования приложений для работы с Internet HiddenField (Скрытое поле) Элемент HiddenField (Скрытое поле) добавляет на DHTML-стра- ницу текстовое поле, которое не видно пользователю. Это тек- стовое поле весьма полезно для временного хранения данных в вашей программе (например, пароля, правильность которого вы хотите проверить). Кроме того, вы можете использовать эле- мент HiddenField (Скрытое поле) для пересылки информации на Internet-сервер. Свойство Value содержит скрытый текст. Зна- чение свойства может быть установлено на этапе разработки, либо в процессе выполнения программы. Inputimage (Ввод изображения) Элемент Inputimage (Ввод изображения) добавляет изображение на DHTML-страницу. Свойство Src задает имя пути или URL- адрес изображения, которое отображается в поле изображе- ния. Помимо этой основной функции, элемент Inputimage (Ввод изображения) дает возможность пользователю щелчком мыши на загруженном изображении осуществлять ввод информации. Например, создатель DHTML-приложения может загрузить карту в средство управления Inputimage (Ввод изображения) и считывать координаты (х, у), когда пользователь щелкает мы- шью на изображении карты. List (Список) =.д Элемент List (Список) используется для добавления на DHTML- страницу поля списка с полосами прокрутки. Элемент List (Спи- сок) подобен элементу управления ListBox (Поле списка) в Visual Basic. Свойство Size определяет количество элементов, которые одновременно видимы в поле списка, а свойство Length опреде- ляет высоту поля со списком. По мере изменения элемента Select (Выбор) в ходе выполнения программы наступает событие OnChange, а свойство Value при этом содержит выбранный эле- мент. Чтобы добавить элементы списка в ходе выполнения про- граммы, щелкните правой кнопкой на элементе List (Список) на странице, щелкните на команде Properties (Свойства) и восполь- зуйтесь страницей свойств Property Page для добавления элемен- тов в список.
Урок 22. Добавление элементов и средств управления ActiveX 637 Создание элементов и установка их характеристик Процесс физического создания элементов панели инструментов DHTML на Web-странице почти идентичен созданию объектов в форме Visual Basic. Вы можете вставлять элементы панели инструментов DHTML тре- мя способами: щелкнув мышью на значке элемента в панели инструментов и перета- щив его в правую панель окна конструктора страниц Page Designer; щелкнув мышью на значке элемента в панели инструментов и «нари- совав» его в правой панели, как вы это делали в форме Visual Basic; дважды щелкнув на значке в панели инструментов. (При этом на стра- нице автоматически создается элемент с установленными по умолча- нию характеристиками.) Вы также можете изменять размеры элементов панели инструментов с помощью размерного указателя, как вы это делаете для элементов уп- равления в форме Visual Basic. Если вы хотите переместить элемент па- нели инструментов, вам достаточно воспользоваться для этого клавиша- ми управления курсором на вашей клавиатуре. (Если вы переместите элемент за пределы экрана, он будет невидимым для пользователя, но по-прежнему останется активным.) Вы можете задавать абсолютную по- зицию элементов на странице, либо позицию их относительно других эле- ментов и границ окна. Для переключения режимов позиционирования служит кнопка Absolute Position Mode (Режим абсолютного позиционирова- ния) на панели инструментов конструктора страниц Page Designer. I Примечание. I Абсолютное позиционирование означает, что элемент, который вы I I помещаете на странице, появится в точно заданном вами месте. Отно- | I сительное позиционирование допускает перемещение элемента в за- I I висимости от положения соседних элементов при изменении разме- I I ров страницы. I На этапе разработки вы можете установить необходимые для вас харак- теристики элементов панели инструментов путем задания свойств в окне Properties (Свойства). Доступные свойства могут быть различными в зави- симости от типа элемента, который вы используете. Для некоторых эле- ментов панели инструментов предусмотрена страница свойств Property Page, которую вы можете вызвать, щелкнув на элементе правой кнопкой
638 Часть 6. Основы программирования приложений для работы с Internet мыши, а затем щелкнув на команде Properties (Свойства), после чего выб- рать необходимые опции и характеристики в появившемся диалоговом окне Property Pages (Свойства). Для удаления элемента панели инструмен- тов щелкните на имени элемента в панели со структурой в виде дерева и нажмите клавишу | Del |. Добавление элементов в приложение WebLucky В этом разделе вы попрактикуетесь в использовании элементов панели инструментов, добавив элементы Image (Изображение) и Button (Кнопка) в проект WebLucky, DHTML-приложение, с которым вы начали работать в уроке 21. Закончив работу над программой, вы получите утилиту, кото- рая отображает случайные числа, как только вы щелкаете мышью на кнопке Вращать. Если появляется одна или более семерок, то вы выиграли, что сопровождается звуком аплодисментов (с помощью средства управ- ления Multimedia MCI и файла .wav). Переименуем файлы в вашем DHTML-приложении Если вы хотите работать с новой версией DHTML-приложения, вам не- обходимо перед этим переименовать файлы проекта (.vbp), конструктора (.dsr) и модуля (.mod). 1. Запустите Visual Basic и откройте проект WebLucky.vbp, кото- рый содержится в папке C:\Vb6Sbs\Less21. Вы сохраните этот проект под новым именем в папке Less22, чтобы оставить неизменной оригинальную версию. (Если вы хотите продолжить работу с проектом MyWebLucky, созданным вами в уроке 21, а не с версией, которую я создал для вас, от- кройте проект MyWebLucky и переименуйте его файлы.) 2. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как). 3. Откройте содержимое папки C:\Vb6Sbs\Less22, введите MyDHTML7 и нажмите клавишу | Enter |. Visual Basic создает копию файла проекта WebLucky в папке Less22. Теперь вы сохра- ните DHTML-страницу под новым именем. 4. Откройте папку Designers в окне Project (Проект) и щелкните на имени конструктора DHTMLPagel. 5. В меню File (Файл) щелкните на команде Save WebLucky.dsr As (Сохранить WebLucky.dsr как).
Урок 22. Добавление элементов и средств управления ActiveX 639 6. В диалоговом окне Save As (Сохранение) введите MyDHTML7 и нажмите клавишу | Enter |. 7. Откройте папку Modules в окне Project (Проект) и щелкните на имени модуля modDHTML. 8. В меню File (Файл) щелкните на команде Save modDHTML As (Со- хранить modDHTML как). (Ваш модуль может иметь другое имя.) 9. В диалоговом окне Save As (Сохранить как) введите MyDHTML7 и нажмите клавишу | Enter]. Если вы сохраняете существующее DHTML-приложение под новым именем, делайте это в три этапа: переименование фай- ла проекта (.vbp), переименование файла конструктора (.dsr) и переименование файла модуля (.mod). Примечание. Помимо файлов проекта (.vbp), конструктора (.dsr) и модуля (.mod), DHTML-приложение включает в себя файл .dsx с кодами HTML для конструктора, который вы используете, а также файл .dca с кодами HTML и другой двоичной информацией. Как удалить элемент со страницы В конструкторе страниц Page Designer вы можете удалить любой элемент, щелкнув на его имени в панели со структурой или в панели конструктора и нажав клавишу | Del |. Эта возможность весьма полезна при редактиро- вании DHTML-страниц. (У вас может возникнуть желание удалить эле- мент и начать все сначала.) Для удаления первой пустой строки (Bianki) на странице выполните следующие действия: 1. Щелкните на элементе Bianki в панели со структурой в виде дерева. Выбранный элемент будет выделен как в левой панели с видом структуры, так и в правой панели. 2. Нажмите клавишу | Del |. Текстовый элемент будет оконча- тельно удален со страницы. Внимание! Проявляйте осторожность при удалении элемента с DHTML-страни- цы. В конструкторе страниц Page Designer не предусмотрена команда Undo (Отмена) для возврата к состоянию, предшествующему опера- ции удаления.
640 Часть 6. Основы программирования приложений для работы с Internet Добавим на страницу элемент Image (Изображение) Первым действием по совершенствованию программы MyDHTML7 станет добавление на страницу элемента Image (Изображение). Элемент Image (Изображение) будет отображать на странице, имитирующей игровой автомат, столбик с монетами в процессе работы программы. 1. Дважды щелкните на элемента Image (Изображение) на па- нели инструментов. Совет. Если вы не уверены, какой из элементов панели инструментов явля- ется элементом Image (Изображение), подержите какое-то время ука- затель мыши на элементе, который кажется вам подходящим, и вы | увидите его название в появившемся окошке контекстной подсказки. Конструктор страниц Page Designer поместит элемент Image (Изображение) в центр DHTML-формы, как показано на сле- дующем рисунке: DHTMLProject - DHTMLPagel (DHTMLPagc) f ' J--'" Jb 'JR « ЗЫ ( ! J s - jcument I Blank? BODY (Счастливая семерк; H1 Lucky He atl Н1 (Счастливая сеь H2 Bianki 112 () ! H2 Blank21 112 () HI Num H1 (0 0 0) Й Num1 SPAN (0) g Num2 SPAN (0) Я Num3 SPAN (0) О Imagel IMG () H3 Result НЗ (Побед:) H4 H 4 (0 счастливой семерке) 1 Счастливая семерка 0 0 Побед: О счастливой семерке Вы также можете создать элемент Image (Изображение), щелк- нув на элементе в панели инструментов, и придать ему необхо-
Урок 22. Добавление элементов и средств управления ActiveX 641 димые размеры на странице путем перетаскивания мышью (пе- редвижением мыши с удерживаемой левой кнопкой). Однако, значительно проще дважды щелкнуть мышью на элементе в панели инструментов, а затем изменить его размеры. Обрати- те внимание, что конструктор страниц Page Designer также по- мещает имя и описание элемента Image (Изображение) в панель со структурой в виде дерева. 2. Нажимайте клавиши [Т] и ] управления курсором, пока элемент Image (Изображение) не окажется между заголовком «Счастливая семерка» и тремя нулями. Лучше всего перемещать выделенные элементы на DHTML- странице с помощью клавиш управления курсором. Вы може- те«добиться точного перемещения, удерживая клавишу | Ctrl ] и нажимая клавиши управления курсором. Ваш экран будет выглядеть подобно представленному на рисунке: Е i DHTMLProject - DHTMLPagel (DHTMLPage) - jr] Document - Д) Blank? BODY (Счастлиг iH1 LuckyHead H1 (Счас I H2 Bianki H2 () H2 Blank21 H2 () Й H1 Num H1 (0 0 0) ! £ Num1 SPAN (0) i £ Num2 SPAN (0) gS Num3 SPAN (0) . H3 Result НЗ (Побед:) = fi- H4 H4 (0 счастливой семе: Счастливая семерка ООО : 2J : Побед: О счастливой семеркеО Совет. Хотя вы можете изменять размеры элемента Image (Изображение) с помощью мыши, в ряде случаев удобнее воспользоваться для этой цели свойствами Width и Height.
642 Часть 6. Основы программирования приложений для работы с Internet По умолчанию элемент Image (Изображение) отображается на странице в полноразмерном режиме. Однако вы можете так сконфигурировать элемент Image (Изображение), чтобы отобра- жаемый рисунок имел определенные размеры. Для этого сле- дует установить соответствующим образом значения свойств Width и Height в окне Properties (Свойства). В этой программе вы примете предложенные по умолчанию размеры элемента Image (Изображение) для отображения графического листа файла Windows в окне Internet Explorer в ходе выполнения програм- мы. Заметьте, что, в отличие от изображения в первой создан- ной вами программе Счастливая семерка, столбик монет в этой программе всегда виден на экране. 3. Щелкните на кнопке Save Project (Сохранить проект) в панели инструментов Visual Basic, чтобы сохранить сделанные изме- нения. Добавим на страницу элемент Button (Кнопка) Теперь вы добавите на DHTML-страницу элемент Button (Кнопка), кото- рая будет использоваться для запуска игрового автомата и отображения трех случайных чисел. 1. Дважды щелкните на элементе Button (Кнопка) в панели ин- струментов. Конструктор страниц Page Designer добавит на вашу страницу элемент Button (Кнопка) и создаст новую запись для кнопки в панели со структурой. 2. Воспользуйтесь клавишами управления курсором и для перемещения кнопки в правую часть страницы напротив надписи Побед. Ваша страница должна выглядеть следующим образом:
Урок 22. Добавление элементов и средств управления ActiveX 643 В В} BODY (Lucky 7 GameO 0 OWinsz i H1 LuckyHead H1 (Lucky 7 H2 Blank2H2(] - Hf Num Н1 (О О О) g Num! SPAN (0) _J Button! INPUT (] S Image! IMG () | g Num2 SPAN (OJ g Num3 SPAN (0) \ H3 Result H3 (Wins ) Й- H4 H4 (About Lucky 7) | ~e® Hyperlink2 A (About I Счастливая семерка ООО н з Button! : Побед: О счастливой семерке 3. Восстановите размеры окна Properties (Свойства), найдите в списке свойство Value и удалите текст в поле значения свойства (сейчас это Button 1). Свойство Value содержит текст, который отображается на эле- менте Button (Кнопка). Чтобы изменить текст, обновите значе- ние свойства Value. 4. Введите Вращать в поле значения свойства Value и нажмите клавишу | Enter~|. Текст на элементе Button (Кнопка) изменится на Вращать, а ваше окно Properties (Свойства) будет выглядеть подобно представлен- ному на следующем рисунке:
644 Часть 6. Основы программирования приложений для работы с Internet Properties • Button! [Button!DispIHTMLInpu .у | Alphabetic | Categorized | (Id) iButtonl accessKey• dassName . disabled False language . name iButtonl status tabindex ;0 title value Теперь вы готовы к тому, чтобы добавить к элементу Button (Кнопка) соот- ветствующий программный код. Далее вы сделаете это, но прежде вве- дем на страницу средство управления ActiveX Multimedia MCI. Добавление на DHTML-страницу средств управления ActiveX Хотя вы не можете использовать в DHTML-приложении стандартные средства управления из панели инструментов Visual Basic, у вас есть воз- можность добавлять на DHTML-страницу средства управления ActiveX. Конструктор страниц Page Designer отличает эти средства управления, об- рамляя их тегами <OBJECT> в коде HTML для вашего приложения. В большинстве случаев вам доступны традиционные свойства, функции и события, поддерживаемые оригинальными средствами управления ActiveX, однако имеется ряд исключений. (Например, вы не можете приме- нять свойство Visible для средств управления ActiveX, поскольку в HTML- страницах не используется свойство Visible таким же образом, как это де- лается в формах Visual Basic.) Помимо стандартного набора свойств, функций и событий, обеспечиваемых средствами управления ActiveX, у вас также есть доступ к нескольким дополнительным атрибутам согласно спецификации HTML для средств управления, таким как ClassiD, CodeBase, CodeType, ID и т.д. Эти дополнительные свойства дают вам возможность воспользоваться расширенными атрибутами элементов на HTML-стра- нице, по-прежнему сохраняя доступ к основным функциональным сред- ствам управления ActiveX. Возможность добавлять средства управления ActiveX в DHTML-приложе- ния является значительным преимуществом для программистов на Visual Basic. С ее помощью вы можете улучшить качество ваших Web-страниц,
Урок 22, Добавление элементов и средств управления ActiveX 645 воспользовавшись средствами управления ActiveX, с которыми мы позна- комились ранее при изучении этой книги. В следующем упражнении вы добавите средство управления Multimedia МСI ActiveX в ваше DHTML-при- ложение, чтобы воспроизвести звучание аплодисментов из файла applause.wav, как только пользователю выпадает выигрыш. Добавим средство управления ActiveX в панель инструментов Прежде чем вы сможете воспользоваться средством управления ActiveX на вашей DHTML-странице, вам необходимо добавить его в панель инст- рументов Visual Basic. Средства управления ActiveX хранятся в панели General (Стандартные) окна инструментов. Доступ к ним осуществляется через кнопку General (Стандартные) на панели инструментов. 1. В меню Project (Проект) щелкните на команде Components (Ком- поненты). Осуществите прокрутку списка и щелкните на поле флажка рядом со строкой Microsoft Multimedia Control 6.0. 2. Щелкните на кнопке ОК, чтобы добавить средство управле- ния ActiveX в вашу панель инструментов. В стандартной панели инструментов General появится средство управления ActiveX, как показано на следующем рисунке. (Обратите внимание, что ос- тальные стандартные средства управления Visual Basic сейчас не доступны, поскольку вы работаете в DHTML-приложении.) General | ими ' От----Средство управления Multimedia MCI HTML | Теперь вы готовы к тому, чтобы добавить средство управления ActiveX в ваше приложение.
646 Часть 6. Основы программирования приложений для работы с Internet Создание на странице средства управления Multimedia MCI Средства управления ActiveX отображают на DHTML-странице таким же образом, как и остальные средства управления. Поскольку эти средства управления не имеют свойства Visible, то для того чтобы сделать их неви- димыми в ходе выполнения программы, вам необходимо «утащить» их с помощью мыши за левую границу окна страницы. (При этом средство управления «скрывается», когда DHTML-страница отображается брау- зером.) Заметим также, что некоторые средства управления ActiveX, не имеющие пользовательского интерфейса, такие как Common Dialog (Сред- ства управления диалоговыми окнами общего назначения), невидимы как на этапе разработки, так и в процессе выполнения программы. Вы може- те устанавливать свойства видимости или невидимости для средств уп- равления путем выделения их в панели со структурой. Выполните следующие действия, чтобы добавить в ваше приложение средство управления Multimedia MCI. 1. Дважды щелкните мышью на средстве управления Multimedia MCI в панели инструментов. Конструктор страниц Page Designer создаст новое средство уп- равления в середине страницы и добавит запись для сред- ства управления в панель со структурой. Ваша страница будет выглядеть подобно представленной на рисунке: । —1| —1| —И । & i 133 %.,‘ЙГ~ cument BODY [Счастливая семеркаО 0 ОПобед:0 HI LuckyHead HI (Счастливая cent Н2 Blank2H2(] HI Num HI (0 0 0) Й Numl SPAN (0) 3 MMControll OBJECT (<PARA 1 Buttonl INPUT () i Щ Imagel IMG () g Num2 SPAN (0) S Num3 SPAN (0] Счастливая семерка и ФФФ H3 Result НЗ (Побед:] H4 H4 (0 счастливой семерке) В- U U (0 счастливой семерке) ! A FONT (0 счастливой семерке Побед: Вращать О счастливой семер <е
Урок 22. Добавление элементов и средств управления ActiveX 647 2. Нажимайте клавишу управления курсором пока сред- ство управления Multimedia MCI не выйдет за левый край стра- ницы. Перемещение средства управления за пределы страницы де- лает его невидимым. (Чтобы вновь сделать его видимым, про- сто щелкните на средстве управления в панели со структурой, а затем нажмите и удерживайте клавишу управления курсо- ром [->].) 3. Щелкните на кнопке Save Project (Сохранить проект) в панели инструментов Visual Basic, чтобы сохранить внесенные вами изменения. В последующих упражнениях вы сконфигурируете средство управления Multimedia MCI и разрешите его работу, чтобы воспроизвести файл .wav с помощью соответствующего программного кода. Создание процедур обработки событий для элементов DHTML Вы можете программно управлять элементами и средствами ActiveX на вашей DHTML-странице с помощью процедур обработки событий путем написания соответствующего программного кода, как вы это делали для приложений Visual Basic. За некоторыми важными исключениями, опе- раторы, функции и ключевые слова Visual Basic, с которыми вы познако- мились в этой книге, также будут работать и в процедурах обработки со- бытий DHTML. Самое большое различие, с которым вы столкнетесь при написании процедур обработки событий DHTML, состоит в том, что из- менились многие имена событий и объектов по сравнению с теми, кото- рые использовались в Visual Basic, поэтому вам потребуется какое-то время, чтобы освоить применение этих новых имен. Однако знакомые вам структуры If...Then...Else, For...Next и Do...Loop остаются такими же. В этом разделе вы создадите процедуры обработки для двух событий, которые выполняются, или инициализируются, при запуске DHTML-при- ложения. Одним из них является событие DHTMLPage_Load, которое ини- циируется при загрузке вашей страницы в браузер Internet Explorer. Другое событие, Button1_onclick, наступает, когда пользователь щелкает на кнопке Вращать, чтобы отобразить три случайных числа.
648 Часть 6. Основы программирования приложений для работы с Internet Примечание. Программисты HTML часто говорят, что событие запускается (fires), когда оно выполняется или вызывается в DHTML-программе. Напри- мер, «Элемент Кнопка запускает событие щелчок мыши, когда Боб щелкает мышью на кнопке Вращать.» Я упоминаю об этом, поскольку этот термин часто используется в оперативной справочной системе Help DHTML и в других средствах для программирования Internet-при- ложений. Создадим процедуру обработки события DHTMLPageJLoad В этом упражнении вы создадите процедуру обработки события DHTMLPage_Load, которая запускается каждый раз, когда ваша DHTML- страница загружается браузером. Эта процедура обработки события обычно является эквивалентом процедуры обработки события Form_Load в Visual Basic, за исключением того факта, что процедура DHTMLPage_Load выполняется каждый раз, когда содержимое страницы обновляется бра- узером. (Как вы увидите ниже, вам следует иметь в виду этот факт, когда вы будете писать ваш программный код.) _I 1. Щелкните на кнопке View Code (Просмотр кода) в окне Project (Проект) для отображения окна Code (Код). 2. Щелкните на поле с ниспадающим списком в окне Code (Код), а затем щелкните на объекте DHTMLPage. В окне Code (Код) будет отображен текст процедуры обработки события DHTMLPage_Load. 3. Введите следующий программный код: 'Установка стиля с подчеркиванием для заголовка LuckyHead.Style.textDecorationllnderline = True 'Установка синего цвета для цифр Num.Style.Color = "blue” 'Запуск генератора случайных чисел (для отображения цифр) Randomize 'Отображение столбика монет Imagel .src = "c:\vb6sbs\less22\coins.wmf" 'Конфигурирование и открытие средства управления Multimedia MCI MMControH.Notify = False MMControH.Wait = True
Урок 22. Добавление элементов и средств управления ActiveX 649 MMControll.Shareable = False MMControll .DeviceType = "WaveAudio" MMControll .FileName = "c:\vb6sbs\less22\applause.wav" MMControll.Command = "Open (Открыть)" 'Использование функции GetProperty для определения, имеются ли результаты 'предыдущих выигрышей в портфеле свойств Property Bag (место хранения 'информации при операции загрузки и выгрузки страниц). С помощью этого 'оператора вы сохраняете количество выигрышей перед переходом по 'гиперсвязи "Осчастливой семерке" или переходом на другие Web-страницы Result.innerText = "Побед:" & GetPropertyf'Wins") 4. Исправьте все ошибки ввода и синтаксические ошибки, об- наруженные Visual Basic. 5. Щелкните на кнопке Save Project (Сохранить проект) на пане- ли инструментов Visual Basic, чтобы сохранить внесенные вами добавления. Рассмотрим исходный текст процедуры обработки события DHTMLPage_Load Процедура обработки события, которая запускается, когда DHTML-стра- ница загружается в браузер, выполняет несколько важных задач. Преж- де всего, программный код в этой процедуре форматирует элемент LuckyHead с использованием стиля подчеркивания, чтобы визуально вы- делить его на странице. Элемент LuckyHead выглядит как объект, но в дей- ствительности является текстовым элементом, которому вы присвоили имя «LuckyHead» с помощью свойства ID в окне Properties (Свойства). Ана- логичным образом устанавливается синий цвет для отображения цифр на странице с использованием идентификатора Num ID, атрибута стиля Style и свойства Color. Я использовал эти два свойства, чтобы показать вам, как использовать программный код для задания нужных характеристик текстовых элементов на странице. Оператор Randomize в процедуре обработки события DHTMLPage_Load ини- циирует работу генератора случайных чисел, который работает на основе считывания случайных значений данных системных часов. Тем самым обеспечивается реально случайный характер цифр, появляющих- ся при операции «вращения» игрового автомата. (Об операторе Randomize вы могли узнать подробнее из материала урока 2.) Следующий оператор загружает для свойства Src элемента имя пути к графическому изобра- жению на жестком диске. В отличие от средства управления ImageBox (Поле изображения) в Visual Basic, элемент Image (Изображение) настраивает- ся в процессе выполнения, а не на этапе разработки.
650 Часть 6. Основы программирования приложений для работы с Internet Третья группа программных операторов в этой процедуре обработки со- бытия конфигурирует и открывает для использования средство управ- ления Multimedia MCI. В уроке 17 описано, как программировать средство управления Multimedia MCI; обратите особое внимание, что я установил для свойства DeviceType значение WaveAudio (звуковая информация, храняща- яся в файле .wav), а также значение applause.wav для свойства FileName, чтобы получить доступ к этому файлу. Звук аплодисментов не воспроиз- водится, пока пользователь не добьется выигрышного результата. Ситу- ация выигрыша идентифицируется в процедуре обработки события Buttonl__onclick, текст которой вы напишете в следующем разделе. Последняя группа программных операторов ссылается на значение гло- бальной переменной Wins из портфеля свойств Property Bag DHTML-прило- жения, чтобы определить, имели ли место выигрыши ранее. Портфель свойств Property Вад представляет собой временное хранилище инфор- мации, существующей вне текущей DHTML-страницы. Вы можете заг- ружать информацию в портфель свойств Property Bag с помощью функции PutРroperty. При вызове этой функции вы задаете значение, которое хоти- те сохранить, а также указываете имя переменной, которое будет исполь- зоваться при извлечении информации. Чтобы в дальнейшем получить эту информацию, вы обращаетесь к функции GetProperty и задаете имя нуж- ного вам значения. В процедуре обработки события DHTMLPage_Load я про- веряю текущее значение переменной Wins и отображаю его на странице с помощью свойства innerText, описанного ниже. Обратите внимание, что функция GetProperty не выдает результат при первой загрузке страницы. Однако в процессе игры эта функция сохраняет число выигрышей, даже если пользователь переходит к гиперсвязи 0 счастливой семерке или к дру- гой Web-странице. Портфель свойств Property Bag является временным хранилищем инфор- мации. Создадим процедуру обработки события Buttonl onclick Теперь вы создадите процедуру обработки события, которая будет вы- полняться, когда пользователь щелкает мышью на элементе Button (Кноп- ка) на DHTML-странице. 1. Откройте список Object (Объекты) в окне Code (Код) и щелкни- те на объекте Buttonl. В окне Code (Код) появится исходный текст процедуры обра- ботки события Button1_onclick.
Урок 22, Добавление элементов и средств управления ActiveX 651 2. Введите следующий программный код: 'Объявление локальной переменной х для числа выигрышей (копируется в 'портфель свойств Property Bag циклами «вращения» игрового автомата) Dim х 'Выборка трех случайных чисел Num1.InnerText = lnt(Rnd * 10) Num2.innerText = lnt(Rnd * 10) I\lum3.innerText = lnt(Rnd * 10) 'Если какое-либо из чисел равно 7, отобразить столбик монет и выдать звуковой сигнал If Num1 .innerText = 7 Or Num2.innerText = 7 Or _ Num3.innerText = 7 Then 'Если есть выигрыш, воспроизвести звуковой файл applause.wav MMControH .Command = "Prev" 'перемотка к началу MMControH.Command = "Play" 'воспроизвести файл .wav 'и увеличить счетчик выигрышей на 1 в портфеле свойств Property Bag х = GetProperty("Wins") Result.innerText = "Побед:" & х + 1 PutProperty "Побед", х + 1 End If 3. Исправьте все синтаксические ошибки, обнаруженные Visual Basic. 4. Щелкните на кнопке Save Project (Сохранить проект) в панели инструментов, чтобы сохранить вашу процедуру обработки события. Рассмотрим исходный текст процедуры обработки события Button1_onclick Процедура обработки события Button1_onclick выполняется, когда пользо- ватель щелкает на кнопке Вращать на DHTML-странице. Эта процедура имеет много общего с процедурой Spin, которую вы использовали в уро- ках 2 и 10 для получения случайных чисел в игре Счастливая семерка. Пер- вым делом в процедуре объявляется локальная переменная с именем х, которая используется для хранения количества выигрышей в портфеле свойств Property Bag. Поскольку переменная х является локальной, она сбра- сывается каждый раз, когда запускается эта процедура обработки собы- тия. (Процедура обработки события копирует общее количество выигры- шей на данный момент в переменную х с помощью функции GetProperty.) Случайные числа от 0 до 9 генерируются функцией Rnd, из них с помо- щью функции Int выделяется целая часть. Полученные числа копируют- ся на страницу с помощью свойств innerText элементов Num1, Num2 и Num3
652 Часть 6. Основы программирования приложений для работы с Internet соответственно. (Когда вы назначали идентификаторы ID I\lum1, Num2 и Num3 для трех текстовых полей на странице в уроке 21, вы сделали их программируемыми объектами в тексте вашей программы.) Свойство innerText модифицирует текстовый элемент путем замены текстового ар- гумента, который вы задали для существующего текста на странице. Свойство innerText работает только с текстовыми элементами; если вы хо- тите вставить HTML-теги для форматирования текста определенным образом, воспользуйтесь для этого свойством innerHTML. Свойство innerText изменяет текст на странице. Свойство innerText также представляет значение элемента. Я использую эту особенность в операторе If, который проверяет, не является ли одно из случайных чисел, отображенных на странице, семеркой: If Num1.innerText = 7 Or I\lum2.innerText = 7 Or _ I\lum3.innerText = 7 Then Если появляется семерка, я использую аргументы Рrev и Play для средства управления Multimedia MCI, чтобы воспроизвести звук аплодисментов из файла applause.wav, сопровождающих выигрыш. (Я использую аргумент Prev для «перемотки» плейера, если до этого уже воспроизводился звук.) Пос- ле запуска звука аплодисментов я использую функцию GetProperty для копирования значения Wins в локальную переменную х. Затем я инкре- ментирую счетчик выигрышей в форме, обращаясь к элементу Result (Ре- зультат). Наконец, я копирую инкрементированное значение счетчика выигрышей Побед в портфель свойств Property Bag с помощью функции PutProperty: PutProperty "Побед", х + 1 Обратите внимание, что функции PutProperty и GetProperty объявляются в стандартном модуле, который по умолчанию включается во все DHTML- проекты (modDHTML). Если вам интересно, каким образом эти функции управляют информацией в портфеле свойств Property Bag, изучите про- граммный код для этих функций в окне Code (Код). [Откройте папку Modules в окне Project (Проект), щелкните на модуле modDHTML, а затем щелкните на кнопке View Code (Просмотр кода).] Вы также можете поместить в этот стандартный модуль ваши собственные функции и подпрограммы обще- го назначения. Запустим приложение MyDHTML7 Теперь вы запустите приложение MyDHTML7 и посмотрите, как ваше при- ложение выглядит и работает в браузере Internet Explorer.
Урок 22, Добавление элементов и средств управления ActiveX 653 Приложение DHTML7 содержится в папке \Vb6Sbs\Less22/. 1. Щелкните на кнопке Start (Пуск) на панели инструментов ------------- Visual Basic для запуска Internet Explorer и загрузки DHTML- страницы. Visual Basic должен откомпилировать несколько компонентов в вашем приложении. Поэтому загрузка займет какое-то вре- мя. Вы увидите следующее: .......... ......... .......__.... ......И AjOorie ; ’ , Mv Computer 2. Щелкайте на кнопке Вращать один или несколько раз, пока на странице не появится семерка. Если вы выиграли, раздается звук аплодисментов из файла applause.wav. (Чтобы вы могли услышать звук, необходимо, что- бы к вашему компьютеру были подключены колонки. Убеди- тесь, что они включены, подрегулируйте уровень громкости.) Ваша страница будет выглядеть, подобно представленной на рисунке:
654 Часть 6. Основы программирования приложений для работы с Internet 3 г \«1Н\ТГМГ\ОНТМ| 1 him Minosoft Inlemel Txplmri ' HR Ete £<• Jqw £» rfwnln tH> П «•••>• tMd JW-ii________________________________________________ AMert|«/' ИМ ’E*l L'r- * L’Un v] Urik» £]0«ta(heWotJ Л]О»т1 Шс «SjhwEmaiwlhH*Mrf Л]Нв.-л=Ъ1а!1 4]Мкде« 4>мгЬм ®lwinu>, l’k • Счастливая семерка "Зой» “X,, , - X ~ 3. Щелкните еще несколько раз на кнопке Вращать, чтобы общее количество выигрышей составило пять или шесть. Каждый раз, когда появляется семерка, число выигрышей ин- крементируется. (Информация сохраняется под именем Wins в портфеле свойств Property Bag.) 4. Щелкните на кнопке Refresh (Обновить) на панели инструмен- тов Internet Explorer, чтобы обновить экран и выполнить про- цедуру обработки события DHTMLPage1_Load. Через некоторое время страница появится снова, и на ней бу- дет содержаться правильное количество выигрышей. 5. Наконец, щелкните на гиперсвязи в программе, а затем щел- кните на кнопке Back (Назад) браузера, чтобы проверить, что при обновлении страницы отображается правильное значение количества выигрышей Побед (Wins). (Щелкните на букве «А» в гиперсвязи, если этого не произойдет.)
Урок 22, Добавление элементов и средств управления ActiveX 655 Совет. Для получения более подробной информации о создании этой гипер- связи обратитесь к уроку 21. 6. Закончив работу с приложением MyDHTML7, щелкните на кнопке Close (Закрыть) в строке заголовка окна Internet Explorer, а затем щелкните на кнопке End (Стоп) в панели инструментов Visual Basic. Ваша DHTML-программа будет остановлена, а в среде разра- ботчика вновь появится конструктор страниц Page Designer. Шаг вперед: компилирование DHTML-приложения DHTML-приложение состоит из файла HTML, библиотеки динамичес- ких связей (.dll) и набора файлов поддержки. DHTML-приложение ком- пилируется таким же образом, что и любой проект Visual Basic - выбира- ется команда Маке (Составить) из меню File (Файл). После компиляции DHTML-приложение называется выполняемым компонентом и может быть запущено в Internet Explorer на вашем собственном компьютере, в корпоративной сети Internet либо в локальной сети. Если вы собираетесь распространять ваше приложение, вам необходимо запустить Мастер со- здания пакета и установочных файлов (Package and Deployment Wizard). Он скомпонует установочные (инсталляционные) диски или файлы развер- тывания для Internet, которые содержат ваше приложение и необходи- мые файлы поддержки и управления. Мастер создания пакета и установочных файлов (Package and Deployment Wizard) находится в папке Microsoft Visual Basic Studio 6.0 Tools, вложенной в папку Microsoft Visual Basic 6.0 в старто- вом меню Windows. В следующем упражнении вы воспользуетесь командой Маке (Составить) для компилирования HTML-страницы и файлов .dll проекта MyDHTML7. Откомпилируем ваш проект 1. В меню File (Файл) выберите команду Маке MyHTML7.dll (Соста- вить MyHTML7.dll). Visual Basic отобразит диалоговое окно Make Project (Составле- ние проекта).
656 Часть 6. Основы программирования приложений для работы с Internet Совет. Чтобы познакомиться с дополнительными возможностями компили- рования для вашего приложения, щелкните на кнопке Options (Опции) в диалоговом окне Make Project (Составление проекта). 2. Задайте папку C:\Vb6Sbs\Less22 (если она не была выбрана) и щелкните на кнопке ОК, чтобы начать процесс компиляции. Через некоторое время появится запрос на имя файла HTML, который будет загружать ваш проект в Internet Explorer. Примечание. I Запрос на имя файла HTML появляется только один раз. Если вы за- I хотите в дальнейшем изменить место назначения откомпилирован- I ных файлов, модифицируйте свойство BuildFile вашего конструктора I страниц Page Designer (объект IDHTMLPagel). I 3. Укажите папку C:\Vb6Sbs\Less22 (если она не была выбрана), введите MyDHTML7.htm и нажмите клавишу | Enter |. Visual Basic завершит компиляцию и поместит файлы в ука- занную вами папку. Если вы хотите подготовить ваше прило-
Урок 22. Добавление элементов и средств управления ActiveX 657 жение для распространения другим пользователям (на диске- тах или через Web-сайт), запустите Мастер создания установочной Программы (Setup and Deployment Wizard). Совет. Для получения более подробной информации о распространении фай- лов DHTML найдите статью Deploying DHTML Applications на вклад- ке Index (Предметный указатель) оперативной справочной системы MSDN Library. Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 23. Если вы хотите завершить работу с Visual Basic >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке Yes (Да). Краткое содержание Чтобы Сделайте следующее Добавить элемент пане- ли инструментов на вашу DHTML-страницу Удалить элемент панели инструментов с DHTML- страницы Добавить на страницу элемент Image (Изобра- жение) Добавить на страницу элемент Button (Кнопка) Щелкните на значке элемента в панели инст- рументов и перетащите мышь на DHTML- страницу в конструкторе страниц Page Designer или Дважды щелкните на значке элемента в пане- ли инструментов. Дважды щелкните на имени элемента в пане- ли со структурой в виде дерева и нажмите кла- вишу | Del |. Дважды щелкните на элементе Image (Изобра- жение) на панели инструментов. Дважды щелкните на элементе Button (Кнопка) на панели инструментов. 22 - Visual Basic 6
658 Часть 6. Основы программирования приложений для работы с Internet Чтобы Сделайте следующее Переместить эле- мент панели инстру- ментов на странице Нажимайте клавиши управления курсором или перетаскивайте элемент с помощью мыши. Скрыть элемент в процессе выполнения программы Нажимайте клавишу [<—] управления курсором, пока элемент не выйдет за левую границу страни- цы. Сконфигурировать элемент панели инст- рументов путем ус- тановки свойств Откройте окно Properties (Свойства) и измените зна- чение нужных вам свойств. Добавить в панель инструментов сред- ство управления ActiveX В меню Project (Проект) щелкните на команде Components (Компоненты), а затем установите фла- жок рядом с именем средства управления, кото- рое вы хотите добавить. Написать процедуру обработки события для элемента Дважды щелкните на элементе на странице, что- бы открыть окно Code (Код), выберите нужное со- бытие в ниспадающем списке Procedures (Процеду- ры) и напишите ваш программный код. Загрузить графику в элемент Image (Изоб- ражение) в ходе ра- боты программы Воспользуйтесь свойством Src элемента. Напри- мер: Image, src = "c:\vb6sbs\less22\coins.wmf" Изменить содержи- мое текстового эле- мента в ходе выпол- нения программы Используйте свойство InnerText. Например: I\lum1 .InnerText = lnt(Rnd * 10) Отформатировать текст в элементе в ходе выполнения программы Воспользуйтесь установкой свойств для элемента. Например: Num.Style.Color = "blue" Сохранить значение в памяти в момент загрузки или выгруз- ки других страниц Используйте функцию PutProperty для сохранения значения в портфеле свойств Property Bag DHTML. Например: PutProperty "Wins", x + 1
Урок 22. Добавление элементов и средств управления ActiveX 659 Чтобы Сделайте следующее Извлечь значение из памяти и скопиро- вать его на DHTML- страницу Используйте функцию GetProperty для извлечения значения из портфеля свойств Property Bag DHTML. Например: х= GetPropertyf'Wins") Запустить DHTML- приложение в Visual Basic Щелкните на кнопке Start (Пуск) на панели инст- рументов или нажмите клавишу |~F5~|. Откомпилировать DHTML-страницу и В меню File (Файл) щелкните на команде Маке (Со- ставить). DLL Скомпоновать DHTML-приложение в виде установочных дискет или через Internet Щелкните на кнопке Start (Пуск) Windows, укажи- те на папку Programs (Программы), укажите на пап- ку Microsoft Visual Basic 6.0, укажите на папку Microsoft Visual Studio 6.0 Tools и щелкните на строке Setup and Deployment Wizard.

Дополнительные возможности программирования операций с базами данных

УРОК . в m В В m : Управление : данными : с помощью : средства FlexGrid : (Табличная сетка) В m в в ________________________________ к Вы научитесь: ,/'* л в £S)«I * я С03Давать таблицу с помощью средства FlexGrid (Таблич- “ пая сетка) и использовать ее для отображения записей v в базы данных в форме; v рок рассчитан > сортировать записи базы данных по столбцам; на 30 минут * осуществлять поиск ключевых слов в базе данных и вы- а делять результаты. > ----------------------------—_ * В части 7 вы продолжите изучение возможностей програм- • мирования баз данных, сосредоточив внимание на несколь- , ких инструментах и методах работы с базами данных в про- фессиональной версии Microsoft Visual Basic 6 Professional a Edition. В уроке 13 вы узнали, как использовать средство управления Data (Данные) для отображения в форме полей й базы данных, а также как добавлять, удалять записи и осу- * ществлять их поиск с помощью программных операторов. В й этом и следующем уроке вы узнаете, как отобрать инфор- * мацию из баз данных с помощью средства управления FlexGrid
664 Часть 7. Дополнительные возможности программирования (Табличная сетка), а также как использовать новую технологию для об- работки баз данных ActiveX Data Objects (ADO). В данном уроке вы попрактикуетесь в использовании средства управле- ния FlexGrid (Табличная сетка) ActiveX для создания таблиц в форме Visual Basic. Средство управления FlexGrid (Табличная сетка) ActiveX может быть использовано для отображения таблиц с любым типом данных: текст, числа, даты и даже графика. Однако в этом уроке вы главное внимание уделите использованию средства управления FlexGrid для отображения по- лей и записей двух баз данных Microsoft Access: Students.mdb и Biblio.mdb. Средство управления FlexGrid (Табличная сетка) преобразует поля и за- писи базы данных соответственно в столбцы и строки электронной таб- лицы. С помощью средства управления FlexGrid (Табличная сетка) вы мо- жете выполнять множество различных типовых для электронных таблиц операций, таких как выделение ячеек, изменение ширины столбцов, вы- равнивание заголовков и форматирование текста. Вы начнете с простей- ших операций ввода текста, выделения данных и применения опций фор- матирования. Затем вы перейдете к применению средства управления FlexGrid (Табличная сетка) для работы с базами данных, отображению таб- лиц баз данных, сортировке записей и глобальному поиску задаваемой пользователем текстовой строки. Использование средства управления FlexGrid (Табличная сетка) для выполнения типичных операций обработки электронных таблиц FlexGrid (Табличная сетка) является средством управления ActiveX, вклю- ченным в профессиональную (Professional) и коммерческую (Enterprise) версии Visual Basic. Прежде чем вы сможете использовать средство уп- равления FlexGrid (Табличная сетка) в вашем проекте, вам необходимо до- бавить его в панель инструментов вашего проекта, выбрав элемент Microsoft FlexGrid 6.0 (файл msflxgrd.ocx) с помощью команды Components (Компонен- ты) из меню Project (Проект). Средство управления FlexGrid (Табличная сет- ка) предоставляет множество традиционных для работы с электронными таблицами возможностей. Вы можете использовать его для создания сче- тов, расчета налогов, ведения бухгалтерских книг, учета материалов и запасов и т. д. Помимо этого, Microsoft предусмотрела применение сред- ства FlexGrid (Табличная сетка) в качестве структуры с ограничителя- ми, способной отображать информацию из баз данных, полученную с по- мощью средства управления Data (Данные), которое содержится в этой
Урок 23. Управление данными с помощью средства FlexGrid 665 же форме. Если вы хотите быстро отобразить информацию из базы дан- ных в оригинальном табличном формате, средство управления FlexGrid (Табличная сетка) будет для вас полезным инструментом. Примечание. В профессиональную версию Visual Basic 6 также включено дополни- тельное средство управления электронными таблицами с именем Hierarchical FlexGrid ActiveX (файл mshflxgd.ocx). Это средство управления используется таким же образом, что и средство FlexGrid (Табличная сетка) и содержит те же основные свойства, функции и события. Од- нако средство управления Hierarchical FlexGrid (Иерархическая таблич- ная сетка) работает только совместно с объектами данных ActiveX Data Objects (ADO), но не со стандартным средством управления Data (Дан- ные) в Visual Basic. Термин «иерархическая» означает, что средство управления способно отображать иерархические наборы записей — I т.е. группы записей, полученные из более чем одной таблицы в базе | данных. I Понятие столбцов и строк Таблица, получаемая при использовании средства управления FlexGrid (Таб- личная сетка), представляет собой форму, содержащую таблицу с гори- зонтальными строками и вертикальными столбцами. По умолчанию верх- няя строка и крайний левый столбец резервируется для заголовков строк и столбцов и отображаются с фоновой заливкой. Вы можете использовать свойство Rows для задания количества строк в таблице, а свойство Cols - для задания количества столбцов. На следующем рисунке представлена форма, содержащая табличную сетку FlexGrid с 8 строками и 5 столбцами. йй. Табличная сетка
666 Часть 7. Дополнительные возможности программирования Табличные данные, обрабатываемые средством управления FlexGrid (Таб- личная сетка), представляются в виде двухмерного массива. В качестве первой координаты в таблице используется номер строки, а в качестве второй координаты в таблице используется номер столбца. Например, ячейка в левом верхнем углу таблицы имеет адрес 0, 0 (строка 0, стол- бец 0). Чтобы поместить значение в ячейку таблицы FlexGrid, вам нужно выбрать свойство TextMatrix и задать координаты ячейки и значение. Вы можете задавать любые данные числового или символьного типа. Например, что- бы поместить слово «Боб» в ячейку 3,1 (строка 3, столбец 1), вы должны применить следующий программный оператор: MSFIexGridl .TextMatrix (3,1) = "Боб" Добавление текста в ячейку производится с помощью свойства TextMatrix. Чтобы ввести число 1500 в ячейку 2, 1 (строка 2, столбец 1), вы должны использовать следующий синтаксис: MSFIexGridl.TextMatrix (2,1) = 1500 Вставка графики в ячейки Вы можете также добавлять графику в ячейки таблицы с сеткой FlexGrid с помощью оператора Set, свойства CellPicture и функции LoadPicture. Допус- кается ввод графики в виде значков (.ico), точечных изображений (.bmp) и метафайлов Windows (.wmf). Например, следующий программный опе- ратор отображает метафайл Coins.wmf в выделенной ячейке таблицы: Set MSFIexGridl .CellPicture = _ LoadPicture("c:\vb6sbs\less22\coins.wmf”) Добавление графики осуществляется с помощью свойства CellPicture. Когда вы добавляете графику в ячейку, средство управления FlexGrid (Таб- личная сетка) не изменяет автоматически размеры ячейки, чтобы ото- бразить рисунок. Однако вы можете вручную отрегулировать высоту и ширину ячейки с помощью свойств RоwHeight и ColWidth, задав для каждо- го из них значение в условных единицах (twips). Например, следующий оператор увеличивает ширину ячейки в первой строке и в первом столб- це до 2000 единиц. Значения в скобках представляют соответственно те- кущую строку и столбец. MSFIexGrid.RowHeight(l) = 2000 MSFIexGrid.ColWidth(l) = 2000
Урок 23. Управление данными с помощью средства FlexGrid 667 Поместив эти операторы непосредственно над оператором Set, который загружает ваше графическое изображение в свойство CellPictuГе, вы добь- етесь увеличения размеров ячейки, чтобы она могла целиком вместить изображение. Примечание. Когда вы изменяете размеры одной из ячеек в таблице, тем самым вы изменяете и размеры всех ячеек в этой строке и столбце. Выделение ячеек Как и при работе с большинством электронных таблиц, вам нужно выде- лить ячейки, прежде чем вы сможете их отформатировать. С помощью средства управления FlexGrid (Табличная сетка) вы можете выделять либо индивидуальные ячейки, либо область (непрерывный блок) ячеек в тек- сте вашей программы. Для выделения отдельной ячейки просто устано- вите для свойства Row номер строки ячейки, которую вы хотите выде- лить, а для свойства Col - номер столбца этой ячейки. Выделенная ячейка находится на пересечении указанной строки и столбца. Например, чтобы выделить ячейку 1, 1 в таблице, используйте следующие программные оператору: MSFIexGrid1.Row= 1 MSFIexGridl.Col = 1 Выделение ячеек осуществляется с помощью свойств Row и Col. Чтобы выделить область ячеек, вам необходимо указать начальную и ко- нечную точки выделения. Начальной точкой является ячейка, которую вы в последний раз выделили с помощью свойств Row и Col (строка 1, стол- бец 1, см. выше). Конечная точка выделения задается свойствами RowSel и ColSel. Например, следующие программные операторы осуществляют выделение непрерывного блока из 8 ячеек (от ячейки 2, 2 до ячейки 5, 3) с использованием средства управления FlexGrid (Табличная сетка): MSFIexGrid1.Row = 2 MSFIexGridl.Col = 2 MSFIexGridl. RowSel = 5 MSFIexGridl .ColSel = 3 В вашей форме данное выделение будет выглядеть следующим образом:
668 Часть 7. Дополнительные возможности программирования Ячейка 2, 2 (строка 2, столбец 2) Наконец, если вы планируете отформатировать непрерывную область ячеек, вам нужно включить в вашу программу следующий оператор пос- ле операции выделения: MSFIexGridl.FillStyle = flexFillRepeat Значение flexFillRepeat предписывает средству управления FlexGrid (Таблич- ная сетка) отформатировать более одной выделенной ячейки одновремен- но. (Установленное по умолчанию значение flexFilISingle предписывает фор- матировать только одну ячейку за раз.) После выполнения этого оператора вы готовы к осуществлению форматирования выделенных ячеек инди- видуально либо целой группой. Примечание. Вы также можете разрешить пользователю самому осуществлять выделение. Например, вы можете дать ему возможность выделить группу ячеек с помощью средства управления FlexGrid (Табличная сет- ка), а затем щелкнуть на кнопке для изменения стиля текста выде- ленных ячеек на полужирное начертание. Вы также можете устанав- ливать режим доступа пользователей к ячейкам таблицы в ходе выполнения программы путем задания значений свойства SelectionМode. Здесь возможны три варианта: flexSelectionFree (обычное выделение), flexSelectionByRow (выделение только строк) и flexSelectionByColumn (вы- деление только столбцов). Форматирование ячеек Средство управления FlexGrid (Табличная сетка) обеспечивает множество стандартных стилей форматирования ячеек, которые используются в коммерческих приложениях для работы с электронными таблицами. К таким стилям относятся полужирное, курсивное и подчеркнутое начер- тание; выравнивание текста в столбцах; задание гарнитуры и размера шрифта; цвет символов и цвет фона. В приведенной ниже таблице пред-
Урок 23. Управление данными с помощью средства FlexGrid 669 ставлены наиболее важные и доступные вам опции форматирования. Да- лее в этом уроке вы попрактикуетесь в установке этих свойств. Свойство Пример CellFontBold MSFIexGridl.CellFontBold = True CellFontltalic MSFIexGridl .CellFontltalic = True CellFontUnderline MSFIexGridl .CellFontUnderline = True CellAlignment MSFIexGridl.CellAlignment = flexAlignRightCenter CellFontName MSFIexGridl .CellFontName = "Courier New" CellFontSize MSFIexGridl .CellFontSize = 14 CellForeColor MSFIexGridl. CellForeColor = “red" CellBackColor MSFIexGridl .CellBackColor = "blue" Добавление новых ячеек Когда вы используете средство управления FlexGrid (Табличная сетка) для создания счетов, статей в бухгалтерских отчетах и других табулирован- ных документов, вам пригодится возможность добавления новых строк в нижнюю часть вашей таблицы. Этого можно добиться с помощью функ- ции Additem. Функция Additem работает со средством управления FlexGrid (Табличная сетка) точно так же, как со средствами управления ListBox (Поле со списком) и ComboBox (Поле с ниспадающим списком). Вы задаете количество элементов, которые хотите добавить, отделяя информацию для каждого столбца символом табуляции (константа vbTab). Например, чтобы добавить новую строку в нижнюю часть таблицы, которая содер- жит некую информацию (начиная со второго столбца), используйте сле- дующий код: Dim Row As String Row = vbTab & "Футбольный мяч" & vbTab & "W17-233" & vbTab & "34.95" MSFIexGridl.Additem Row Добавление строк происходит с помощью функции Additem. Как показано на следующем рисунке, этот оператор создает новую стро- ку, содержащую данные о футбольном мяче.
670 Часть 7. Дополнительные возможности программирования Использование средства управления FlexGrid (Табличная сетка) для представления данных по продажам Теперь, когда вы познакомились с некоторыми свойствами и функциями средства управления FlexGrid (Табличная сетка), вы попрактикуетесь в создании сводной таблицы продаж за два квартала, учитывающей дан- ные по регионам. 1. Запустите Visual Basic и откройте новый стандартный про- ект. 2. Увеличьте размеры окна Project Container (Содержание проек- та) и окна Form (Форма), чтобы ваша форма имела достаточные размеры для отображения таблицы, состоящей из нескольких строк и столбцов. 3. В меню Project (Проект) щелкните на команде Components (Ком- поненты), а затем щелкните на вкладке Controls (Средства уп- равления). Средства управления ActiveX, зарегистрированные в реестре вашей системы, будут отображены в диалоговом окне Components (Компоненты). 4. Установите флажок рядом со строкой Microsoft FlexGrid Control 6.0 и щелкните на кнопке ОК. Visual Basic добавит средство управления FlexGrid (Табличная сетка) в вашу панель управления.
Урок 23. Управление данными с помощью средства FlexGrid 671 5. Щелкните на средстве управления FlexGrid (Табличная сетка) в панели инструментов и создайте большую таблицу в вашей форме. Средство управления FlexGrid (Табличная сетка). 6. Дважды щелкните на средстве управления CommandButton (Командная кнопка) на панели инструментов. В вашей форме появится командная кнопка с размерами, ус- тановленными по умолчанию. 7. Перетащите командную кнопку ниже таблицы. 8. Воспользуйтесь окном Properties (Свойства) для изменения значения свойства Caption объекта типа командная кнопка на «Добавить». 9. Воспользуйтесь окном Properties (Свойства) для изменения значения свойства Cols объекта MSFIexGridl на 4. Свойство Cols содержит количество столбцов, которое отобра- жается в вашей таблице. (Вы можете изменить это значение в программном коде в процессе выполнения программы.) Ваша форма будет иметь примерно следующий вид: ’Добавить
672 Часть 7. Дополнительные возможности программирования Напишем программу для объекта FlexGrid (Табличная сетка) В этом упражнении вы напишете программный код, который создает таб- лицу продаж с помощью объекта FlexGrid. 1. Дважды щелкните мышью на форме, чтобы открыть в окне Code (Код) процедуру обработки события Form_Load. 2. Введите следующий программный код: With MSFIexGridl 'использование оператора “усеченной" записи "With" 'Создание заголовков для столбцов 1 и 2 ,TextMatrix(O,1) = "Q1 1999" .TextMatrix(O, 2) = ”02 1999" 'Выделение заголовков .Row = О .Col = 1 .RowSel = О .ColSel = 2 'Форматирование заголовков полужирным и выравнивание по центру .FillStyle = flexFIIIRepeat 'заполнение всей выделенной области .CellFontBold = True .CellAlignment = flexAlignCenterCenter 'Добавление трех элементов в первую строку .TextMatrix(1,0) = "Международный" 'заголовок столбца (0) .TextM atrix( 1, 1) = “55000" 'столбец 1 .TextMatrix(1,2) = “83000" 'столбец 2 End With Программные операторы в этой процедуре обработки события выполня- ются, когда Visual Basic запускает программу и загружает первую форму в память. В этих операторах использовано несколько приемов и методов ввода и управления информацией для объекта типа табличная сетка: помещение текста в отдельные ячейки, выделение группы ячеек, форма- тирование ячеек с заданием полужирного начертания шрифта, а также выравнивание текста в каждой из ячеек выделенной области по центру. Особого интереса здесь заслуживает оператор With (с которым вы позна- комились в уроке 11), который позволяет вам избавиться от рутинного ввода имени объекта MSFIexGrid каждый раз, когда вы хотите получить доступ к одному из его свойств или функций. Помните, что каждый раз, когда вы используете оператор With для «усеченной» записи, вы должны заключить следующий за ним фрагмент программного кода оператором End With.
Урок 23. Управление данными с помощью средства FlexGrid 6^73 3. Щелкните на ниспадающем списке Object (Объекты) в окне Code (Код) и выделите объект Commandl. 4. В процедуру обработки события Command1_C!ick введите сле- дующий программный код: With MSFIexGridl 'Добавление четырех записей в таблицу после каждого щелчка мышью .Additem "Север" & vbTab & “45,000" & vbTab & “53,000" .Additem "Юг" & vbTab & "20,000" & vbTab & "25,000” .Additem "Восток" & vbTab & "38,000" & vbTab & "77,300" .Additem “Запад" & vbTab & "102,000" & vbTab & "87,500” End With Программные операторы в этой процедуре обработки события выполняются, когда пользователь щелкает на кнопке Add Rows (Добавить строки) в форме. Команда Additem создает новую стро- ку в объекте типа табличная сетка и заполняет данными пер- вые три столбца. Константа vbTab отмечает начало нового стол- бца в таблице. 5. В меню File (Файл) щелкните на команде Save Project As (Сохранить проект как). Сохраните вашу форму под именем MySaleGricLf rm, а ваш проект сохраните под именем MySaleGrid.vbp. Запустим программу MySaleGrid Теперь вы запустите программу, чтобы посмотреть, как средство управ- ления FlexGrid (Табличная сетка) отображает данные в таблице. 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа загрузит и отобразит объект типа табличная сет- ка с двумя заголовками столбцов и с одной строкой данных. (Эти записи и способ их форматирования определены в процедуре обработки события Form_Load.) 2. Щелкните на кнопке Добавить. Проект SaleGrid.vbp содержится в папке \Vb6Sbs\Less23 на вашем диске. Visual Basic добавит в вашу таблицу четыре строки с данными по объемам продаж. (Эти ячейки были созданы с помощью ко- манды Additem в процедуре обработки события Command1_Click.) Ваша форма будет выглядеть, как показано на рисунке:
674 Часть 7. Дополнительные возможности программирования 3. Щелкните на кнопке Добавить еще два раза. Visual Basic добавит в вашу таблицу еще восемь строк. Справа от таблицы появится полоса прокрутки, обеспечивающая дос- туп к строкам, которые в данный момент не видны. 4. При желании продолжите добавление строк и воспользуй- тесь полосами прокрутки для доступа к их содержимому. За- кончив, щелкните на кнопке Закрыть в строке заголовка окна формы. Работа программы будет завершена. Использование средства управления FlexGrid (Табличная сетка) для отображения записей базы данных Как вы, вероятно, заметили, последовательное добавление по одной за- писи в таблицу с помощью средства управления FlexGrid (Табличная сет- ка) может оказаться довольно обременительной операцией. Однако, свя- зав средство управления FlexGrid (Табличная сетка) с соответствующим образом сконфигурированным средством управления Data (Данные) в ва- шей форме, вы получите дополнительные мощные возможности обработки
Урок 23. Управление данными с помощью средства FlexGrid 675 информации и представления ее в табличной форме. Взаимодействие средства управления Data (Данные) со средством управления FlexGrid (Таб- личная сетка) осуществляется путем установки свойств. Для этого вам нужно указать для свойства DataSource средства управления FlexGrid (Таб- личная сетка) значение, которое является именем средства управления Data (Данные) в вашей форме. Если вы установите эту связь, ячейки объек- та типа табличная сетка будут автоматически заполняться записями базы данных. В следующем упражнении вы откроете и запустите программу Просмотр данных, которая демонстрирует, как вы можете отображать записи базы данных в вашей форме с использованием средства управления FlexGrid (Табличная сетка). Программа Просмотр данных представляет записи базы данных в виде таблицы и обеспечивает доступ к ним с помощью полос прокрутки. Кроме этого, программа демонстрирует выполнение двух опе- раций, которые особенно удобны при работе с большими базами данных: функцию сортировки, осуществляющей упорядочивание записей базы данных по столбцам, а также функцию поиска, которая просматривает содержимое базы данных для нахождения ключевых слов и выделяет их. Программа Просмотр данных является дополнением проекта Courses.vbp, раз- работанного нами в уроке 13 для добавления, удаления и поиска записей в базе данных Microsoft Access с именем Students.mdb. В программе Про- смотр данных вы также получите возможность отображать содержимое вашей базы данных в виде таблицы и представления на экране результа- тов операции сортировки и поиска. Запустим программу Просмотр данных 1. Откройте проект DataGrid.vbp, который содержится в папке C:\Vb6Sbs\Less23. Если появится запрос, хотите ли вы сохранить изменения в проекте MySaleGrid, щелкните на кнопке Yes (Да). ; 2. Щелкните на кнопке Start (Пуск) для запуска программы Про- смотр данных. Visual Basic загрузит форму DataGrid, которая содержит интер- фейс пользователя, похожий на тот, который использовался в форме DelRec.frm, созданной вами в уроке 13. Новая кнопка Сетка используется для открытия второй формы, которая содержит объект типа табличная сетка.
676 Часть 7. Дополнительные возможности программирования Просмотр данных Список курсов университета |1<) <| (Students mdb> Лектор Факаяьтет (Языкознание | Васи пьез Петр |аЙглийский язык |ПнСрП1 00 Найти j| Добавить | Сетка | Удалить | Выход | 3. Щелкните на кнопке Сетка. Visual Basic откроет вторую фор- му GridView.frm) и использует объект типа табличная сетка для отображения таблицы Students, содержащей информацию из базы данных Students.mdb. Ваша форма будет выглядеть подоб- но представленной на рисунке: Просмотр с сеткой iov| PostalCc FitstNanre jLaslHame (Address 1 Нина Язловицка: Ленинский Москва : j 113122 2 Тимофей Смирнов Знаменска Санкт-Пете; j 98401 3 Борис Кирилов Цветочная Екатеринби; i 98033 4 Маргарита Павлова Речной про Саратов j98052 5 Максим Данилов Невский пр Санкт-Пете^ i98105 6 Елена Неклюева Гоголевски Москва i98034 : 7 Денис Пухов Перовская Москва 98128 |Москва Сортировка j - Объект типа табличная сетка автоматически загружает за- писи из базы данных Students.mdb в этой программе — для копи-
Урок 23. Управление данными с помощью средства FlexGrid 677 рования отдельных строк из базы данных нет необходимости использовать какие-либо программные операторы. 4. Переместите указатель мыши в верхнюю строку таблицы на границу между заголовками столбцов Address и City. Указатель мыши примет вид размерного маркера. Если для свойства AllowU se Г Resizing средства управления FlexGrid (Табличная сетка) установлено значение 1 - flexResizeCoIumns, пользователь может изменять ширину столбцов в электронной таблице. 5. С помощью размерного маркера увеличьте ширину столбца Address (Адрес). Столбец «раздвинется» и будет занимать боль- ше места, чтобы содержащаяся в нем информация была цели- ком видима. В большинстве случаев следует предоставлять пользователю такую возможность. Теперь испробуем функции сортировки и поиска. 6. Щелкните на кнопке Сортировка в окне формы Просмотр с сеткой. Объект типа табличная сетка осуществит сортировку строк в электронной таблице, располагая данные в ячейках столбца фа- милий LastName в алфавитном порядке. (Как вы увидите в даль- нейшем, содержимое этого столбца используется в программ- ном коде в качестве ключа сортировки.) Как показано на рисунке, результаты выполнения сортировки легко увидеть, поскольку в первом столбце (StudentiD) сохранились изначальные порядковые номера записей (хотя теперь этот порядок изменился). «<. Просмотр с сеткой ' SWeriiiD j FirslNarrie j 1аЙ4аи» | jSddress j git? | PoslalCt 5 3 6 4 7 2 Максим : Данилов Невский пр- Санкт-Пете; i9S105 Борис Кирилов : Цветочная ; Екатеринб!;- \98033 Елена : Неклюева Гоголевски Москва 598034 Маргарита : Павлова • Речной про; Саратов ‘ 98052 Денис Т имофей Нина ; Пухов Смирнов Язловицка •• Перовская = : Знаменска • Ленинский Москва Санкт-Пете; Москва .98128 i 98401 ‘113122
678 Часть 7. Дополнительные возможности программирования Примечание. Истинный, внутренний порядок размещения информации в базе дан- ных Students.mdb в процессе выполнения операции сортировки не из- менился — изменилось лишь содержимое отображаемой электронной таблицы. Связь между средством управления Data (Данные) и сред- ством управления FlexGrid (Табличная сетка) односторонняя, поэтому при изменениях в объекте типа табличная сетка содержимое базы данных не обновляется. 7. Щелкните на кнопке поиска текста Найти в окне формы Про- смотр с сеткой. Visual Basic начнет просмотр содержимого электронной табли- цы для поиска текста, указанного в окне (в настоящее время текста «Москва», который по умолчанию помещен в текстовое окно). Через некоторое время текст в каждой ячейке, в которой находится слово «Москва», будет выделено полужирным. 5 Максим Данилов Невский пр Санкт-Пете; 198105 i 3 Борис Кирилов Цветочная Екатеринб^ \ 98033 6 Елена Неклюева Гоголевскк Москва ; 98034 4 Маргарита Павлова Речной про Саратов s 98052 7 Денис Пухов Перовская Москва ! 98128 2 Т имофей Смирнов Знаменска Санкт-Пете; s98401 ; 1 Нина Язловицка Ленинский Москва 113122 f Наиги Если вы обратили внимание, после щелчка на кнопке Найти в нижней части окна формы на короткое время появляется шка- ла индикатора хода выполнения операции сортировки. Я доба- вил ее в форму, чтобы пользователь мог иметь визуальную «об- ратную связь» при выполнении достаточно длительной операции сортировки (например, для базы данных, состоящей
Урок 23, Управление данными с помощью средства FlexGrid 679 из нескольких тысяч записей), но поскольку эта база данных очень мала, шкала индикатора быстро исчезает. С подобной шкалой индикатора хода выполнения вы столкнетесь в упраж- нении из раздела «Шаг вперед», когда будете осуществлять поиск текста в гигантской базе данных Biblio.mdb. 8. Щелкните на текстовом поле в форме, удалите ее текущее содержимое (Москва), введите ен и щелкните на кнопке Найти. На этот раз Visual Basic выделит четыре ячейки, содержащие символы «ен». Поскольку я использую функцию InStr, при по- иске обнаруживаются и частичные вхождения указанного тек- ста. (Другими словами, в результате операции поиска будут выделены слова, которые содержат буквы «ен», например, «Елена».) 9. Щелкните на кнопке Закрыть в окне формы Просмотр с сеткой, а затем щелкните на кнопке Выход в окне формы Просмотр данных. Программа будет закрыта, и вы вернетесь в среду программиро- вания. Расширенные операции сортировки и поиска Программа DataGrid (Таблица данных) может осуществлять сортировку и поиск по всей таблице базы данных, благодаря использованию ряда по- лезных возможностей средства управления FlexGrid (Табличная сетка) и нескольким процедурам обработки событий. Сортировка управляется свойством Sort средства управления FlexGrid (Табличная сетка), которое дает возможность сортировать таблицу по одному или более ключевым столбцам и в соответствии с аргументом направления поиска. Для того, чтобы программа могла осуществлять поиск, требуется написать несколь- ко больший фрагмент программного кода, в основе которого лежат два вложенных цикла For...Next и функция InStr, которая выполняет сравне- ние содержимого каждой ячейки с искомой строкой. В следующем упраж- нении вы увидите, как работают эти процедуры обработки события. Изучим исходный код программы DataGrid (Таблица данных) 1. Откройте окно с кодом Form2 Code и отобразите текст проце- дуры обработки события cmdSort_Click. Вы увидите следующий программный код:
680 Часть 7. Дополнительные возможности программирования Private Sub cmdSort_Click() 'Установка в качестве ключа столбца 2 (LastName) MSFIexGridl.Col = 2 'Сортировка по возрастанию MSFIexGridl.Sort = 1 End Sub Свойство Sort инициирует сортировку. В этой простой процедуре обработки события используются два про- граммных оператора для сортировки всего содержимого базы данных в объекте типа табличная сетка. Первый оператор устанавливает второй столбец в качестве ключа сравнения при сортировке. Я выбрал поле LastName, поскольку упорядочение списков чаще всего осуществляется по фамилии, однако можно выбрать и любой другой столбец в таблице базы данных. Непосредственно сортировка выполняется свойством Sort с аргу- ментом в виде целого числа от 0 до 9, указывающего направление сорти- ровки. Я выбрал аргумент 1 (сортировка по возрастанию с учетом типа), что предполагает осуществление сортировки в алфавитном порядке с попыткой выявить, содержит ли ячейка числовое или символьное значе- ние, перед началом сортировки. Другими часто применяемыми аргумен- тами являются 2 (по убыванию с учетом типа), 3 (числовая по возраста- нию) и 4 (числовая по убыванию). При числовой сортировке перед началом сортировки символы преобразуются в числа (их эквиваленты в ASCII- кодах). 2. Откройте в окне Code (Код) процедуру обработки события cmdFindText_Click. Вы увидите следующий программный код: Private Sub cmdFindTxt_Click() 'Выделение всей таблицы и удаление форматирования полужирным ‘(чтобы удалить результаты предыдущего поиска) MSFIexGridl .FillStyle = flexFillRepeat MSFIexGridl .Col = О MSFIexGridl .Row = 0 MSFIexGridl.ColSel = MSFIexGridl .Cols - 1 MSFIexGridl .RowSel = MSFIexGridl .Rows -1 MSFIexGridl.CellFontBold = False 'Инициализация объекта ProgressBar для индикации хода поиска ProgressBarl.Min = 0 ProgressBarl .Max = MSFIexGridl .Rows -1 ProgressBarl .Visible = True
Урок 23. Управление данными с помощью средства FlexGrid 681 'Поиск ячеек, содержащих заданный текст MSFIexGridl.FillStyle = flexFillSingle For i = 0 To MSFIexGridl .Cols - 1 For j = 1 To MSFIexGridl.Rows - 1 'Отображение в шкале индикатора хода выполнения ProgressBar текущего номера строки ProgressBarl.Value = j 'Если в текущей ячейке найден искомый текст If lnStr(MSFIexGrid1 .TextMatrixfj, i), _ Textl .Text) Then '...выделение ячейки и форматирование ее содержимого полужирным MSFIexGridl. Col = i MSFIexGridl.Row = j MSFIexGridl. CellFontBold = True End If Next j Next i ProgressBarl .Visible = False 'скрыть индикатор хода выполнения ProgressBar End Sub Процедура обработки события cmdFindText_Click запускается, когда пользователь щелкает мышью на кнопке поиска текста Найти в окне формы Form2. Назначением процедуры является сравнение содержимого каждой ячейки в объекте типа таб- личная сетка с искомым текстом, заданным в текстовом поле Textl, а также изменение стиля начертания шрифта на полу- жирное для ячеек, содержащих искомый текст. Прежде всего, процедура обработки события сбрасывает форматирование по- лужирным, примененное для каких-либо из ячеек в таблице, путем выделения всей электронной таблицы и изменения зна- чения свойства CellFontBold на False (Ложь). Затем процедура ини- циализирует объект типа индикатор .хода выполнения для ото- бражения в графическом виде информации о ходе процесса поиска (шкала в нижней части окна формы). Шкала индикато- ра при этом заполняется для каждого столбца в таблице. Собственно поиск в таблице реализуется с помощью двух цик- лов For...Next: один цикл осуществляет перебор строк в табли- це, а другой цикл - перебор столбцов. Далее в циклах исполь- зуется свойство TextMatrix и функция InStr для сравнения содержимого ячейки с текущей позицией (j, i) с искомой тек- стовой строкой (Textl .Text). Если соответствие установлено, свой-
682 Часть 7. Дополнительные возможности программирования ство CellFontBold задает для данной ячейки полужирное начер- тание текста. 3. Закройте окно Code (Код). Мы завершили рассмотрение исходного кода программы DataGrid (Таблица данных). I Установка свойств объектов в программе DataGrid (Таблица данных) Прежде, чем выйти из программы DataGrid (Таблица данных), обрати- те внимание на несколько важных установок свойств для объекта Form2 s (G ridView.f rm). Они определяют связь между объектом типа табличная | сетка и объектом типа данные. | Объект типа табличная сетка. Для свойства FixedCols установлено зна- I чение 0, чтобы не выводить столбец заголовков в электронной табли- I це. (В таблице данных Студенты (Students) столбец заголовков не ис- I пользуется.) Первая строка и первый столбец в табличной сетке по | умолчанию закрашены серым, но вы можете удалить это «затемне- I ние», установив для свойств FixedCols и FixedRows значение 0. [Объект типа данные. Для свойства DatabaseName данного объекта ус- тановлено значение C:\Vb6Sbs\Less3\Students.mdb, а для свойства RecordSource - значение Students. Для свойства Visible установлено зна- чение False (Ложь), чтобы скрыть интерфейс пользователя для данно- го средства управления. В этом проекте имеются два средства управ- ления Data (Данные), указывающие на одну и ту же базу данных (что вполне допустимо в Visual Basic). Как вы увидите в упражнении из раздела «Шаг вперед», вы также можете использовать средства уп- I равления Data (Данные), указывающие на различные базы данных. Шаг вперед: операция поиска в базе данных Biblio.mdb Программа DataGrid (Таблица данных) послужила полезной иллюстраци- ей к материалам, изложенным в этом уроке. Прежде чем вы перейдете к следующему уроку, было бы неплохо продемонстрировать, как средство управления FlexGrid (Табличная сетка) работает с большими базами дан- ных. При написании ваших собственных приложений для работы с база- ми данных всегда бывает полезно проверить действие предусмотренных
Урок 23. Управление данными с помощью средства FlexGrid 683 вами инструментов, прежде чем задействовать их для обработки слож- ных и ответственных баз данных. Попробуем внести исправления в программу DataGrid (Таблица данных), чтобы она могла работать с базой данных Biblio.mdb - базой данных Access, содержащей более 10000 записей и несколько сложных таблиц. Я хотел бы продемонстрировать вам возможности доступа к двум различным ба- зам данных из одного проекта. Для этого вам нужно сохранить связь объек- та типа данные в форме Forml с базой данных Students.mdb, но изменить связь объекта типа данные в форме Form2 на базу Biblio.mdb. Используем средство управления FlexGrid (Табличная сетка) для отображения записей базы данных Biblio.mdb 1. Отобразите форму Form2 в проекте DataGrid.vbp и выделите в ней объект типа данные. (Проект DataGrid должен быть уже загруженным в среду про- граммирования. Если это не так, загрузите его сейчас из папки C:\Vb6Sbs\Less23.) 2. В окне Properties (Свойства) измените значение свойства DataBaseMame объекта Datal на C:\Vb6Sbs\Extras\Biblio.mdb. 3. В окне Properties (Свойства) щелкните на свойстве RecordSource объекта Datal, а затем щелкните на строке Titles (Заголовки) в списке. Набор Titles (Заголовки) содержит большую группу книг по ком- пьютерному программированию. 4. Дважды щелкните на кнопке Сортировка в окне формы Form2, чтобы открыть процедуру обработки события cmdSort_Click в окне Code (Код). 5. В строке, осуществляющей присвоение для свойства Col зна- чения, которое устанавливает ключевой столбец для сортиров- ки, замените 2 на 0. Вы хотите использовать в качестве ключа для сортировки пер- вый столбец в таблице (Titles). Программный оператор будет выглядеть следующим образом: MSFIexGridl .Col = 0 Теперь мы запустим программу.
684 Часть 7. Дополнительные возможности программирования 6. Щелкните на кнопке Start (Пуск) на панели инструментов. Visual Basic отобразит первую форму в вашей программе, ко- торая откроет базу данных Students.mdb и заполнит данными несколько текстовых полей с ограничителями. 7. Щелкните на кнопке Сетка. Visual Basic загрузит базу данных Biblio.mdb в объект типа таб- личная сетка и отобразит таблицу. 8. Воспользуйтесь размерными маркерами, чтобы увеличить ширину первого столбца в объекте типа табличная сетка. Ваша форма будет выглядеть, подобно представленной на ри- сунке: Просмотр с соткпй ИИдЩ та* | a Published ISBN | PublD! -4 dBASE III i A Practical Guide 1335 0-0038307-E; . 4БЭ 1 | The dBASE Programming Language 198G 0-0038326-7 46-: dBASE III Plus 1887 0-0038337-7 46E Database Management: Developing Applies 13S3 0-01319:35-2 715 Wordstar 4.0-6.0 Quick Reference Guide 1330 0-0133656-1 i 4Б0 Oracle Triggers and Stored Procedure Progr. 1336 0-0134436-Si 715 Programming in Clipper 1388 0-0201145-E i 9 Inside Macintosh 1334 0-0201406-7 9 Omni Online Database Directory Structured C for Engineering and Technolog An Introduction to Assembly Language Progi Applied Calculus With Linear Programming: < j | 1Э83 1985 ;1335 1885 0-0207892-Cj 0-0230081-2: 0-0230362-П 00230650-? 15C 715 715 119 >| ' Найти Москва Сортировка Закрыть 9. Щелкните на кнопке Сортировка, чтобы осуществить сорти- ровку таблицы с использованием первого столбца в качестве ключа для сравнения. Через некоторое время база данных будет отсортирована в ал- фавитном порядке. Ваша форма будет выглядеть следующим образом:
Урок 23. Управление данными с помощью средства FlexGrid 685 Просмотр с сеткой (life | at Published! ISBN | 1-2-3 Power MacRos/Book and Disk i 1932- 0-8802280-< 1 -2-3 D atabase Techniques j 1990 0-8802234-Ei 1-2-3 Power Tools (Bantam Power Tools Seri 1991 0-5533496-Ei 1-2-3 Release 2.2 PC Tutor/Book and Disk i 1990 0-8802262-f: 1-2-3 Secrets/Book and Disk i 1333 1-8780587-31 1 -2-3 For Windows Hyperguide/Book and D > 1993 1-5676127-1: 2-D Mmp : Two-Dimensional Multiple Multiply 1930 0-890064 3-C: 3D Studio Special Effects/Book and Cd Ror: 1934 1 -5620530-3: 3D Studio Applied: Tutorials, Tipsand Trick i 1993 0-9298702W 3D Rendering and Visualization/Book and Di 19ЭБ 1-5620530-J; 3D Graphics Programming With Quickdraw Ei 1395 0-2014892-E: 3-D Graphics Programming With Opengi/Boi 1995 0-7897027-7 4 j | 451 13Э| 45 19 19?' lbs! 1861 5001 10. Теперь удалите текст в текстовом поле, введите Book и щел- кните на кнопке Найти. Начнется процесс поиска, и вы увидите, что содержимое не- скольких ячеек в первом столбце будет выделено полужирным. Шкала индикатора хода выполнения в нижней части экрана графически отображает, какая часть работы выполнена на на- стоящий момент, и сколько остается до ее завершения. Такая визуальная обратная связь полезна при осуществлении дли- тельных операций, подобных этой, когда проверяется содер- жимое более 80000 ячеек. (Шкала индикатора хода выполне- ния заполняется по одному разу для каждого столбца.) Через некоторое время (в зависимости от быстродействия вашего ком- пьютера) глобальный поиск в таблице будет закончен, и поло- сы прокрутки вновь станут доступными для использования. Ваша форма будет выглядеть следующим образом:
686 Часть 7. Дополнительные возможности программирования SS, Просмотр с сеткой Title - ] аг Published! 1-2-3 Power MacRos/Book and Disk ; 1-2-3 Database Techniques ' 1 -2-3 Power Tools (Bantam Power Tools Sen 1-2-3 Release 2.2 PC Tutor/Book an; 1-2-3 Secrets/Book and Disk 1-2-3 For Windows Hyperguide/Book 2-D Mmp: Two-Dimensional Multiple Multipo; 3D Studio Special Effects/Book and ; 3D Studio Applied : Tutorials, Tips ar> 3D Rendering and Visualization/Bool; 3D Graphics Programming With Quid 3-D Graphics Programming With llpei 1992' 0-8802280-^ 1990; 0-8802234-Е; 45; 45Г 1991; 0-5533496-Е; 139! 1390; 0-8802262-Е; 451 1993; 1-8780587-3 19i 1Э93 1-5676127-1; 192i 19ЭО;0-8900Б43-(; 109i 1994; 1-5620530-Е; 196; 1993; 0-9298702-'; 500; 1996; 1-5620530-/; 196; 1995; 0-2014892-Е; 1995; 0-7897027-;;" CopTupoar.aj - zz \ 9; 45h Закрыть Найти 11. Попробуйте осуществить прокрутку окна с таблицей - вы увидите, что отображаемая в ней база данных достаточно ве- лика. 12. Закончив просмотр, щелкните на кнопке Закрыть в форме Form2, а затем щелкните на кнопке Закрыть в форме Forml. Если вы хотите перейти к следующему уроку: >- не выходя из Visual Basic, перейдите к уроку 24. Если вы хотите завершить работу с Visual Basic: >- в меню File (Файл) щелкните на команде Exit (Выход). Если появится диалоговое окно Save (Сохранить), щелкните на кнопке No (Нет), чтобы игнорировать внесенные вами из- менения в таблицу.
Урок 23. Управление данными с помощью средства FlexGrid 687 Краткое содержание Чтобы Сделайте следующее Добавить средство управления FlexGrid (Табличная сетка) ActiveX в панель ин- струментов В меню Project (Проект) щелкните на команде Components (Компоненты), а затем щелкните на вкладке Controls (Средства управления). Установите флажок рядом со строкой Microsoft FlexGrid Control 6.0 и щелкните на кнопке ОК. Поместить текст в ячейку табличной сетки FlexGrid Воспользуйтесь свойством TextMatrix. Например, что- бы поместить слово «Боб» в ячейку 3, 1 (строка 3, столбец 1), введите следующий оператор: MSFIexGridl. TextMatrix(3,1) = "Боб" Вставить графи- ческое изображе- ние в ячейку Воспользуйтесь свойством CellPicture. Например: Set MSFIexGridl .CellPicture = _ LoadPicture("c:\vb6sbs\less22\coins.wmf") Выделить ячейку Воспользуйтесь свойствами Row и Col. Например, чтобы выделить ячейку 1, 1 (строка 1, столбец 1), введите следующие операторы: MSFIexGridl .Row = 1 MSFIexGridl .Col = 1 Отформатировать текущие выделен- ные ячейки, задав для них полужирное начертание шрифта Используйте свойство CellFontBold. Например: MSFIexGridl .CellFontBold = True Добавить новую строку Используйте команду Additem. Ячейки в соседних столбцах отделяйте символами табуляции (vbTab). Например: Dim Row As String Row = "Футбол" & vbTab & “ W17-233” MSFIexGridl.Additem Row Отсортировать со- держимое объекта типа табличная сетка по столбцам Используйте свойство Col для задания ключа сор- тировки и укажите для свойства Sort аргумент, оп- ределяющий направление сортировки. Например: MSFIexGridl .Col = 2 'задание в качестве ключа столбца 2 MSFIexGridl .Sort = 1 ‘сортировка по возрастанию
688 Часть 7. Дополнительные возможности программирования Чтобы Сделайте следующее Осуществлять поиск по всему содержимо- му объекта типа таб- личная сетка для на- хождения текста, заданного в объекте типа текстовое поле Используйте функцию InStr внутри циклов For... Next. Например: For i = 0 То MSFIexGridl .Cols -1 For j = 1 To MSFIexGridl .Rows -1 If InStr(MSFIexGrid1 .TextMatrix (j, i), _ Textl .Text Then [операторы, выполняемые, если соответствие найдено] End If Next] Next i
УРОК . Урок рассчитан на 55 минут 8 & £ 8 Исследование : объектов типа 8 данные ActiveX (ADO) я я Ж ------------------------------------ и Вы научитесь: м инсталлировать и использовать средство управления * объектами данных ActiveX (ADO); “ писать программный код для управления ADO-транзак- я циями; создавать ваши собственные объекты данных ActiveX с в помощью конструктора окружения данных Data Environment « Designer. я ж В этом уроке вы познакомитесь с новой технологией • Microsoft работы с базами данных, которая носит название Объекты данных ActiveX (ActiveX Data Objects — ADO). Вы “ узнаете, как инсталлировать и использовать средство уп- равления ADO, как отображать поля и записи базы данных в * вашей форме, а также как писать программы, управляющие ADO-транзакциями. Помимо этого вы узнаете, как создавать * ваши собственные объекты данных ActiveX с помощью спе- я циального инструмента, который носит название Data * Environment Designer (Конструктор окружения данных). Эти « навыки помогут вам при управлении автономными базами данных Microsoft Access, корпоративными базами данных Intranet и распределенными объектами типа база данных в World Wide Web.
690 Часть 7. Дополнительные возможности программирования Знакомство с ADO ADO представляет собой новейшую технологию Microsoft для работы с информацией реляционных и нереляционных баз данных. (Системы уп- равления реляционными базами данных манипулируют информацией в виде таблиц, но не все источники данных соответствуют зтой модели.) Технология ADO не заменяет полностью существующую технологию ра- боты с базами данных - Объекты доступа к данным (Data Access Objects (DAO)) - которую вы уже использовали при изучении материала в этой книге, однако существенно расширяет область применения технологии DAO при программировании. Технология ADO основана на последнем разработанном Microsoft принципе доступа к данным OLE DB, специаль- но предназначенном для обеспечения доступа к широкому спектру раз- личных источников данных, включая традиционные реляционные таб- личные базы данных, системы электронной почты (e-mail), графические изображения, ресурсы Internet и т.д. Технология ADO требует меньшего объема памяти, чем DAO, поэтому она более подходит для сетевых ком- пьютерных систем, которые работают с более жестким траффиком и с более высокими скоростями транзакций. Три метода программирования баз данных Microsoft в разное время предлагала программистам на Visual Basic три различных метода программирования баз данных, и каждый из них полностью поддерживается в Visual Basic 6. Ниже приведено крат- кое описание этих методов. DAO метод объектов для доступа к данным (Data Access Objects — I DAO) представлял собой первый объектно-ориентированный интер- фейс, который давал возможность программистам манипулировать средствами работы с базами данных Microsoft Jet, представляющими собой технологию, используемую для доступа к полям и записям таб- лиц в Microsoft Access и другим источникам данных. Технология DAO все еще популярна и эффективна для локальных приложений обра- ботки баз данных, а также сетей для малых и средних рабочих групп. RDO - метод объектов удаленных данных (Remote Data Objects) пред- ставляет собой объектно-ориентированный интерфейс для работы с источниками информации, поддерживающими открытое соединение с базами данных (Open Database Connectivity - ODBC). RDO являет- ся объектной моделью, используемой большинством разработчиков баз данных, которые интенсивно работают с Microsoft SQL Server, Oracle и другими большими реляционными базами данных.
Урок 24. Исследование объектов типа данные ActiveX (ADO) 691 ADO - метод объектов данных ActiveX (ActiveX Data Objects - ADO) был разработан в развитие методов DAO и RDO и использует схожую объектную модель. В ADO все локальные и удаленные источники дан- ных, доступные для вашего компьютера, представляются в виде про- граммируемых объектов. Вы можете осуществлять доступ к этим объектам с использованием нового средства управления ADO, путем встраивания объектов типа данные в стандартные средства управле- ния Visual Basic и в средства управления ActiveX, путем создания I DHTML-приложений, а также с помощью использования нового кон- I структора окружения данных Data Environment Designer. Microsoft рекомендует программистам на Visual Basic использовать ADO при создании новых приложений для работы с базами данных в Visual Basic. С этой целью в профессиональную версию Microsoft Visual Basic 6 было включено несколько средств, специально разработанных для под- держки технологии ADO. Однако, ADO является достаточно сложной тех- нологией, переходить к изучению которой вы можете лишь после того, как твердо освоили основные принципы программирования при работе с базами данных, описанные ранее в этой книге. Перейдя к технологии ADO, вы сможете по-новому взглянуть на обработку информации в базах дан- ных. Использование средства управления ADO ActiveX Самым простым способом познакомиться с ADO является попытка при- менить новое средство управления ADO для отображения полей и записей базы данных Access в вашей форме. Согласно принципам организации ADO, средство управления ADO не имеет свойства DatabaseName, которое давало вам возможность непосредственно связываться с файлом базы данных, содержащимся на вашем компьютере. Вместо этого средство уп- равления ADO содержит свойство ConnectionString, позволяющее соеди- няться с источником данных ActiveX на вашем компьютере. Ряд диалого- вых окон окажет вам помощь при установлении этого соединения. Вы также сможете создавать новые устраивающие вас объекты данных ActiveX из существующих источников данных с помощью конструктора окруже- ния данных Data Environment Designer. Уяснив практические различия между соединениями ADO и DAO, вы обнаружите много схожего между средством управления ADO и стандар-
692 Часть 7. Дополнительные возможности программирования тным средством управления Data (Данные). В этом уроке вы узнаете, как добавлять средство управления ADO в вашу панель инструментов, как устанавливать значение свойства Connectionstring, а также как отображать записи базы данных в вашей форме. Вы также освоите основы создания программного кода для ADO. Установка средства управления ADO Средство управления ADO представляет собой средство управления ActiveX, которое вам необходимо добавить в вашу панель инструментов, прежде чем вы сможете использовать его в программе. В этом упражне- нии вы инсталлируете средство управления ADO. 1. Запустите Visual Basic и откройте новый стандартный про- ект. 2. В меню Project (Проект) щелкните на команде Components (Ком- поненты), а затем щелкните на вкладке Controls (Средства уп- равления). 3. Прокрутите вниз список, найдите строку Microsoft ADO Data Control 6.0 и щелкните на поле флажка рядом с ней. 4. Щелкните на кнопке ОК, чтобы добавить средство управле- ния ADO в вашу панель инструментов. Visual Basic добавит средство управления ADO, как показано на следующем рисунке: General А R г Р" г? 1Э я (5- £3 23.® Средство управления данными ADO
Урок 24. Исследование объектов типа данные ActiveX (ADO) 693 Теперь вы создадите объект ADO в вашей форме, чтобы отобразить не- сколько записей из базы данных Students.mdb. Создание объекта ADO и средств контроля границ л 1. Щелкните на средстве управления ADO в панели инструмен- ° i тов и создайте небольшой прямоугольник для объекта ADO в вашей форме. Когда вы отпустите кнопку мыши, Visual Basic создаст объект ADO. Ваша форма будет выглядеть следующим образом: I Wj-llAdodci.| ► |й | | йй. Foimt Подобно средству управления Data (Данные), которое вы использовали в уроках 3 и 13, средство управления ADO создает элементы интерфейса для работы с базой данных в виде четырех кнопок со стрелками. В про- цессе выполнения программы, если объект является видимым и установ- лено соединение с соответствующей базой данных, вы можете щелкнуть мышью на первой слева стрелке для перехода к первой записи в базе дан- ных, либо щелкнуть на крайней справа стрелке для перехода к после- дней записи в базе данных. Внутренние стрелки позволяют вам перехо- дить соответственно к предыдущей и последующей записям в базе данных. Примечание. Вы можете изменить текст, отображаемый в поле объекта данных ADO, выделив объект ADO, открыв окно Properties (Свойства) и моди- фицировав свойство Caption.
694 Часть 7. Дополнительные возможности программирования Теперь вы добавите в форму два объекта типа текстовое поле, чтобы отобразить в них значения полей LastName (Фамилия) и PhoneNumber (Номер телефона) из базы данных Students.mdb. 2. Щелкните на средстве управления Т ext В ох (Текстовое поле) в панели инструментов и создайте объект типа текстовое поле ниже объекта ADO. После создания первого объекта щелкните снова на средстве управления ТextBox (Текстовое поле) и создай- те второе поле рядом с первым. Ваша форма будет выглядеть следующим образом: Создание имени источника данных Если бы вы использовали средство управления Data (Данные), вам доста- точно было бы установить для свойства DatabaseName объекта Data (Дан- ные) имя пути к соответствующему файлу базы данных в вашей системе, чтобы установить связь объекта с базой данных. Однако разработчики технологии ADO предусмотрели здесь выполнение еще одного предва- рительного действия, чтобы добиться большей гибкости в дальнейшем. Вам необходимо описать запись базы данных, с которой вы хотите уста- новить связь при создании объекта данных ActiveX Data Object. При созда- нии объектов данных у вас есть три возможности выбора: вы можете со- здать файл OLE DB; вы можете создать ODBC-файл имени источника данных (Data Source Name - DSN); либо вы можете создать связь OLE DB. Конструктор окружения данных Data Environment Designer специально разработан для того, чтобы помочь вам в создании объектов данных ActiveX Data Objects. (Вы проделаете это далее в этом уроке.) В следующем упражнении вы установите связь с базой данных Students.mdb с помощью свойства Connectionstring средства управления ADO. Чтобы спо-
Урок 24. Исследование объектов типа данные ActiveX (ADO)695 собствовать организации связи и обеспечить необходимые объекты дан- ных ActiveX, вы создадите ODBC-файл имени источника данных Data Source Name. Примечание. Вам достаточно один раз создать файл имени источника данных Data Source Name (.dsn) для каждого из источников данных, которые вы на- мереваетесь использовать. После этого вы можете многократно ис- пользовать этот файл для ссылок на соответствующие таблицы дан- ных. Установим значение свойства Connectionstring 1. Щелкните на объекте ADO в вашей форме, откройте окно Properties (Свойства) и щелкните на кнопке в поле значения свой- ства Connectionstring. Появится диалоговое окно Property Pages (Свойства), как показа- но на следующем рисунке: 2. Щелкните на второй кнопке выбора Use ODBC Data Source Name (Использовать имя источника данных ODBC).
696 Часть 7. Дополнительные возможности программирования Вы создадите файл имени источника данных Data Source Name, который ссылается на базу данных Students.mdb. Этот файл вы сможете использовать в дальнейшем. 3. Щелкните на кнопке New (Новый) справа от кнопки выбора Use ODBC Data Source Name (Использовать имя источника данных ODBC). Вы увидите следующее диалоговое окно (первое окно в последовательности): Girdle New Dat<i Sourrp Select a type of data source - ' •: - <♦ -file DataSource (Machine independent) \ User Data Source (Applies tc thu. machine onlyl Г" System Defa Source (Applies to (his macfrihe only) ) Selecting File ['ata Source creUes a tile based data source winch n shareable between all user; with a-cecs to the database В диалоговом окне содержится запрос, каким образом вы хо- тите осуществлять совместный доступ к базе данных, исполь- зуемой в вашей программе на Visual Basic. Первая опция - File Data Source (Файл источника данных) - означает, что ваша база данных будет доступна пользователям с других компьютеров (через локальную сеть или через Internet). Эта опция предос- тавляет вам значительную гибкость, и нет необходимости вы- бирать ее при работе с базами данных в автономной системе (на одном компьютере). Вторая опция - User Data Source (Источник данных пользовате- ля) - означает, что база данных физически размещается на той машине, на которой вы в настоящий момент работаете, и что эта база данных будет использоваться только вами (лицом с вашим именем пользователя). В данном уроке вы выберете вто- рую опцию, поскольку будете создавать простую демонстра- ционную программу для собственного пользования.
Урок 24. Исследование объектов типа данные ActiveX (ADO) 697 Третья опция - System Data Source (Системный источник данных) — означает, что база данных размещается на компьютере, на ко- тором вы работаете, но может быть доступной другим лицам, которые могут использовать информацию с вашего компьюте- ра и которые зарегистрированы в системе под различными именами пользователей. (Популярный способ организации ра- боты с некоторыми рабочими станциями Windows.) 4. Щелкните на второй кнопке выбора - User Data Source (Источ- ник данных пользователя), а затем щелкните на кнопке Next (Далее). Как показано на рисунке, вы увидите запрос о драйвере базы данных, который будете использовать при организации соеди- нения с вашей базой данных. При этом поддерживается не- сколько форматов. Cteate New Data Soutce Name Microsoft dBase Driver (“.dbf) Microsoft Excel Driver (“,xls) ’ rosoft FoxPro Driver (“.dbf) ‘’ losoft Text Driver (“.txt; “.csv) sQL Server Select a driver for which jw want to act tip e data soutce, , f Vision" . . -I Cfefpany^ 3.51.171300 3.51.171300 3.51.171300 3.51.171300 3.51.171300 3.60.0319 Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Advanced... <fiack |. | Cancel | 5. Нужная вам опция Microsoft Access Driver уже выбрана по умолчанию, поэтому щелкните на кнопке Next (Далее) для про- должения. Visual Basic обобщит выбранные вами опции и предложит вам щелкнуть мышью на кнопке Finish (Готово) для продолжения конфигурирования вашего файла имени источника данных Data Source Name. 6. Щелкните на кнопке Finish (Готово).
698 Часть 7. Дополнительные возможности программирования Появится новое диалоговое окно с именем ODBC Microsoft Access 97 Setup (Установка ODBC Microsoft Access 97 Setup). В этом ди- алоговом окне вы можете задать имя файла источника данных Data Source Name, выбрать базу данных, с которой хотите устано- вить связь, и задать параметры соединения. 7. Введите в текстовое поле Data Source Name (Имя источника дан- ных) Students Records. Имя Students Records вы будете использовать в дальнейшем при запросе на ввод имени DSN-файла в диалоговом окне Property Pages (Свойства). 8. Щелкните на кнопке Select (Выбрать), просмотрите содержи- мое папки C:\Vb6Sbs\LessO3, щелкните на базе данных Students.mdb, затем щелкните на кнопке ОК. Ваше диалоговое окно будет выглядеть следующим образом: ODBC Microsoft Access 97 Setup Data Source Name jStudent Records 4 ' Deccrip'iun I , pDatabase-7— --------~ j ' Database c WB6SB5\Less(B\StudenL- mdb НФ | : £r&ste... I " Bep*- j ’ Седраси-> р'ЧЧУ, '] L.--------------------------------------------------------- ...................I _ ' ' ................. ‘ ..Qptiofex.j. ' 9. Щелкните на кнопке OK, чтобы закрыть диалоговое окно. Вновь появится диалоговое окно Property Pages (Свойства). Толь- ко что вы создали новый DSN-файл, поэтому вам остается лишь выбрать пункт DSN из ниспадающего списка ниже кнопки вы- бора Use ODBC Data Source Name (Использовать имя источника дан- ных ODBC).
Урок 24. Исследование объектов типа данные ActiveX (ADO) 699 10. Щелкните на поле с ниспадающим списком Use ODBC Data Source Name (Использовать имя источника данных ODBC), за- тем щелкните на строке Student Records. 11. Щелкните на кнопке ОК в диалоговом окне Property Pages (Свойства) для окончания установки соединения. Диалоговое окно Property Pages (Свойства) закроется, а в окне Properties (Свойства) напротив свойства Connectionstring появится надпись DSN = Student Records. Properties • Adodcl (Adodcl Adodc Alphabetic Categorized | CacheSize [CommandTimeout CommandType iConnectionString iConnectionTimeout iCursorLocation (CursorType :EOFAction 50__________________ 2 - adCmdiable DSN=Student Records ,15 3 - adUseChent ,3 - adOpenStatic 0 - adDoMoveLast Неплохо, не правда ли? Хотя создание файла источника данных Data Source Name требует некоторых дополнительных шагов, у вас появляется значи- тельная свобода в выборе и установке характеристик соединения для каж- дой базы данных. Если вы будете реализовывать на Visual Basic задачи, связанные с управлением сложными базами данных, то в полной мере оцените гибкость, обеспечиваемую применением имени источника дан- ных (DSN). Теперь вы заставите работать установленное вами соединение с базой данных, поместив поля базы данных из объекта ADO в два текстовых поля формы. Поместим данные ADO в объекты типа текстовое поле 1. Сохраняя выбранным объект ADO (adodcl) в окне Properties (Свойства), перейдите к свойству RecordSource и щелкните на кнопке справа от имени свойства RecordSource.
700 Часть 7. Дополнительные возм ожностипрограммирования Снова появится диалоговое окно Property Pages (Свойства), но на этот раз будет отображена вкладка RecordSource (Источник за- писей). При использовании технологии ADO вы обладаете дос- тупом не только к таблицам данных из присоединенной базы данных. У вас есть возможность обращения к процедурным объектам и к текстовым объектам в вашем источнике данных. В технологии ADO объекты ActiveX, которые вы используете, называются командами. В этом упражнении вы выберете тип команд Table (Таблица), который позволит вам осуществить до- ступ к таблицам базы данных Students.mdb, а также к некото- рым другим объектам ADO типа таблиц. 2. Щелкните на ниспадающем списке Command Туре (Тип коман- ды) и выделите строку 2 - adCmdTable. С использованием DSN-файла Visual Basic открывает базу дан- ных Students.mdb и загружает имена таблиц в поле с ниспадаю- щим списком Table Or Stored Procedure Name (Имя таблицы или про- цедуры). 3. Щелкните на поле с открывающимся списком Table Or Stored Procedure Name (Имя таблицы или процедуры), найдите и выде- лите в списке строку Students. Диалоговое окно Property Pages (Свойства) будет выглядеть сле- дующим образом: General] Authentication PecoidSouixe j Color ) Font ] RecordSource Command Type 12 - adCmdTable Table or Stored Procedure Name |___ Command T e/l ISOLj
Урок 24. Исследование объектов типа данные ActiveX (ADO) 701 4. Щелкните на кнопке ОК, чтобы завершить выбор источника записей RecordSource. В окне Properties (Свойства) рядом со свойством RecordSource по- явится имя таблицы Students. 5. Щелкните на объекте Textl в окне Properties (Свойства). Уста- новите для свойства DataSource значение Adodcl, а для свойства DataField - значение LastName. 6. Щелкните на объекте Text2 в окне Properties (Свойства). Уста- новите для свойства DataSource значение Adodcl, а для свойства DataField - значение PhoneNumber. Как вы узнали из предыдущих уроков, связывание стандарт- ных средств управления панели инструментов или средств управления ActiveX с объектом типа данные в форме называет- ся интегрированием данных в средства управления. Теперь запустим созданную вами программу. Запустим программу, демонстрирующую работу средства управления ADO 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Текстовые поля заполняются данными, взятыми из первой за- писи базы данных Students.mdb. Ваша форма будет выглядеть следующим образом: 2. Щелкните несколько раз на правой внутренней стрелке Next (Следующая) объекта ADO.
702 Часть 7. Дополнительные возможности программирования Каждый раз, когда вы щелкаете на стрелке Next (Следующая), в форме отображаются поля LastName и PhoneNumber новой записи. 3. Щелкните на внутренней левой стрелке Previous (Предыду- щая) объекта ADO. В форме будут отображены поля предыдущей записи. 4. Щелкните на внешней правой стрелке Last (Последняя) объек- та ADO. Объект ADO отобразит поля последней записи в базе данных. 5. Щелкните на внешней левой стрелке First (Первая) объекта ADO. Снова будут отображены поля первой записи. 6. Закончив экспериментировать с объектом ADO, щелкните на кнопке Close (Закрыть) в строке заголовка формы Forml. Снова появится среда программирования. 7. В меню File (Файл) щелкните на команде Save Project As (Сохранить проект как). Сохраните вашу форму под именем MyAdoCtrLfrm, а ваш проект сохраните под именем MyAdoCtrLvbp. Теперь вы освоили основные принципы работы с объектами данных ActiveX, настало время познакомиться с правилами написания программного кода для ADO. Написание программного кода для ADO Процедуры обработки событий, управляющие объектами данных ActiveX, являются основой приложений по обработке баз данных, основанных на технологии ADO. Функции, свойства и события, поддерживаемые техно- логией ADO для объектов данных ActiveX, во многом схожи с функциями, свойствами и событиями, характерными для средства управления Data (Данные), с которыми вы познакомились в уроке 13. Например, в обоих случаях вы можете манипулировать информацией посредством набора записей, которые содержат в себе текущую информацию из базы дан- ных, с которой вы в настоящее время работаете. В следующем упражнении вы введете программный код для описания объекта ADO в заготовку программы, которой я присвоил имя AdoData. Программа AdoData является модификацией программы Ado Ctrl, с которой вы работали ранее в этом уроке. В откорректированном виде программа AdoData позволяет пользователю просматривать записи базы данных с
Урок 24. Исследование объектов типа данные ActiveX (ADO) 703 помощью командных кнопок Следующий и Предыдущий, а также копировать в текстовый файл записи из базы данных, содержащие значения указан- ного поля, с помощью двойного щелчка мышью на имени этого поля в спис- ке. (Например, вы можете скопировать в текстовый файл все значения поля фамилии LastName.) Я уже создал для вас законченный пользователь- ский интерфейс в этом проекте ~ вам нужно лишь ввести программный код. Создадим программу MyAdoData 1. Щелкните на кнопке Open (Открыть) в панели инструментов Visual Basic. Если появится запрос, хотите ли вы сохранить из- менения, сохраните их, присвоив проекту имя MyAdoCtrl. 2. Откройте проект AdoForm.vbp, который содержится в папке C:\Vb6Sbs\Less24. 3. В меню File (Файл) щелкните на команде Save AdoForm.frm As (Сохранить AdoForm.frm как), введите MyAdoData и нажмите клавишу | Enter |. Сохранив форму и проект под новыми именами, вы тем самым оставите неизменными оригинальные файлы, которые могут вам пригодиться в том случае, если вы позднее захотите вновь попрактиковаться с ними. 4. В меню File (Файл) щелкните на команде Save Project As (Сохра- нить проект как), введите MyAdoData и нажмите клавишу | Enter |. Ваша форма будет выглядеть следующим образом: «ti. ADO контроль
704 Часть 7. Дополнительные возможности программирования В форме по-прежнему имеется объект ADO и два текстовых поля, но я добавил в нее новый объект типа поле со списком и два объекта типа текстовая метка. 5. Дважды щелкните на командной кнопке Следующий в форме, чтобы открыть процедуру обработки события Command1_Click в окне Code (Код), и введите следующий программный код меж- ду операторами Sub и End Sub: 'Если запись не является последней, перейти к следующей записи If Not Adodcl.Recordset.EOF Then Adodd.Recordset.MoveNext End If Эта простая процедура проверяет значение свойства достиже- ния конца файла EOF и осуществляет в объекте ADO переход к следующей записи, если текущая запись не является после- дней записью в базе данных. Проверяя значение свойства EOF (end of file - конец файла) перед операцией перехода, вы смо- жете избежать ошибки выполнения, которая возникнет, если средство управления ADO попытается осуществить переход к записи, следующей за последней. В данной процедуре средство управления ADO представлено объектом Adodd, который связан с таблицей Students в базе дан- ных Students.mdb. Как составляющая объекта Adodd, свойство набора записей Recordset хранит в памяти таблицу Students и обес- печивает доступ к данным в ней. Этот набор записей в действи- тельности представляет собой не реальные данные из вашей таблицы, а копию данных, с которыми ваша программа рабо- тает в процессе выполнения. Набор записей может быть точ- ной копией таблицы, либо может содержать результаты зап- роса или какие-либо другие избранные данные. 6. Откройте процедуру обработки события Command2_ClickB окне Code (Код) и введите следующий программный код между опе- раторами Sub и End Sub: 'Если запись не является первой, перейти к предыдущей записи If Not Adodd.Recordset.BOF Then Adodd .Recordset.MovePrevious End If Эта процедура обработки события программирует использова- ние кнопки Предыдущий для перемещения на одну запись назад,
Урок24. Исследование объектов типа данные ActiveX (ADO) 705 как только пользователь щелкает мышью на кнопке. Если свой- ство BOF (beginning of file - начало файла) принимает значе- ние True (Истина), команда MovePrevious пропускается, посколь- ку попытка перейти к предыдущей записи, если текущая запись является первой, приведет к ошибке выполнения. 7. Откройте процедуру обработки события Form_Load в окне Code (Код) и введите следующий программный код между операто- рами Sub и End Sub: 'Заполнение поля со списком формы именами полей базы данных For i = 1 То Adodcl.Recordset.FieIds.Count - 1 Listl .Additem Adodcl. Recordset.Fie I d s(i). N am e Next i ‘Отображение общего количества записей Labell .Caption = "Всего записей:" & _ Adodcl. Recordset. RecordCou nt Процедура обработки события Form_Load выполняет две зада- чи. Она добавляет каждое имя поля в таблице Students в объект типа поле со списком (Listl) и отображает общее количество за- писей в базе данных с помощью первого объекта типа тексто- вая метка (Labell). Обе задачи выполняются путем соответству- ющего использования свойств объекта ADO. Я использовал набор Fields для получения как количества по- лей, так и имени каждого из них. Доступ к полям в таблице вы можете осуществить с указанием индекса после имени объек- та Fields. Например, Fields(2) представляет второе поле в табли- це. С помощью цикла For ...Next, который выполняется по одно- му разу для каждого поля базы данных, я копирую имя каждого поля в объект типа поля со списком, чтобы пользователь мог в дальнейшем выбирать его с помощью двойного щелчка мышью. Я использую свойство RecordCount для отображения общего ко- личества записей в форме. Это значение информирует пользователя, сколько записей будет записано на диск, если он дважды щелкнет мышью на имени поля в списке. В учебных целях я ограничил объем базы данных Students.mdb семью запи- сями. (Пользователь должен дважды подумать, прежде чем приступить к копированию 10000 полей из базы данных Biblio.mdb в текстовый файл!) 8. Откройте процедуру обработки события Listl_DblClick в окне Code (Код).
706 Часть 7. Дополнительные возможности программирования 9. Введите следующие программные операторы между опера- торами Sub и End Sub: 'Создание константы для хранения имени файла Const myFile = "c:\vb6sbs\less24\names.txt" 'Открытие файла для добавления данных (с учетом возможности записи данных для нескольких полей Open myFile For Append As #1 Print #1, string$(30,'вывод пунктирной линии Adodd .Recordset.MoveFirst 'переход к первой записи X = Listl .Listindex +1 'идентификация элемента списка, на котором был произведен 'двойной щелчок мышью 'Для каждой записи в базе данных записать содержимое поля на диск For i = 1 То Adodd.Recordset.RecordCount Print #1, Adodd. Recordset. Fields(x) .Vai ue Adodd .Recordset.MoveNext Next i 'Вывод сообщения об успешном выполнении и закрытии файла MsgBox Adodd.Recordset.Fields(x).Name & _ " поле записано в" & myFile Close #1 Adodd .Recordset.MoveFirst ц—g 10. Щелкните на кнопке Save (Сохранить) в панели инструмен- тов Visual Basic, чтобы сохранить внесенные вами изменения. Процедура обработки события Listl_DblClick осуществляет про- цесс сохранения данных, создавая на диске текстовый файл с именем Names.txt. Прежде всего, в процедуре объявляется кон- станта для хранения пути к файлу. Затем открывается файл в режиме добавления данных (Append), чтобы в файл можно было записать более одного значения полей без записи поверх ранее занесенной в файл информации. Для перехода к первой записи в таблице используется команда МoveFirst. Далее определяется поле, на котором пользователь дважды щелкнул мышью. Это делается путем добавления 1 к значению свойства Listindex и присвоения полученного значения переменной X. Listindex явля- ется весьма полезным свойством, которое содержит номер выб- ранного в списке элемента; я инкрементирую значение этого свойства, поскольку необходимо компенсировать тот факт, что начальный элемент в списке имеет нулевой индекс (0). Значение поля записывается на диск с помощью следующего программного оператора:
Урок 24. Исследование объектов типа данные ActiveX (ADO) 707 Print #1, Adodcl .Recordset. Fields(x) .Vai ue Как вам известно, свойство Name набора Fields содержит имя выбранного поля. В данном случае я использую свойство Value для доступа собственно к текстовому содержимому поля. Опе- ратор Print записывает это значение в текстовый файл в виде отдельной строки. Этот оператор повторно выполняется для каждого соответствующего поля в базе данных. Теперь вы запустите программу и посмотрите, как работает созданный вами программный код. Запустим программу AdoData 1. Щелкните на кнопке Start (Пуск) на панели инструментов. Программа AdoData содержится в папке \Vb6Sbs\Less24 на диске. Объект ADO откроет базу данных Students.mdb и отобразит ее поля в двух текстовых полях и в поле со списком формы. Будет также отображено текущее количество полей (7), как представ- лено на следующем рисунке: й.АОО контроль и SB! s mdb [VfHj Всего описей 7 . ]|г1зловицкая |(514) 555-8978 Следящий Г Предыдущий л_________________—— Для Записи дайных из поля вделайте двойной щелчок.' FirstName LastName Address City StateOrProvince 2. Щелкните на кнопке Следующий, чтобы отобразить следую- щую запись в базе данных. 3. С помощью кнопки Следующий можно отобразить следующую запись, точно так же, как зто делается с помощью внутренней правой стрелки средства управления ADO.
708 Часть 7. Дополнительные возможности программирования 4. Щелкните на кнопке Предыдущий, чтобы вновь отобразить пер- вую запись в базе данных. Кнопка Предыдущий работает точно так же, как и внутренняя левая кнопка средства управления ADO. Теперь попробуйте дважды щелкнуть мышью на элементе списка полей, чтобы записать на диск значения данного поля. 5. Дважды щелкните на имени поля LastName в списке. Объект ADO откроет файл Names.txt в папке C:\Vb6Sbs\l_ess24 и скопирует семь последних имен из базы данных Students.mdb в этот файл. После завершения операции копирования вы уви- дите следующее сообщение: snames.M 6. Щелкните на кнопке ОК, а затем дважды щелкните на поле Address в списке. Адреса будут записаны на диск, и вновь появится сообщение о выполнении операции. 7. Щелкните на кнопке ОК, а затем щелкните на кнопке Close (Закрыть) в строке заголовка окна формы. Программа MyAdoData закончит свою работу. 8. Если хотите, можете открыть файл Names.txt, который содер- жится в папке C:\Vb6Sbs\Less24 на вашем жестком диске, и про- смотреть записанный в него текст, представляющий собой зна- чения полей LastName и Address. В Microsoft Word этот файл будет выглядеть следующим об- разом:
Урок 24. Исследование объектов типа данные ActiveX (ADO) 709 § Lister - [c:\VB6SBS\Less24\names.txt] Fife Edit Options Help Нина Тимофей Борис Маргарита Максим Елена Денис Язловицкая Смирнов Кирилов Павлова Данилов Неклюева Пухов Поздравляю! Вы проделали ряд важных шагов в освоении техники рабо- ты с наборами записей и процедурами обработки событий ADO. Совет. Чтобы подробнее узнать об объектной модели ADO, откройте браузер объектов Object Browser и изучите свойства, функции и события, отно- сящиеся к библиотеке MSAdodcLib. Создание объектов данных ActiveX с помощью конструктора окружения данных Data Environment Designer Ранее в этом уроке вы создали файл имени источника данных (Data Source Name - DSN), который связывает базу данных Students.mdb со средством управления данными ADO. Объекты данные ActiveX, поддерживаемые этим файлом, позволяют вам разрабатывать процедуры обработки собы- тий, которые отображают и извлекают поля из таблицы Students базы дан- ных. Вы также можете создавать ваши собственные объекты данных
710 Часть 7. Дополнительные возможности программирования ActiveX Data Objects с помощью новой утилиты, входящей в состав профес- сиональной версии Visual Basic 6 Professional Edition, которая носит на- звание Data Environment Designer (Конструктор окружения данных). Конст- руктор окружения данных (Data Environment Designer) позволяет вам создавать объектные команды, дающие возможность реорганизовывать таблицы, поля и записи базы данных и обрабатывать их с помощью но- вых, более мощных средств. На следующем рисунке показаны взаимо- связи между источниками данных, командными объектами ADO и про- граммой, использующей ресурсы ADO. (В данном случае выбран командный объект Microsoft Access - это только один из возможных ви- дов соединений.) средство управления ADO В качестве заключительного упражнения вы создадите пользовательс- кий объект данных ActiveX с помощью конструктора окружения данных Data Environment Designer. Создадим окружение данных пользователя Чтобы создать пользовательское окружение данных, содержащее объек- ты данных ActiveX для вашего приложения, проделайте следующее: 1. В меню Project (Проект) Visual Basic щелкните на команде Add Microsoft Data Environment 6.0 (Добавить окружение данных Microsoft Data Environment 6.0). Если вы не увидите этой ко- манды в меню, щелкните на строке More ActiveX Designers (Допол- нительные конструкторы ActiveX).
Урок 24. Исследование объектов типа данные ActiveX (ADO) 711 Visual Basic добавит в ваш проект конструктор окружения дан- ных Data Environment Designer. Этот специальный компонент уп- равления данными позволяет вам создавать новые объекты данных ActiveX и использовать их в вашем проекте. Прежде всего вы увидите диалоговое окно Connectionl Properties (Свойства со- единения!), содержащее запрос источника ваших данных. 2. Щелкните на кнопке выбора Use ODBC Data Source Name (Исполь- зовать имя источника данных ODBC), если эта опция не выб- рана, щелкните на строке Student Records в открывающемся спис- ке, а затем щелкните на кнопке ОК. Ранее в этом уроке вы уже создали DSN-файл Student Records. По- явится окно Data Environment (Окружение данных). Окно Data Environment (Окружение данных) позволяет вам про- сматривать ваши текущие соединения и команды ADO. Connectionl представляет собой соединение, которое было уста- новлено, когда вы выбрали источник данных Student Records DSN. Это соединение позволяет вам настраивать режимы доступа к таблицам, полям и записям базы данных Students.mdb. 3. Щелкните на кнопке Add Command (Добавить команду) на па- нели инструментов окна Data Environment (Окружение данных). Кнопка Add Command (Добавить команду) создает новый объект данных ActiveX в окружении данных Data Environment. Чтобы вы могли установить уникальные атрибуты этого объекта данных, Visual Basic отобразит диалоговое окно Commandl Properties (Свой- ства команды!). 4. Введите InstructorTable в текстовом поле Command Name (Имя команды). InstructorTable будет именем для вашего объекта типа набор за- писей при последующем использовании этой команды ADO. 5. Щелкните на поле с открывающимся списком справа от кноп- ки выбора Database Object (Объект базы данных), а затем щелк- ните на имени типа Table (Таблица). Выбрав тип Table (Таблица), вы сообщаете окружению данных Data Environment, что хотите создать объект типа таблица. 6. Щелкните на поле с открывающимся списком Object Name (Имя объекта), после чего щелкните на имени Instructors.
712 Часть 7, Дополнительные возможности программирования Окружение данных Data Environment отобразит список всех таб- лиц в базе данных Students.mdb и выделит таблицу Instructors, ког- да вы щелкнете на ней мышью. 7. Щелкните на кнопке ОК, чтобы создать команду InstructorTable в окружении данных Data Environment. В папке Commands появится новая команда ADO. 8. Щелкните на знаке плюс рядом с командой InstructorTable, что- бы «развернуть» таблицу и увидеть ее поля. Вы создали новый объект данных ActiveX, который можете ис- пользовать в этом проекте или в любом другом проекте, в кото- рый вы добавите конструктор окружения данных Data Environment Designer. Конструктор окружения данных Data Environment Designer хранится в специальном файле с расширением .dsr (по умол- чанию DataEnvironmentl.dsr). Сейчас вы сохраните этот файл на диске, чтобы иметь возможность использовать его в других проектах. 9. Откройте окно Project (Проект) и щелкните на конструкторе DataEnvironmentl. Подобно конструкторам DHTML Designers, конструкторы окруже- ния данных Data Environment Designers содержатся в папке Designers и могут быть сохранены или удалены с помощью команд меню. 10. В меню File (Файл) щелкните на команде Save DataEnvironmentl As (Сохранить DataEnvironmentl как). 11. Введите Instruct и нажмите клавишу | Enter |. Если появится предупреждение, что файл уже существует в вашей системе, выберите новое имя, чтобы оставить без изме- нений оригинальную версию. Совет. I Если вы захотите позднее удалить конструктор Instruct.dsr из вашего I проекта, щелкните на конструкторе Instruct.dsr в окне Project Properties I (Свойства проекта) и щелкните на команде Remove Instruct.dsr (Удалить I Instruct.dsr) из меню Project (Проект). Если вы захотите добавить кон- | структор в проект, щелкните на команде Add File (Добавить файл) из I меню Project (Проект) и укажите имя конструктора. I
Урок 24. Исследование объектов типа данные ActiveX (ADO) 713 Обращение к командам ADO из вашего приложения Подобно объектам данных ActiveX, относящимся к средствам управления ADO, команды ADO, содержащиеся в конструкторах окружения данных Data Environment Designers, могут быть использованы в средствах контроля границ и процедурах обработки событий. Например, в только что создан- ном вами проекте вы можете выбрать объект DataEnvironment1, воспользо- вавшись свойством DataSource в объекте типа текстовое поле. Аналогич- но, вы можете обращаться к командам ADO с помощью программных операторов. Например, чтобы перейти к следующей записи в таблице базы данных с использованием созданного вами ранее объекта DataEnvironmentl, введите следующий оператор: DataEnvironmentl. rsInstructorTable.MoveNext Команда InstructorTable здесь имеет префикс rs, поскольку ссылается на набор записей (recordset), определенный в текущем конструкторе окру- жения данных DataEnvironmentl. Обратите внимание, что эта команда по своему действию примерно эквивалентна оператору MoveNext, который вы ранее использовали для средства управления ADO: Adodcl .Recordset. MoveNext В данном случае, однако, вы ссылаетесь на таблицу Instructors в базе дан- ных Students.mdb с помощью созданного вами в конструкторе окружения данных Data Environment Designer объекта данных ActiveX. Во многих случаях, обращение к данным через ваши собственные объекты данных ActiveX по- зволит сделать ваши программы более понятными и лучше приспособ- ленными к разнообразным источникам данных. Поэкспериментируйте с объектами данных ActiveX, после чего можете применять их в ваших соб- ственных приложениях. Шаг вперед: дополнительные ресурсы для программирования на Visual Basic Поздравляю! Вы завершили изучение курса основ программирования на Microsoft Visual Basic. Просмотрите изученные вами уроки и оцените путь, который вы прошли. Искусство писать эффективно работающие прило- жения на Visual Basic требует умения и навыков. Среди них: доскональ- ное знание и способность на практике применять стандартные средства управления панели инструментов и компоненты ActiveX; умение правиль- но устанавливать и манипулировать свойствами, функциями и события- ми объекта; способность писать ясный и четкий программный код с воз- можностью повторного использования некоторых сегментов программы
714 Часть 7. Дополнительные возможности программирования в дальнейшем; умение создавать наглядный и эффективный интерфейс пользователя. В каждом из уроков данного курса внимание читателя ак- центируется именно на этих принципах программирования. Вы обнару- жите, что сможете немедленно применить полученные вами навыки и знания при изучении содержащихся в этой книге простейших примеров при создании более сложных приложений на Visual Basic для выполне- ния реальных практических задач. ! Внимание! Пожалуйста, откройте и запустите видеоклип Michael.avi, который со- держится в папке Lessl7. [Запустите Windows Explorer (Проводник | Window), найдите и откройте папку C:\Vb6Sbs\Less17, а затем дважды I щелкните мышью на файле Michael.avi.] Вы услышите мой поздрави- тельный тост. Секрет, как стать профессиональным разработчиком программ на Visual Basic, состоит в том, чтобы писать программы, требующие от вас приме- нения самых разнообразных возможностей Visual Basic. Если вы хотите расширить ваши навыки программирования, я рекомендую вам перио- дически обращаться за последними новостями в технологиях програм- мирования на Visual Basic к корпоративному Web-сайту Microsof t Visual Basic. На этом сайте вы найдете современную информацию о всей гамме продуктов Visual Basic, а также сможете познакомиться с тем, как новые операционные системы, приложения и инструменты программирования интегрируются в средства разработчика на Visual Basic. Помимо этого, вы узнаете о сертифицированном обучении, конференциях, обновлении программных продуктов, новых средствах управления ActiveX, материа- лах для практики и обучения, а также о других продуктах корпорации Microsoft. Адрес Web-сайта: http://msdn.microsoft.com/vbasic/
Урок 24. Исследование объектов типа данные ActiveX (ADO)715 Краткое содержание Чтобы Сделайте следующее Кнопка Добавить средство управления ADO в панель инструментов В меню Project (Проект) щелкните на ко- манде Components (Компоненты), затем щелкните на вкладке Controls (Средства управления). Установите флажок рядом со строкой Microsoft ADO Data Control 6.0 и щелкните на кнопке ОК. Создать объект ADO в форме Щелкните на средстве управления ADO в панели инструментов и «протащите» мышь в окне формы. Соединить объект ADO с источником данных Щелкните на объекте ADO в форме и от- кройте окно Properties (Свойства). Щелк- ните на текстовом поле свойства Connectionstring и задайте необходимое имя источника данных Data Source Name (DSN) в диалоговом окне. Выбрать таблицу данных (набор запи- сей) в объекте ADO Щелкните на объекте ADO в форме и от- кройте окно Properties (Свойства). Щелкни- те на текстовом поле свойства RecordSource и выберите таблицу из списка. Интегрировать объекты вашей фор- мы с объектом ADO Щелкните на объекте, который вы хоти- те интегрировать (например, объект типа текстовое поле). Затем откройте окно Properties (Свойства) и задайте для свой- ства DataSource имя объекта ADO. Укажи- те поле, которое вы хотите отобразить, в качестве значения для свойства DataField. Написать программ- ный код для объекта ADO Откройте процедуру обработки события в окне Code (Код), идентифицируйте объект данных ActiveX, который вы хоти- те использовать, и задайте соответству- ющую функцию или свойство. Например, чтобы осуществить переход к следующей записи в текущем наборе (таблице), хра- нящемся в объекте Adodcl, введите: Adodcl .Record Set. М о veNext
716 Часть 7. Дополнительные возможности программирования Чтобы Получить дополни- тельную информа- цию об объектной мо- дели ADO Открыть конструк- тор окружения дан- ных Data Environment Designer Создать новые объек- ты данных ActiveX (ко- манды ADO) Сохранить конструк- тор окружения дан- ных Data Environment Designer, содержащий объекты данных ActiveX Использовать в исходном тексте про- граммы объект дан- ных ActiveX, храня- щийся в конструкторе окружения данных Data Environment Designer Сделайте следующее Кнопка Откройте проект, содержащий средство управления ADO или ссылку на объект, а затем дважды щелкните на команде Object Browser (Просмотр объекта) в меню View (Вид). В ниспадающем списке Library (Библиотека) щелкните на строке MSAdodcLib и воспользуйтесь средством Object Browser (Просмотр объекта) для изучения функций, свойств и событий объектной модели ADO. В меню Project (Проект) щелкните на ко- манде Add Microsoft Data Environment 6.0 (До- бавить окружение данных Microsoft Data Environment 6.0). Щелкните на кнопке Add Command (Доба- вить команду) в окружении данных Data Environment и сконфигурируйте объект с помощью диалогового окна Command) Properties (Свойства команды1). Откройте окно Project (Проект) и щелк- ните на имени конструктора, который вы хотите сохранить в папке Designers. В меню File (Файл) щелкните на команде Save DataEnvironmentl As (Сохранить DataEnvironmentl как). Укажите имя конструктора, т.е. имя ко- манды ADO, с префиксом «rs» (recordset - набор записей), а также функцию или свойство, которые вы хотите использо- вать Например: DataEnvironmentl. rsMyTable. MoveFirst
Учитесь так, как удобно Вам! Если Вы хотите продолжить знакомство с персональным компьютером и на- учиться работать с самыми популярными программами, то к вашим услугам — учебные пособия нашего издательства из серии «Шаг за шагом». Они состав- ляются на основе официальных учебных курсов корпорации «Microsoft» по освоению программных продуктов Microsoft. Пособия ориентированы на рус- ские версии программ, все упражнения в них адаптированы специально для российского читателя, проверены и перепроверены. Структура книги такова, что даже новичок уверенно чувствует себя в любой программе. Работать с книгами этой серии будет интересно и школьникам, и взрослым. Microsoft Word97. Шаг за шагом Темы уроков: ввод и форматирование текста, печать доку- мента, подготовка документов для публикации в Internet или Intranet, работа с электронной почтой, оформление докумен- та с помощью стилей, работа с мастерами и шаблонами, со- здание таблиц и диаграмм, разбиение текста на колонки, тек- стовые эффекты, работа над структурой документа, создание бланков, слияние. Microsoft Word 97. Углубленный курс. Шаг за шагом Темы уроков: документ с несколькими колонками; разрыв страницы, раздела, колонки, расчеты по табличной инфор- мации; сортировка; вставка диаграмм, графиков, специаль- ных символов; колонтитулы, сноски, водяные знаки, пере- крестные ссылки; работа с формами; обмен данными с программами из пакета Microsoft Office; макросы; работа в сети.
Microsoft Excel 97. Шаг за шагом Темы уроков: ввод данных; рабочая книга и лист; составле- ние формул; форматирование данных; подготовка рабочих листов для публикации в Internet, построение диаграмм и пе- чать документов; сортировка и обработка списков и данных и построение сводных таблиц; определение трендов и срав- нение зависимостей с помощью диаграмм, импорт и экспорт данных; настройка рабочей области, автоматизация выпол- нения повторяющихся задач, работа с диспетчером сценари- ев; разделение доступа к рабочим листам. Microsoft Excel 97. Углубленный курс. Шаг за шагом Темы уроков: организация рабочих листов; применение формул и функций; управление листами рабочей книги; наглядное представление информации; обмен данными с другими пользователями; разделяемая рабочая книга; созда- ние макросов. Microsoft Internet Expiorer4. Шаг за шагом Темы уроков: путешествие по World Wide Web; поиск ин- формации; настройка Internet Explorer; просмотр групп но- востей; создание списков Web-страниц и зон безопасности; прием и отправление электронных сообщений; поиск парт- неров с помощью Internet. MicrosoftFrontPage 98. Шаг за шагом Темы уроков: разработка и создание Web-узла; связывание Web-страниц; форматирование и оформление Web-страниц; добавление средств мультимедиа; Intranet; сетевые публика- ции. Microsoft Visual Basic 5.0. Шаг за шагом Темы уроков: интерфейс и средства управления, меню, диа- логовые окна; использование переменных и операторов; оп- ределение структур, циклов, контроль времени; работа с формами, управление принтерами и контроль ошибок; до- бавление графических изображений и специальных эффек- тов; использование модулей и процедур; работа с наборами объектов и массивами; управление текстовыми файлами и базами данных.
Microsoft Office 97. Шаг за шагом Word 97 — создание документов и печать документов; пере- мещение и копирование фрагментов текста; приемы эффек- тивного редактирования и оформления документов. Excel 97 — панели инструментов Excel; создание рабочих листов и оформление документов; ввод формул; сортиров- ка данных и поиск необходимой информации. PowerPoint 97 — создание и печать презентаций; ввод и редак- тирование текста; применение и создание шаблонов; разра- ботка презентаций и демонстрация слайд-фильмов. Access 97 — просмотр, ввод и организация информации; приемы редактирования с использованием подчиненных форм; отбор информации по заданному критерию; управ- ление базами данных; создание запросов. Outlook 97 — создание, чтение, отправка сообщений; со- ставление календаря для планирования времени; координа- ция расписания с другими пользователями. Windows 95 / NT — работа с инструментами Рабочего сто- ла, настройка интерфейса; работас файлами идисками. Microsoft Windows 98. Шаг за шагом Темы уроков: инструменты Рабочего стола; запуск программ, сетевое окружение, управление окнами; организация файло- вой системы, размещение и поиск файлов; использование мо- дема, Internet и электронной почты; улучшение рабочих ха- рактеристик компьютера; использование служебных программ; установка нового оборудованиящросмотр теле- программ; установка Windows 98. Скоро в продаже в серии «Шаг за шагом» Microsoft Access 97 для Windows 95-98 Microsoft Office 2000 Microsoft Word 2000 Microsoft Excel 2000 Microsoft Access 2000 Microsoft PowerPoint 2000 Microsoft FrontPage 2000 Microsoft Internet Explorer 5
Оглавление С чего начать.........................................................15 С чего начать изучение................................................15 Новые возможности Visual Basic 6.0 для профессионалов.................17 Исправления, комментарии, справки.....................................17 Установка и удаление учебных файлов...................................18 Как установить учебные файлы на ваш компьютер.....................18 Использование учебных файлов..........................................19 Деинсталляция файлов упражнений...................................25 Условные обозначения..................................................25 Другие особенности этой книги.........................................26 Часть 1. Знакомство с Visual Basic....................................27 Урок 1. Запуск программы на Visual Basic..............................29 Среда программирования Visual Basic...................................30 Запуск Visual Basic...............................................30 Как открыть и выполнить программный проект с помощью строки меню..32 Изменение размеров и расположения инструментов программирования...34 Форма интерфейса пользователя.........................................35 Панель инструментов программирования..................................36 Окно Properties (Свойства)............................................36 Изменение свойств.................................................37 Размышления о свойствах...............................................38 Окно Project (проект).................................................39 Просмотр окна проекта.............................................39 Справочная система Visual Basic.......................................40 Получение справки по конкретному вопросу..........................41 Шаг вперед: выход из Visual Basic.....................................42 Урок 2. Ваша первая программа.........................................45 Счастливая семерка: ваша первая программа на Visual Basic.............46 Последовательность программирования...................................46 Разработка пользовательского интерфейса...............................48 Создайте пользовательский интерфейс...............................48 Перемещение и изменение размеров командной кнопки.................51 Создание новой командной кнопки...................................51 Как добавить числовые метки.......................................51 Как создать окно рисунка..........................................54 Установка свойств объекта.............................................54 Установка свойств командных кнопок................................55 Установка свойств числовых меток..................................56 Установка свойств метки-описания..................................59 Свойства окна рисунка.............................................59 Установка свойств окна рисунка....................................60 Составление программного кода.........................................61 Представление свойств в табличном виде................................62 Работа в окне кода................................................63 Программный код для кнопки Вращать................................64 Взгляд на процедуру Command l_Click...............................67 Сохранение программы..................................................68
Сохраните программу Счастливая семерка............................68 Запуск программы..................................................69 Построение выполняемого файла.........................................70 Создайте выполняемый файл.........................................71 Шаг вперед: дополнение к программе....................................72 Урок 3. Работа со средствами управления...............................77 Знакомство со средствами управления: программа «Здравствуй, Мир!».....78 Создание программы «Здравствуй, Мир!».............................78 Запустите программу «Здравствуй, Мир!»............................82 Использование объектов файловой системы...............................83 Программа Browser.................................................84 Постройте программу Browser.......................................84 Запустите программу Browser.......................................88 Почему эта программа «рухнула»?...................................89 Объекты для ввода смешанной информации................................90 Программа Online Shopper..........................................91 Запуск программы Online Shopper...................................91 Просмотр программного кода «Online Shopper».......................94 Коды контрольного блока и окна списка.............................95 Немного о терминологии............................................97 Использование OLE-объектов для запуска приложений.....................99 Создайте программу Примерная оценка..............................101 Запустите программу Примерная оценка.............................105 Использование объектов данных для просмотра базы данных Microsoft Access.106 Поля и записи....................................................107 Создайте объект данных...........................................107 Создайте объекты «текстовый блок» и «метка»......................108 Установите свойства объектов.....................................109 Запустите программу Му Data.......................................ПО Модификация базы данных..............................................111 Измените имя в базе данных.......................................111 Шаг вперед: инсталляция средств управления Active X..................112 Урок 4. Работа с меню и диалоговыми окнами...........................117 Добавление меню с помощью редактора меню.............................118 Создайте меню....................................................118 Добавление быстрых клавиш к командам меню........................121 Соглашения меню..................................................121 Добавьте быстрые клавиши.........................................122 Измените порядок пунктов меню....................................123 Обработка выборов меню...............................................124 Добавьте объект «Метка» в форму..................................125 Отредактируйте процедуры событий меню............................126 Сохраните программу МуМепи.......................................128 Запустите программу МуМепи.......................................128 Функции системных часов..........................................130 Использование объектов общих диалогов................................130 Сохраните файлы МуМепи как MyDialog..............................131 Добавление объекта общего диалога................................132 Добавьте управление общими диалогами в панель инструментов.......132 Добавьте объект общего диалога...................................134 Добавьте графический объект......................................134 Добавьте меню Файл...............................................135 Запрещение команды меню..........................................136
Запретите команду Закрыть......................................136 Добавьте команду «Цвет Текста» в меню «Часы»...................137 Процедуры событий, управляющие окнами общих диалогов...............137 Отредактируйте процедуру события команды Открыть...............138 Отредактируйте процедуру события команды ЦветТекста............140 Управление выбором цвета с помощью флагов......................140 Отредактируйте процедуру события команды Закрыть...............141 Отредактируйте процедуру события команды Выход.................142 Запустите программу MyDialog...................................142 Добавление к программам нестандартных диалоговых окон..........145 Шаг вперед: назначение «быстрых» клавиш для меню...................145 Часть 2. Основы программирования...................................149 Урок 5. Переменные и операторы Visual Basic........................151 Анатомия программных операторов Visual Basic.......................152 Использование переменных для хранения информации...................153 Резервирование переменных с указанием размера..................153 Объявление переменных без указания размерности.................154 Использование переменных в программе...........................155 Как изменить значение переменной...............................155 Соглашения для присвоения имен переменным......................158 Использование переменных для хранения входных данных...............158 Ввод данных с помощью функции InputBox.........................159 Что такое функция?.................................................161 Использование переменных для вывода данных.........................161 Отобразим сообщение с помощью функции MsgBox...................162 Работа с различными типами данных..................................164 Использование.основных типов данных в тексте программы.........166 Типы данных, определяемые пользователем........................169 Константы: переменные, которые не изменяются...................170 Использование константы в процедуре............................170 Работа с основными математическими операторами Visual Basic........171 Основные математические операторы: +, -, * и /.................172 Работа с основными операторами.................................172 Рассмотрим текст программы Basic Operators.....................174 Математические функции Visual Basic............................176 Использование дополнительных операторов: \, Mod, * и &.........177 Работа с дополнительными операциями............................177 Приоритеты операций............................................180 Шаг вперед: использование скобок в формуле.........................181 Урок 6. Использование структур с условиями.........................185 Управление программой по прерываниям...............................186 События, поддерживаемые объектами Visual Basic.................187 Использование выражений с условиями................................188 Структура с условием If...Then.....................................189 Проверка нескольких условий в структуре с условием If...Then...189 Идентификация пользователя с помощью структуры If...Then.......191 Использование логических операторов в условных выражениях......195 Добавление защиты с помощью пароля при использовании операции And.196 Структуры с условием Select Case...................................197 Использование операций сравнения в структуре Select Case.......200 Поиск и исправление ошибок.........................................204 Три вида ошибок................................................205
Использование режима останова при выполнении программы с помощью команды Break..........................................206 Отладка программы If Bug.........................................207 Шаг вперед: использование оператора Stop для перехода в пошаговый режим.213 Урок 7. Использование циклов и таймеров..............................215 Программирование циклов For...Next................................. 216 Отображение содержимого счетчика с помощью команды Print.........217 Отображение информации с помощью цикла For...Next...................217 Изменение свойства в цикле For...Next...............................220 Создание сложных циклов For...Next...............................222 Открытие файлов с помощью цикла For...Next.......................223 Использование ключевого слова Step в программе MyCtlArray........227 Модификация программы MyCtlArray.................................227 Оператор Exit For................................................230 Программирование циклов Do...........................................230 Как избежать бесконечных циклов..................................231 Преобразование значений температуры с помощью цикла Do...........232 Использование ключевого слова Until в циклах Do..................235 Использование объектов типа «таймер».................................235 Создание цифровых часов с помощью таймера........................236 Создадим программу Цифровые часы.................................236 Шаг вперед: использование объектов типа «таймер» для установки ограничений по времени...............................................239 Часть 3. Создание интерфейса пользователя............................245 Урок 8. Работа с формами, принтерами и обработчиками ошибок..........247 Добавление новых форм в программу....................................248 Бланки или шаблоны форм..........................................248 Как использовать формы...........................................248 Операторы управления формами.........................................249 Как скрыть и выгрузить форму.....................................250 Как свернуть форму...............................................251 Добавление в программу имеющихся форм............................251 Работа с несколькими формами: программа Italian......................252 Запустим программу Italian.......................................252 Создадим вторую форму для программы..............................253 Доступ ко второй форме в процедуре...............................256 Вывод выходных данных программы на принтер...........................259 Формы MDI: окна с иерархическими связями.........................259 Добавим в программу Myltalian2 возможность вывода на принтер.....261 Запустим программу MyPrinFrm.....................................263 Как распечатать форму целиком с помощью команды PrintForm............264 Использование команды PrintForm для печати текста и графики.........265 Обработка ошибочных ситуаций с помощью обработчиков ошибок...........267 Использование обработчиков ошибок................................268 Настройка реакции на ошибку с помощью оператора On Error.........268 Операторы Resume.................................................269 Обработчик ошибок привода гибких дисков..........................269 Создание обработчика ошибки привода гибких дисков................270 Шаг вперед: дополнительные приемы в использовании обработчика ошибок....273 Урок 9. Добавление художественного оформления и специальных эффектов...............................................277 Добавление графических элементов с помощью средств Line (Отрезок) и Shape (Фигура)......................................278
Средство управления Line (Отрезок).................................278 Средство управления Shape (Фигура).................................279 Использование средств управления Line (Отрезок) и Shape (Фигура)...280 Запустим программу StartFrm.....................................283 Использование команд рисования для создания фигур...............284 Создание командных кнопок с графическими условными обозначениями....285 Контроль события «щелчок мыши»..................................285 Переключение состояния кнопки...................................286 Создадим кнопки панели инструментов.............................287 Запустим программу и проверим действие кнопок...................293 Добавление в вашу программу поддержки операции «перетащить-и-оставить».294 «Перетащить-и-оставить» шаг за шагом............................295 Программа DragDrop..............................................296 Использование метода «перетащить-и-оставить» для создания горящей бочки.... 297 Запустим программу MyDragDrop...................................300 Изменение вида указателя мыши...................................302 Добавление в вашу программу эффектов анимации.......................303 Использование системы координат формы...........................304 Перемещение объектов в системе координат........................304 Создание эффектов анимации с помощью команды Move и объекта типа таймер...........................................305 Добавим в программу DragDrop облако дыма........................306 Создание движущегося облака дыма...................................306 Увеличение и уменьшение размеров объектов в процессе выполнения программы.................................310 Как увеличить размер рисунка в ходе выполнения программы........310 Шаг вперед: присвоение имен объектам в программе....................313 Часть 4. Управление корпоративными данными..........................321 Урок 10. Использование модулей и процедур...........................323 Работа со стандартными модулями.....................................324 Создание стандартного модуля....................................325 Создадим и сохраним стандартный модуль..........................325 Работа с глобальными переменными....................................328 Откорректируем проект Счастливая семерка........................329 Добавим стандартный модуль......................................330 Создание процедур общего назначения.................................334 Преимущества процедур общего назначения.........................335 Создание процедур типа Function (Функция)...........................335 Синтаксис процедуры типа Function (Функция).....................336 Вызов процедуры типа Function (Функция).........................337 Использование функции для выполнения вычисления.................337 Создадим функцию расчета вашего рейтинга в игре.................338 Запустим программу MyRate.......................................341 Создание процедур типа Sub (Подпрограмма)...........................342 Синтаксис описания процедуры типа Sub (Подпрограмма)............342 Вызов процедуры типа Sub (Подпрограмма).........................344 Использование' процедуры типа Sub (Подпрограмма) для управления входными данными.................................345 Создадим текстовое поле с помощью процедуры типа Sub (Подпрограмма).345 Запустим программу MyTeams......................................349 Шаг вперед: передача аргументов по значению.........................351 Урок 11. Работа с наборами элементов и массивами....................355 Работа с наборами объектов.......................:..................355
Описание наборов.................................................356 Ссылка на объект в наборе........................................356 Использование циклов For Each...Next.............................357 Перемещение набора объектов......................................358 Используем цикл For Each...Next для обработки набора Controls (Средства управления)............................358 Использование свойства Tag (Тег) в цикле For Each...Next.........360 Используем тег для индивидуальной трактовки объекта в наборе.....361 Другие наборы Visual Basic.......................................363 Набор Visual Basic для приложений................................363 Работа с массивами переменных........................................365 Создание массива.................................................365 Объявление массивов с фиксированными границами...................367 Работа с элементами массива......................................368 Оператор Option Base.............................................370 Создание массива с фиксированными границами для хранения значений температуры................................370 Использование массива с фиксированными границами.................370 Создание динамических массивов...................................374 Использование динамического массива для хранения значений температур.... 376 Шаг вперед: использование многомерных массивов.......................378 Урок 12. Работа с текстовыми файлами и строками......................385 Отображение текстовых файлов с помощью объекта типа «текстовое поле»..386 Открытие текстового файла для чтения.............................386 Оператор Open....................................................387 Запустим программу просмотра текстового файла....................388 Изучим текст программы ShowText..................................390 Создание нового текстового файла на диске............................392 Запустим программу QNote (Быстрый блокнот)........................393 Изучим текст программы Быстрый блокнот...........................396 Программное управление символьными строками...........................398 Сортировка текста................................................398 Операторы и функции для управления строками......................399 Что такое ASCII?.................................................400 Сортировка строк в текстовом поле................................401 Запуск программы SortDemo........................................403 Исследование программы SortDemo..................................405 Шифрование текста................................................406 Шифровка текста изменением кодов ASCII...........................407 Исследуем программу Encrypt......................................408 Шаг вперед: использование оператора Хог..............................409 Урок 13. Управление базами данных Access.............................415 Работа с базами данных в Visual Basic................................416 Создание собственных приложений для работы с базами данных.......416 Использование средств с контролем границ значений для отображения информации базы данных..................417 Использование объектов типа текстовое поле для отображения данных.418 Запустим программу Courses.......................................418 Использование объекта Recordset......................................421 Поиск данных в базе Students.mdb.................................421 Запустим программу MyFindRec.....................................423 Добавление записей в базу данных Students.mdb.........................425 Разрешим пользователю добавлять записи в базу данных.............425 Запустим программу MyAddRec.......................................427
Удаление записей из базы данных Studentsundb.............................429 Разрешим пользователю удалять записи из базы данных..............429 Запустим программу MyDelRec......................................431 Шаг вперед: создание архивной копии файла............................432 Урок 14. Взаимодействие с Microsoft Office...........................437 Создание информационной системы предприятия..........................438 Использование информационных систем предприятий..................438 Использование средств управления OLE.............................439 Создание приложения MusicEIS.....................................440 Вставим объекты приложения.......................................443 Скопируем и вставим диаграмму объемов продаж.....................446 Запустим Информационную систему предприятия (EIS)................449 Программирование объектов приложений с помощью средства Automation (Автоматизация)....................451 Использование средства Automation (Автоматизация) в Visual Basic.451 Средство Object Browser (Просмотр объектов) Visual Basic.........452 Использование средства Object Browser (Просмотр объектов) для просмотра объектов Word......................................453 Автоматизация: обращенние к Word из Visual Basic.....................456 Создадим собственную функцию проверки орфографии.................457 Запустим программу MyUseWord.....................................460 Автоматизация: обращение к Excel из Visual Basic.....................462 Запустите программу Mortgage.....................................463 Автоматизация: обращение к Outlook из Visual Basic...................464 Запустите программу SendMail.....................................465 Шаг вперед: автоматизация - обращение к PowerPoint из Visual Basic...467 Часть 5. Возможности и средства профессиональной версии Visual Basic 6.0..............................................471 Урок 15. Обработка текстов с помощью средства управления Rich Textbox (Форматированный текстовый блок)........................473 Инсталляция средств управления ActiveX для профессиональной версии.......474 Как добавить средства управления ActiveX профессиональной версии в панель инструментов....................480 Знакомство со средством управления Rich Textbox......................480 Добавим в панель инструментов средство управления Rich Textbox...481 Запустим программу RTFEdit.......................................482 Воспользуемся командами из меню Format (Формат)..................483 Воспользуемся командами меню Edit (Правка).......................484 Воспользуемся командами из меню File (Файл)......................485 Процедуры обработки событий, связанных с RTF-форматированием.........486 Команда All Caps (Все прописные).....................................487 Команда Font (Шрифт).................................................487 Команды Bold (Полужирный), Italic (Курсив), Underline (Подчеркнутый).488 Редактирование текста с использованием буфера обмена Windows.........489 Команды Cut (Вырезать), Сору (Копировать), Paste (Вставить).:....489 Команда Find (Найти).............................................490 Управление операциями с файлами с помощью средства управления Rich Textbox .. 491 Команда Open (Открыть)...........................................491 Команда Close (Закрыть)..........................................492 Команда Save As (Сохранить как)..................................494 Команда Print (Печать)...........................................494 Команда Exit (Выход).............................................494 Шаг вперед: отображение кодов RTF в документе........................495
Урок 16. Индикация хода выполнения операции и отображение параметров состояния.................................499 Отображение хода выполнения задачи с помощью средства управления Progress Ваг (Индикатор хода выполнения).......500 Инсталляция средства управления Progress Ваг (Индикатор хода выполнения)....................................502 Как добавить средства управления общего назначения Windows в вашу панель инструментов..................502 Программа Прогресс.................................................503 Запустим программу Прогресс....................................504 Рассмотрим исходный текст программы Прогресс...................505 Управление графическим вводом с помощью средства управления Slider (Скользящая шкала)............508 Запустим программу RTFEdit2....................................508 Рассмотрим исходный текст программы для средства управления Slider (Скользящая шкала)..................510 Отображение в приложении информации с помощью средства управления Status Ваг (Панель состояния)......................................513 Запустим программу RTFEdit2....................................514 Рассмотрим значения свойств панели состояния...................515 Рассмотрим исходный текст программы управления панелью состояния.518 Шаг вперед: отображение статусов Caps Lock и Num Lock состояния клавиатуры...............................................520 Урок 17. Использование музыкальных эффектов и видеоклипов с помощью средства управления Multimedia MCI.........523 Воспроизведение аудиоклипов из файлов .wav.........................524 Свойство DeviceType............................................525 Свойство Command...............................................526 Программа PlayTune.............................................527 Запустим программу PlayTune....................................527 Рассмотрим исходный текст программы, воспроизводящей файлы .WAV..528 Воспроизведение видеоклипов из файлов .AVI.........................531 Программа Run Video............................................531 Запустим программу RunVideo....................................532 Рассмотрим программный код для воспроизведения файлов .AVI.....534 Шаг вперед: воспроизведение музыки с аудио-CD......................536 Урок 18. Использование средств Windows API.........................541 Знакомство с функциями Windows API средства........................542 Функция GlobalMemoryStatus.....................................542 Использование утилиты API Viewer...................................547 Инсталляция утилиты API Viewer.................................547 Воспользуемся утилитой API Viewer для вставки объявлений.......548 Управление использованием памяти на вашем компьютере...............552 Запустим программу FreeMem.....................................553 Рассмотрим исходный текст программы FreeMem....................555 Шаг вперед: завершение программ с помощью оператора Unload.........558 Часть 6. Основы программирования приложений для работы с Internet..............................................561 Урок 19. Пересылка файлов с помощью средства Internet Transfer.....563 Загрузка документов HTML из сети World Wide Web....................564 Запустим программу GetHTML.....................................566 Отобразим документ HTML с помощью Internet Explorer............569 Рассмотрим исходный текст программы GetHTML....................571
Передача файлов в соответствии с протоколом FTP.....;...............573 Запустим программу FTP...........................................574 Рассмотрим исходный текст программы FTP.........................577 Шаг вперед: контроль ошибок в ходе Internet-транзакций..............580 Урок 20. Отображение документов HTML с помощью Internet Explorer.....583 Основы работы с объектом Internet Explorer..........................584 Добавление ссылки Microsoft Internet Controls в ваше приложение.585 Как включить объект Internet Explorer в ваш проект..............585 Исследование объектной модели Internet Explorer.................586 Как использовать средство просмотра объектов Object Browser.....587 Отображение документов HTML.........................................589 Запустим программу ShowHTML.....................................590 Рассмотрим исходный текст программы ShowHTML, обеспечивающий работу Internet Explorer.........................594 Шаг вперед: реакция на события Internet Explorer....................596 Урок 21. Создание страниц с динамическими гипертекстовыми связями Dynamic HTML........................................................601 Основные принципы языка динамического построения гипертекста Dynamic HTML.... 602 Новый принцип программирования..................................603 Разработка DHTML-программ.......................................604 Знакомство с конструктором страниц DHTML Page Designer..............605 Откроем новое DHTML-приложение..................................606 Добавление текста в HTML-страницу...............................609 Форматирование текста в конструкторе страниц Page Designer......610 Создание SPAN-тегов для разделения отдельных символов...........614 Назначение ID-атрибутов в окне Properties (Свойства)............616 Создание связи с другой HTML-страницей..........................618 Сохраним проект WebLucky........................................620 Запустим DHTML-приложение.......................................620 Шаг вперед: создание документов HTML Microsoft Word.................623 Урок 22. Добавление элементов и средств управления ActiveX на DHTML-страницы...........................................629 Знакомство с элементами панели инструментов DHTML...................630 Описание панели инструментов DHTML..............................631 Button (Кнопка).................................................631 SubmitButton (Кнопка передачи)..................................632 ResetButton (Кнопка сброса).....................................632 TextField (Текстовое поле)......................................632 TextArea (Текстовая область)....................................632 PasswordField (Поле с паролем)..................................633 Option (Опция)..................................................633 Checkbox (Поле с флажком).......................................634 Select (Выбор)..................................................634 Image (Изображение).............................................634 Hyperlink (Гиперсвязь)..........................................635 HorizontalRule (Горизонтальная линейка).........................635 FileUpload (Пересылка файла в сеть).............................635 HiddenField (Скрытое поле)......................................636 Inputimage (Ввод изображения)...................................636 List (Список)...................................................636 Создание элементов и установка их характеристик.....................637 Добавление элементов в приложение WebLucky......................638 Переименуем файлы в вашем DHTML-приложении......................638
Как удалить элемент со страницы............................... 639 Добавим на страницу элемент Image (Изображение).................640 Добавим на страницу элемент Button (Кнопка).....................642 Добавление на DHTML-страницу средств управления ActiveX.............644 Добавим средство управления ActiveX в панель инструментов.......645 Создание на странице средства управления Multimedia MCI.........646 Создание процедур обработки событий для элементов DHTML.............647 Создадим процедуру обработки события DHTMLPage_Load.............648 Рассмотрим исходный текст процедуры обработки события DHTMLPage_Load..........................................649 Создадим процедуру обработки события Button.l_on.click..........650 Рассмотрим исходный текст процедуры обработки события Buttonl_onclick ... 651 Запустим приложение MyDHTML7....................................652 Шаг вперед: компилирование DHTML-приложения.........................655 Часть 7. Дополнительные возможности программирования операций с базами данных............................................661 Урок 23. Управление данными с помощью средства FlexGrid (Табличная сетка)...................................................663 Использование средства управления FlexGrid (Табличная сетка) для выполнения типичных операций обработки электронных таблиц.......664 Понятие столбцов и строк........................................665 Вставка графики в ячейки.....................................:..666 Выделение ячеек.................................................667 Форматирование ячеек............................................668 Добавление новых ячеек..........................................669 Использование средства управления FlexGrid (Табличная сетка) для представления данных по продажам..........670 Напишем программу для объекта FlexGrid (Табличная сетка)........672 Запустим программу MySaleGrid...................................673 Использование средства управления FlexGrid (Табличная сетка) для отображения записей базы данных.................................674 Запустим программу Просмотр данных..............................675 Расширенные операции сортировки и поиска........................679 Изучим исходный код программы DataGrid (Таблица данных).........679 Установка свойств объектов в программе DataGrid (Таблица данных)....682 Шаг вперед: операция поиска в базе данных Biblio.mdb................682 Урок 24. Исследование объектов типа данные ActiveX (ADO)............689 Знакомство с ADO....................................................690 Три метода программирования баз данных..........................690 Использование средства управления ADO ActiveX.......................691 Установка средства управления ADO...............................692 Создание объекта ADO и средств контроля границ..................693 Создание имени источника данных.................................694 Установим значение свойства Connectionstring....................695 Поместим данные ADO в объекты типа текстовое поле...............699 Запустим программу, демонстрирующую работу средства управления ADO .. 701 Написание программного кода для ADO.................................702 Создадим программу MyAdoData....................................703 Запустим программу AdoData......................................707 Создание объектов данных ActiveX с помощью конструктора окружения данных Data Environment Designer....................................709 Создадим окружение данных пользователя..........................710 Обращение к командам ADO из вашего приложения...................713 Шаг вперед: дополнительные ресурсы для программирования на Visual Basic.713
Этот файл был взят с сайта http://all-ebooks.com Данный файл представлен исключительно в ознакомительных целях. После ознакомления с содержанием данного файла Вам следует его незамедлительно удалить. Сохраняя данный файл вы несете ответственность в соответствии с законодательством. Любое коммерческое и иное использование кроме предварительного ознакомления запрещено. Публикация данного документа не преследует за собой никакой коммерческой выгоды. Эта книга способствует профессиональному росту читателей и является рекламой бумажных изданий. Все авторские права принадлежат их уважаемым владельцам. Если Вы являетесь автором данной книги и её распространение ущемляет Ваши авторские права или если Вы хотите внести изменения в данный документ или опубликовать новую книгу свяжитесь с нами по email.