close

Вход

Забыли?

вход по аккаунту

?

3272 linke markus visual basic 5. spravochnik per. s nem. m.. izdatelstvo binom 1998. 512 s.. il

код для вставкиСкачать
Markt&Tedinik
PUBLI SHERS
a
A
A
Основы и установка
13
IDE - интегрированная среда разработки
25
Visual Basic как язык
58
Разработка програм м ы :
создание, отладка и тестирование
133
Техника программирования
193
Технология ActiveX
294
Мультимедиа: графика, звук и другие
356
%
10
Программирование для среды Internet
421
Базы данных
458
Краткий указатель
476
Visual Basic
Marcus Linke
ей W
M
0
*
t
C . Тораиғы ров
аты н д ағы П М У -д ің
академик С.Бейсембаев
атындағы ғылыми
КІТАПХАНАСЫ
Markt&Ifechnik
Маркус Линке
a ft
с п
Перевод с немецкого
под редакцией
В. Хорева
М осква
ЗАО «Издательство БИНОМ»
19 9 8
УДК 004.432
Л 59
15БК 42.973.26“018 .1
Литературный редактор
Глебова JI. В .
Маркус Линке
u . пАП
Visual Basic 5. Справочник: Пер. с нем. — М..
« И зд а те л ьство БИНОМ», 1998.
512 с .. ил.
В этой книге вы найдете подробное описание новой, пятой вер­
сии популярной системы программирования - Visual Basic. Первая
часть книги знакомит читателя с началами Visual Basic 5
уста­
новкой пакета, работой в интегрированной среде ID E и основами
самого языка Visual Basic. Кроме того, читатель сможет освоить
элементарную технику создания, отладки и тестирования программ
на языке Visual Basic. Вторая часть посвящена более специальным
вопросам программирования. Каждая из глав второй части раскры­
вает определенную тему — такую, например, как программирование
для Internet или использование в программах технологии ActiveX,
создание приложений для работы с базами данных и др. Третья
часть представляет собой краткий путеводитель по важнейшим эле­
ментам языка Visual Basic.
Кроме того, книга содержит множество кратких обзоров, проце­
дур и советов, относящихся к различным аспектам работы в среде
Visual Basic.
Все права защищены. Никакая часть этой книги не может быть
воспроизведена в любой форме или любыми средствами, электронными
или механическими, включая фотографирование, магнитную запись или
иные средства копирования или сохранения информации, без письмен­
ного разрешения издательства.
Authorized translation from
the German language edition.
© Original copyright.
Markt&Techinik Buch- und
_____ _ . ___ л_ __ _ .
.
Software-VerlagGmbH, 1997
ISBN 5-7989-0068-1 (рус.) @ Издание на русском языке
ISBN 3-8272-5200-8 (нем.)
ЗАО «Издательство БИНОМ», 1998
Содержание
П р е д и с л о в и е ................................................................................... 9
Работа со справочником Visual Basic 5 ....................................... ..10
Оформление элементов текста и описания синтаксиса..........11
1. О сновы и у с т а н о в к а ............................................................ 13
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
Введение..................................................................
, . . . 13
Возможности Visual B a s ic .................................................. ..13
Что нового в версии 5 ....................................... .....................15
Три варианта Visual B a s ic ................................................... ..16
Visual Basic, VBA и V B S cript.....................................^ . . . . 17
Установка................. .. .................... % ............... ................ ..18
Microsoft Internet E x p lo re r................................................... ..23
Запуск Visual Basic и выход из н е го .................................. ..23
Мышь и клавиатура..................................................................24
2 . IDE — интегрированная с р е д а р а з р а б о т к и ................. 2 5
2.1. Рабочая поверхность IDE........................................................26
2.2 Размещение окон ID E .............................................................28
2.3. Справочная си стем а............................................................. ..30
2.4. Система м е н ю ....................................................................... .33
2.5. Панели инструм ентов...........................................................46
2.6. «Горячие» клавиш и.................................................................50
2.7. Конфигурация и параметры..................................................54
2.8. Внешние утилиты A d d -In s ................................................... .57
3 . V isua l B a sic к а к я з ы к ............................................................ 5 8
3.1. Основы язы ка......................................................................... ..58
3.2. Переменные, константы, массивы и структуры.................64
3.3. О перации...................................................................................82
3.4. Управляющие структуры я з ы к а ......................................... ..87
6
Visual Basic 5
3.5. Процедуры и функции
3.6. Объекты и классы . . .
100
120
4. Р азраб отка п р о гр а м м ы :
со зд а н и е , о тл а д ка и т е с т и р о в а н и е ..........................
4.1. Создание программы...........................................................
4.2. Отладка................................................................................... Ч ®
5. Техника п р о гр а м м и р о в а н и я ......................................... 193
5.1. Стандартные управляющие элементы..............................194
5.2. Мышь, клавиатура, события............................................... 220
5.3. Меню и диалоги.....................................................................234
5.4. Доступ к файлам.................................. * ............................. 26^
273
5.5. Печать. .........................................................................
5.6. Обработка ош ибок................................................................279
286
5.7. DLL и API.
6. Т ехнология A c t iv e X .......................................................... 2 9 4
6.1. Дополнительные управляющие элем енты ...................... 297
6.2. OLE-элем ент....................................................................... * 341
6.3. Внешние утилиты A d d -In ................................................. .. 350
7. М ул ьти м е д и а : гр а ф и ка , з в у к и д р у г и е ..................... 3 5 6
7.1 Объект Form и управляющий элемент PictureBox . . . . 357
7.2. Управляющий элемент Im age.............................................362
7.3. Ш риф ты .................................... ........... .. . . Л ------ . . . . 363
7.4. Ц ве т............................................................... ........................ 380
7.5. Управляющие элементы Shape и L in e ..............................377
7.6. А ним ация.............................................................................. 383
7.7. Файлы мультимедиа........................................................... 396
8. П р о гр а м м и р о ва н и е д л я ср е д ы I n t e r n e t .................. 421
8.1. ActiveX-докум ент.................................................................. 422
8.2. Создание броузера............................................................. 433
8.3. Internet Explorer: «дистанционное управление»»............ 442
8.4. ҒТР -клиент......................................................................... .. 448
8.5. Другие возм ож ности........................................................... 456
Содержание____________________ _____________________ ____________ і
9 . Б азы д а н н ы х ........................................................................4 5 8
9.1. Управляющий элемент Data.............................................. 462
1 0 . К р а т ки й у к а з а т е л ь ............................................................ 4 7 6
10.1.
10.2.
10.3.
10.4.
С во й ства .............................................................................. ..476
События...................................................................................497
М е то д ы ........................... .......................................................502
Объекты...................................................................................508
Предисловие
С ростом производительности персональных компьютеров и
сложности программных средств пользователям становится все
труднее «держать в уме» все функции применяемого языка про­
граммирования. По этой причине в повседневной работе, как пра­
вило, используется далеко не весь спектр существующих возмож­
ностей конкретного инструментария или операционной среды, а
только небольшая их часть. Практика показывает, что и вводные
обучающие курсы дают представление только о самых важных ко­
мандах и навязывают пользователю применение ряда типовых
процедур, многие из которых далеко не оптимальны. Большинст­
во пользователей, преодолев первый страх перед новым инстру­
ментарием и накопив достаточный опыт, начинают испытывать
естественное желание познакомиться с возможностями среды
разработки поближе. Им хочется использовать если не все, то
многие из доступных средств. Им не нужны подробные и длинные
(как в учебниках) описания операторов: они уже с полуслова по­
нимают, о чем речь...
■ Именно для пользователей, которые принадлежат к группе
«нетерпеливых», предназначена серия книг нашего издатель­
ства, объединенных в серию «Справочник».
■ Вся информация изложена как раз в том порядке, в котором
она обычно требуется во время работы.
■ Единообразное построение глав способствует быстрому по­
ниманию/усвоению необходимой информации и существенно
упрощает поиск.
■ Многочисленные перекрестные ссылки позволяют найти всю
информацию, имеющую отношение к рассматриваемому во­
просу.
■ Небольшой и удобный формат исключает проблему «разме­
щения» книги на рабочем столе.
Visual Basic 5
10
Ш Все книги серии построены по единой схеме. Поэтому зна­
комство с одной из них позволит в дальнейшем быстро сори­
ентироваться при изучении следующего программного про­
дукта.
Желаем вам успехов и трудовых свершений при работе со «Спра­
вочником Visual Basic 5».
I
М аркус Линке
Работа со справочником Visual Basic 5
■V
Соблюдайте следующие рекомендации при работе со Справоч­
ником и вы сможете эффективно использовать это пособие и бы­
стро найти необходимую информацию.
Типовая стр уктур а гл а в ы .
■
■
^
^
Краткое описание главы дается сразу после ее заглавия.
Описание последовательности д е й ств и й (Процедура) по­
зволит вам шаг за шагом решить наиболее важные проблемы
как при работе с IDE, с различными дополнительными про­
граммами, так и при собственно программировании.
Ш В примечаниях даны советы и рассмотрены отдельные де­
тали.
ЩI *
■ Каждый раз при упоминании вопроса, более подробные ком­
ментарии к которому можно получить в других главах, вы най­
дете соответствующую ссылку с номером раздела в виде:
(см .*.*).
‘ НС*' *е
Ш Для того чтобы учесть все многообразие возможностей Visual
Basic 5, при построении некоторых глав автор позволил себе
отойти от типовой структуры.
,
Предисловие
11
Оформление элементов текста и описания
синтаксиса
Оформление элементов текста
В Справочнике используются следующие оформительские при­
емы для выделения различных элементов текста.
Ш Ж ирны й ш риф т применяется для выделения элементов ин­
струментальной среды, команд, ключевых слов и других эле­
ментов языка, которые должны быть записаны без изменений.
Ш
Моноширинный шрифт (похожий на шрифт принтера) ис­
пользуется для примеров команд и программ.
Описание синтаксиса
Все формальные описания синтаксиса построены по определен­
ной схеме, с использованием специальных оформительских при­
емов.
■ Ключевые слова и другие элементы языка, которые должны
быть использованы без изменений, выделены жирным шриф­
том.
■ Курсив используется для выделения идентификаторов функ­
ций, классов, параметров, а также других идентификаторов.
■ В квадратных скобках [] перечисляются необязательные эле­
менты синтаксической конструкции. Эти элементы могут быть
включены в команду только в случае необходимости. Такие
скобки не нужно вводить при записи команды.
Основы и установка
1.1. Введение
Visual Basic чем-то напоминает сказочную скатерть-самобранку,
о которой мечтает, наверное, каждая домохозяйка. Причиной
таких ассоциаций является многообразие возможностей этой
системы программирования. Идет ли речь о простенькой демон­
страционной программе, о сложнейшей системе управления ба­
зами данных или о многокомпонентном приложении типа «клиент-сервер» — нет никаких проблем. Сложные и трудные задачи
Visual Basic решает с такой же легкостью, как и простейшие.
Кроме того, производительность приложений, созданных с помо­
щью Visual Basic 5, в большинстве случаев оказывается хорошей
или отличной.
В версии 5 Visual Basic поддерживает наиболее современные тех­
нологии программирования. Кроме нескольких косметических
улучшений среды разработки в версии 5 повышена производи­
тельность приложений. Наконец, в профессиональных вариантах
версии 5 добавлена поддержка Internet. Неудивительно, что число
поклонников Visual Basic неуклонно растет.
1.2. Возможности Visual Basic
Этот раздел представляет собой краткий обзор основных черт
минимального варианта Visual Basic 5 — Learning Edition (вариант
для начинающих). Возможности, предоставляемые минимальным
вариантом, присутствуют, естественно, и в профессиональных
версиях Visual Basic.
Возможности Visual Basic
14
Обзор
В
Среда разработки
• Интегрированная среда Visual Basic содержит в себе все не­
обходимые средства для разработки приложений. Предус­
мотрен доступ ко всем функциям как с клавиатуры, так и с
помощью МЫШИ.
т Возможности интегрированной среды можно расширить
путем «подключения» к ней внешних утилит (надстроек Add-
■
'■
I
I •I
• Профессиональные варианты пакета Visual Basic позволяют
также создавать внешние утилиты, и благодаря этому воз­
можности развития интегрированной среды разработки
становятся безграничными.
Ш Программирование
• Кроме тех возможностей, которые предоставляет собствен­
но язык Visual Basic 5, в распоряжении программиста име­
ются также возможности API-функций Windows и вся мощь
технологии ActiveX, что позволяет включить в состав про­
граммы ActiveX-элементы, созданные в других системах
программирования.
-
Ш Отладка
• Интегрированная среда снабжена набором вспомогатель­
ных средств, позволяющих наблюдать за процессом выпол­
нения программы и управлять им, что облегчает поиск оши­
бок.
Ш Справочная систем а
• Справочная система Visual Basic содержит сведения об эле­
ментах и конструкциях языка, а также примеры их исполь­
зования.
Л
• С помощью системы «онлайновой» справки вы можете по­
лучить более обширные сведения о программировании на
языке Visual Basic (для этого необходимо иметь выход в In­
ternet).
, V оI НИ
Что нового в версии 5.0
15
И Управление проектом
• Проект является основной логической структурой при про­
граммировании на Visual Basic. Благодаря средствам управ­
ления проектом вы получаете легкий и быстрый доступ ко
всем составляющим проекта.
В Адаптация среды под пользователя
• Интегрированная среда разработки Visual Basic предостав­
ляет программисту достаточно большую свободу в таких во­
просах, как состав, вид и расположение панелей инструмен­
тов, меню и т.д.
В П оддержка соврем енны х технологий
• Список технологий, поддерживаемых системой программи­
рования Visual Basic 5, зависит от варианта пакета.
• Поддержка OLE и систем управления базами данных име­
ется во всех вариантах.
• Поддержка технологии ActiveX (на уровне создания OCX АсtiveX-элементов) и возможность создания lnternet-приложений существует только в профессиональных вариантах (Pro­
fessional Edition и Enterprise Edition).
• Для создания приложений класса «клиент-сервер» (с при­
менением технологий DAO и RDO) пригоден только вариант
для рабочих групп (Enterprise Edition).
В Внеш ние утилиты (над стройки) A dd-Ins
• Внешние утилиты (надстройки), запуск которых можно осу­
ществить из интегрированной среды Visual Basic, сущест­
венно расширяют возможности программиста. Состав этих
утилит зависит от варианта Visual Basic.
1.3. Что нового в версии 5.0
Новая версия всегда предоставляет новые возможности. Некото­
рые из них присутствуют лишь в профессиональных вариантах па­
кета (Professional Edition и Enterprise Edition), другие же доступны
всем пользователям без исключения. Далее приведен краткий
обзор новшеств пятой версии Visual Basic.
16
Три варианта Visual Basic
Обзор
Я Возможность откры ть несколько пр о е кто в одноврем енно _ это избавляет от значительных неудобств при отладке
ActiveX-элементов.
* I
Я Мастера. В версии 5 пакет включает в свой состав ряд новых
мастеров, т. е. сервисных программ, которые предназначены
для выполнения некоторых типичных манипуляций с проектом.
Мастер создания программ установки (SetUp Wizard) имеется
во всех вариантах пакета, другие, как, например, мастер
внешнего интерфейса ActiveX-элементов (ActiveX Control Inter­
face Wizard), в варианте Learning Edition отсутствуют.
Я Компиляция в маш инны й код. В профессиональных вари­
антах появилась возможность компилировать программу не в
промежуточный код (P-код), а непосредственно в машинный
код процессора, при этом существенно возрастает скорость
работы исполняемого ЕХЕ-файла.
Я OLE Drag&Drop. Поддержка технологии OLE Drag&Drop —
очень полезное нововведение. Благодаря ему значительно об­
легчается и упрощается обмен данными между разными при­
ложениями.
V
Я Internet. Версия 5 позволяет создавать приложения для ра­
боты в Internet, при этом должны применяться ActiveX-элементы. Многие из новых возможностей этой категории имеются
только в профессиональных вариантах пакета.
Примечание
Я Этот весьма краткий обзор дает лишь общее представление
о новых возможностях Visual Basic; более подробную инфор­
мацию вы найдете в справочной системе Visual Basic.
1.4. Три варианта Visual Basic
Visual Basic Visual Basic’y рознь. Потребности разных программис­
тов могут сильно отличаться, поэтому корпорация M icrosoft вы­
пустила свой продукт в трех вариантах (изданиях): Learning Edition
17
Visual Basic. VBA и VBScript
(для начинающих), Professional Edition (для профессионалов) и En­
terprise Edition (для рабочих групп). Базовым вариантом является
Learning Edition, предоставляющий программисту все элементар­
ные возможности. Оба профессиональных варианта являются
расширением Learning Edition за счет дополнительных утилит
(надстроек) Add-Ins, мастеров и поддержки более широкого круга
современных технологий программирования.
1.5
Примечание
Доступность некоторых тем книги для читателя определяется,
кроме прочего, тем, какой вариант Visual Basic 5 у него уста­
новлен.
Обзор. Варианты (и зд а н и я ) Visual Basic 5
Как уже упоминалось, Learning E dition (вариант для начина­
ющих) содержит все элементарные возможности программи­
рования для Windows, в частности, позволяет снабдить при­
ложение всеми управляющими элементами, стандартными
для Windows-приложения. Поэтому Learning Edition
наибо­
лее простой инструмент для создания несложных программ
для среды Windows 95 или Windows NT. Он позволяет также
выполнять операции с базами данных.
P rofessional E dition (вариант для профессионалов) предна­
значен, как следует из его названия, для профессиональных
программистов. Он позволяет создавать ActiveX-элементы и
соответственно Internet-приложения.
E nterprise E dition (вариант для рабочих групп) располагает
всеми возможностями Professional Edition, но при этом позво­
ляет работать над одним проектом группе разработчиков, а
также создавать приложения типа-^кшленіпседв^р».
„ ....
С. T o o a u f
1.5. Visual Basic, VBA и VB|Scrigtbl—
ждағы п м у -д ің
TOfiTTHTO/fteeiQ -r
также
эоли макроязыка для це-
КІТАПХАНАСЫ
18
Установка
лого ряда приложений, которую играет Visual Basic в лице VBA
(Visual Basic for Applications — Visual Basic для приложений). С по­
мощью VBA можно организовать совместную работу таких при­
ложений, как Word и Excel — это существенно расширяет возмож­
ности VBA, Word и Excel. В основу Visual Basic положен VBA. Сама
корпорация Microsoft использует эти возможности при разработ­
ке приложений Windows, осуществляя параллельное с разработкой тестирование приложений с помощью макроязыка.
Язык описания сценариев VBScript является подмножеством VBA.
Основным его назначением является создание интерактивных
WWW-страниц, но его также применяют в качестве макроязыка
Windows-приложений, как в последней версии пакета Developer
Studio.
Зачем вам знать все это? Затем, чтобы вы поняли: затраты на
изучение Visual Basic окупятся троекратно, поскольку он является
очень близким «родственником» двух других систем программи­
рования — VBA и VBScript.
1.6. Установка
Прежде чем Visual Basic 5 будет готов к работе, его необходимо
установить на компьютер. В этом нет ничего сложного, просто
ознакомьтесь со следующими разделами.
1.6.1. Требования к аппаратному обеспечению
В зависимости от варианта (издания) Visual Basic 5 и в зависи­
мости от операционной системы требования к аппаратуре,
предъявляемые пакетом Visual Basic 5, могут меняться. Далее
кратко рассмотрим рекомендации M icrosoft относительно пара­
метров вашего компьютера для разных вариантов. При выборе
компьютера следует руководствоваться (среди прочего) одним
соображением: безусловно, чем мощнее ваш компьютер, тем
лучше. Тем быстрее будет работать и сам Visual Basic, и создан­
ные с его помощью приложения. Но если вы собираетесь разра­
батывать программы не только для собственных нужд, а плани­
Установка
__________
руете передавать их другим, вам следует учитывать параметры и
конфигурацию компьютера, который типичен для ваших предпо­
лагаемых пользователей. Иначе вы можете не заметить, что со­
здаваемое вами приложение пожирает слишком много ресур­
сов — на вашей «крутой тачке» это просто не заметно, в то время
как на «среднем» пользовательском компьютере программа будет
работать невыносимо медленно.
Обзор. Требования к парам етрам ком пью тера
■
■
■
Общие требования для всех вариантов:
• IBM-совместимый персональный компьютер класса 486/66
или выше (желательно Pentium или выше).
• Операционная система M icrosoft Windows 95 или Microsoft
Windows NT Workstation Ver.4 (Service Pack 2) или Microsoft
Windows NT 3.51 (Service Pack 5).
• Привод CD-ROM.
• Монитор класса VGA или выше.
• M icrosoft-совместимая мышь.
Требования для варианта (издания) Learning Edition:
• Объем оперативной памяти: 8 M B —для Windows 95 или Win­
dows NT 4.0 (в последнем случае желательно 16 MB).
• 16 MB — для Windows NT 3.51.
• Место, занимаемое на жестком диске: 25 MB — при мини­
мальном варианте установки, 80 MB — при полной установке
и 205 MB в случае установки вместе с полной документа­
цией.
Требования для варианта (издания) P rofessional Edition:
• Объем оперативной памяти: 12 MB — для Windows 95 или
Windows NT 4.0 (желательно 16 MB).
• 24 MB — для Windows NT 3.51.
• Место, занимаемое на жестком диске: 30 MB — при мини­
мальном варианте установки, 115 MB — при полной уста­
новке и 220 MB — при установке вместе с полной докумен­
тацией.
Установка
■
Требования для варианта (издания) E n te rp rise E dition:
• Объем оперативной памяти: 16 MB — для Windows 95 и
32 MB — для Windows NT.
• Место, занимаемое на жестком диске: 35 MB - при мини­
мальном варианте установки, 345 MB — при установке вместе с полной документацией.
-,,
1.6.2. Варианты установки
Ш Typical (Стандартный). В этом варианте на жесткий диск устанавливаются наиболее употребительные компоненты систе­
мы Visual Basic. Точный их состав зависит от варианта (изда­
ния) пакета Visual Basic (это относится и к остальным вариантам установки).
/^ .
‘
■ Custom (Установка, определяем ая пользователем ). В
этом варианте установочная программа дает пользователю
возможность самому определить, какие компоненты пакета
Visual Basic будут установлены на жесткий диск. Это позволяет
сэкономить место на диске, не устанавливая ненужные дан­
ному пользователю компоненты, но требует от последнего не­
которого понимания общих принципов устройства Visual Basic.
В этом же варианте возможна полная установка всего пакета
Visual Basic.
«
Ш Com pact (М иним альны й). В этом варианте будет установлен
только минимально необходимый для функционирования Vis­
ual Basic набор.
I
16.3. Установка
Определившись с вариантом установки, вы можете перейти к
собственно установке.
•V
; . , . ., % ^
Процедура. Установка Visual Basic
1. Поместите установочный CD-диск в привод CD-ROM.
2. Если в вашей системе разрешен автозапуск, программа уста­
новки (SETUP) запустится сама. В противном случае вам при-
Установка
3.
4.
5.
6.
7.
8.
9.
___________________________ ? !
дется запустить өө с помощью Проводника Windows или DOSоболочки, которую вы используете.
Выберите пункт In sta ll Visual Basic 5 .0 и щелкните на кнопке
C ontinue.
Далее вам будет предложено ввести свое имя и название ор­
ганизации, где вы работаете. Введите требуемые данные и
щелкните на C ontinue.
В диалоге регистрации вам потребуется ввести идентифика­
ционный номер вашего CD-диска (CD Key) — обычно он нахо­
дится на обороте упаковки диска. Завершите диалог щелчком
на ОК.
На последующих шагах программа сообщит вам сначала при­
своенные вашей копии Visual Basic атрибуты (имя и название
организации), затем регистрационный номер программного
продукта. В обоих случаях подтвердите правильность всего
этого щелчком на ОК.
Следующий диалог выведет полное имя каталога, где про­
грамма установки предполагает установить Visual Basic (при
желании вы можете его изменить). Щелкните на ОК.
Далее программа выведет текст лицензионного соглашения.
Если вы решаете продолжить процесс установки (щелчок на
I Agree, что означает «Согласен»), то вы принимаете на себя
обязательства, оговоренные лицензионным соглашением с
корпорацией Microsoft.
В следующем диалоге вам будет предложено выбрать вариант
установки. Просто щелкните на кнопке соответствующего ва­
рианта. Если вы выбрали T ypical или C om pact, процесс ус­
тановки далее будет происходить автоматически.
10-Если вы выберете установку, определяемую пользователем
(Custom ), то вначале вам будет предложено выбрать необхо­
димые компоненты из списка. Выделите необходимые пункты
и щелкните на C ontinue.
11. Затем вы должны будете либо скорректировать имя папки, где
будет содержаться Visual Basic, либо же подтвердить стан­
дартное имя (Visual Basic 5.0) щелчком на ОК.
Установка
__ _____________________________ ______________
22
12 Процесс копирования файлов займет некоторое время. В
' итоге будет произведен рестарт системы, чтобы внесенные
изменения возымели действие.
13. На этом установка пакета Visual Basic завершена, и вы можете
его использовать.
'
_____
Л Л
Примечание
8
г >-с г ?г
Если вы запустите программу установки (SETUP.EXE) на системе где Visual Basic уже установлен, то появится окно диа­
лога,’ которое позволит добавить или удалить компоненты пакета Visual Basic.
1.6.4. Удаление Visual Basic из системы
Может случиться, что вам потребуется удалить пакет Visual Basic
из системы.
Процедура. Удаление Visual Basic
1. Откройте главное меню Windows (меню кнопки «Пуск») и вы­
берите подменю Н астройка.
,
»«
2. Щелкните на пункте Панель управления.
3. В открывшемся окне выполните двойной щелчок на значке У с­
тановка и удаление програм м .
4. В открывшемся окне диалога выберите вкладку У станов­
ка/удаление.
5. Выделите в списке пункт M ic ro s o ft Visual B asic 5 .0 ... Много­
точие представляет здесь название варианта (издания) Visual
Basic 5.0, который вы ранее установили.
6. Щелкните на кнопке Д обавить/удалить.
7. В появившемся окне сообщения щелкните на кнопке Да.
Примечание
- ^
>г ^ и
Дисковые папки, относящиеся к пакету Visual Basic, физически
удалены не будут, при необходимости вы должны будете уда­
лить их самостоятельно, а файлы удаляются системой.
M icrosoft Internet Explorer
23
1.7. Microsoft Internet Explorer
Используя Visual Basic, можно создавать программы, взаимодей­
ствующие с Internet. Для работы с такими программами потребу­
ется Internet Explorer. Такой броузер, как Netscape Navigator, все
еще не полностью поддерживает технологию ActiveX, на которую
опирается Visual Basic-программа, взаимодействующая с Internet.
1.8. Запуск Visual Basic и выход из него
Visual Basic является приложением Windows и обращаться с ним
следует так же, как и с любой Windows-программой.
Процедура. Запуск Visual Basic
1. Запустите Windows.
2. Откройте меню кнопки П уск ([C trl]+[E sc]), откройте подменю
П рограм м ы и выберите папку M ic ro s o ft Visual B asic 5 .0 , в
ней — пункт Visual Basic 5.0. Либо же с помощью Проводника
Windows или любой DOS-оболочки запустите файл VB5.EXE.
3. Visual Basic в результате запустится.
Примечание
■
При старте Visual Basic откроется окно диалога, предлагаю­
щее выбрать тип проекта, который вы намерены создать. Его
можно закрыть нажатием на клавишу [Esc].
Процедура. Выход из Visual Basic
1. Окно Visual Basic можно закрыть щелчком на кнопке закрытия
окна (в правом верхнем углу окна Visual Basic) или командой
Exit меню File, а также нажатием [A lt]+[F4] или командой З а ­
кры ть меню управления окном (открывается щелчком на знач­
ке в левом верхнем углу окна Visual Basic).
2. Если при этом остаются несохраненные файлы, то вначале по­
явится окно диалога, предлагающее выбор одного из трех ва­
риантов:
Мышь и клавиатура
• Yes — в этом случае файлы, в которые были внесены изме­
нения после последнего их сохранения, будут сохранены,
затем окно Visual Basic будет закрыто.
• N o _в этом случае окно Visual Basic будет закрыто немед­
ленно и изменения в несохраненных файлах окажутся поте­
рянными.
г " :’
• Cancel — в этом случае окно Visual Basic останется открытым.
I I
1.9. Мышь и клавиатура
Возможность выполнять любые операции по управлению про­
граммой как с помощью мыши, так и с помощью клавиатуры яв­
ляется важным принципом Windows.
■ Мышь. Все стандартные манипуляции с мышью, принятые в
среде Windows (щелчок, двойной щелчок, выделение и т.д.),
поддерживаются в Visual Basic. К дополнительным удобствам
относятся всплывающие подсказки (небольшие прямоуголь­
ники, появляющиеся рядом с указателем мыши, когда указа­
тель неподвижно находится некоторое время над какой-ни­
будь кнопкой), при этом текст подсказки кратко описывает на­
значение кнопки. Как и в других современных Windows-приложениях, в Visual Basic действует система контекстных меню
(открываются нажатием на правую кнопку мыши). Содержи­
мое контекстного меню зависит от вида объекта, над которым
находится в данный момент указатель мыши.
■ Клавиатура. Поддерживаются сочетания клавиш, стандарт­
ные для Windows-приложения (как, например, закрытие окна
нажатием [Alt]+[F4]). Все операции, необходимые при работе
в среде Visual Basic (в том числе и те, которые гораздо удобнее
выполнять с помощью мыши), можно в случае необходимости
выполнить, используя клавиатуру. Кроме того, так называе­
мые «быстрые» клавиши и литеры быстрого доступа зачастую
позволяют выполнить некоторые операции быстрее, чем это
можно сделать с помощью мыши.
IDE — интегрированная
среда разработки
Благодаря IDE (Integrated Development Environment — Интегриро­
ванная среда разработки) Visual Basic соотносится с VBA (Visual
Basic for Aplications — Visual Basic для приложений) примерно так
же, как Visual C ++ — с «просто» C++. Однако в противоположность
Visual C++ или Visual J+ + (которые делят свою IDE с пакетом De­
veloper Studio) Visual Basic обладает собственной IDE, единствен­
ной и неповторимой. Благодаря этому визуальные компоненты
программы в среде Visual Basic играют даже «более центральную»
роль, чем в среде Developer Studio.
Данная глава посвящена описанию IDE— ее устройству и методам
использования.
Обзор. Х арактеристика IDE пакета Visual Basic
■
■
Весь инструментарий, необходимый для разработки и отладки
программ на языке Visual Basic, представлен на рабочей по­
верхности IDE.
IDE пакета Visual Basic обладает всеми чертами, характерны­
ми для современных Windows-приложений:
• Используется многодокументный интерфейс MDI.
• Окна на рабочей поверхности могут быть произвольно при­
стыкованы одно к другому (docking).
• Поддерживается система контекстных меню.
■ Пункты меню и командные кнопки с нанесенными на них то­
чечными (bitmap) рисунками изображаются трехмерными и
реагируют на появление над ними указателя мыши, как и
предусмотрено новыми стандартами Microsoft.
Ш Пользователю предоставлена возможность существенно из­
менять конфигурацию IDE.
26
Рабочая поверхность IDE
В
Благодаря подключению внешних утилит (надстроек Add-Ins)
возможности IDE могут быть заметно расширены. Кроме того,
в профессиональных версиях Visual Basic можно создавать
собственные внешние утилиты (надстройки) и включать их
вызов в состав команд меню A dd-Ins.
В Возможен доступ ко всем составляющим нескольких проек­
тов, каждая из них при этом содержится в отдельном окне.
Ш IDE снабжена справочной системой, которая проста в исполь­
зовании и содержит достаточно подробные сведения о Visual
Basic?'
‘
^
2.1. Рабочая поверхность IDE
Обзор
J * •" VXpi
Ш Верхнюю часть окна Visual Basic занимает титульная строка с
именем Windows-приложения и элементами управления
окном (стандартное меню и кнопки окна Windows-приложения).
.
v v
В
Ниже находится панель главного меню IDE Visual Basic. Она
содержит основные меню системы.
В Под панелью главного меню располагается панель инструмен­
тов (ее называют стандартной панелью инструментов, по­
скольку IDE позволяет расположить на рабочей поверхности
еще несколько панелей инструментов, принадлежащих раз­
личным подсистемам Visual Basic (см. 2.5)).
В В левой части окна Visual Basic (см. рисунок) вы видите окно
коллекции инструментов Visual Basic. Каждый из содержащих­
ся в нем значков соответствует одному из управляющих эле­
ментов, которые программист может поместить на экранную
форму. Это окно (как и некоторые другие) может занимать на
рабочей поверхности IDE и другое положение (оно может
быть, в частности, пристыковано среди окон в правой части
рабочей поверхности или вообще находиться на экране как
«независимое» дочернее окно).
Рабочая поверхность IDE
■
_________27
На рабочей поверхности IDE могут присутствовать разнооб­
разные окна. Их состав и размещение зависят от манипуляций
пользователя с окнами и определяются также командами
меню View (Просмотр). Далее перечислены основные окна,
необходимые для работы в среде Visual Basic.
• Form W indow (Окно формы). Здесь отображается экранная
форма будущей программы, сюда пользователь помещает
управляющие элементы на этапе визуального программи­
рования (см. 4.1.6).
• Code W indow (Окно кода). Окно редактора кода, содержа­
щее программный код (исходный текст) разрабатываемой
программы (см. 4.1.8).
ф P ro je ct W indow (Окно проекта). Отображает все составные
части текущего проекта и связи между ними, а также позво­
ляет оперативно переключаться между окнами, относящи­
мися к проекту (см. 4.1.5).
Project1 - Microsoft Visual Basic (design) - fForml (Form)f
Run Toob і д а -Ihs WVtcfcW* Hb£
ft. F o r m !
^
P ro je dl (Project1)
Forms
f t Foroil (F o rm l)
Afchabebc I Categorized ]
BackCotar
□ & Н Э 0000сГ]
porderStyte
2-Steable
кбЯЯНҒотІ
v j
2g
Размещение окон IDE
• P roperties W indow (Окно свойств). Содержит список
свойств (а также их значения), относящихся к выбранному
объекту формы или к самой форме. Две вкладки позволяют
изменять порядок, в котором следуют свойства, отображае­
мые в окне, а свернутый список в верхней части окна
свойств — выбрать новый объект (см. 4.1.7).
• Form Layout W indow (Окно вида формы на экране). Пока­
зывает, как будет располагаться окно формы на экране мо­
нитора в период выполнения программы.
• im m ediate W indow (Окно отладочной информации). Позво­
ляет при отладке программы отображать текущие значения
переменных и вводить операторы Visual Basic, подлежащие
немедленному выполнению.
п
2.2. Размещение окон IDE
В соответствии с новыми стандартами Microsoft IDE Visual Basic
позволяет стыковать дочерние окна с материнским окном, а также
между собой. В стандартной конфигурации IDE, как показано на
рисунке, все открытые дочерние окна пристыкованы друг к другу.
Я Чтобы отстыковать окно и сделать его обычным дочерним
окном или переместить уже «свободное» окно на другое место
в пределах рабочей поверхности, необходимо поместить ука­
затель мыши на его титульную строку, нажать левую кнопку и
переместить окно на требуемое место.
В Чтобы пристыковать окно к материнскому окну IDE, «возьми­
тесь» указателем мыши за титульную строку и переместите
окно на границу между двумя пристыкованными окнам, между
которыми вы хотите его поместить (при этом форма «рамки»,
обозначающей размеры окна, должна измениться), и отпус­
тите кнопку мыши. Затем, перетаскивая границы между при­
стыкованными окнами, вы можете придать им необходимые
размеры.
В «Освободить» окно от стыковки с «соседями» можно также
двойным щелчком на его титульной строке.
Размещение окон IDE
29
2.2.1. Управление окнами
■
С помощью команд меню W indow , а также элементов окна
проекта пользователь может с достаточной свободой управ­
лять окнами IDE.
Обзор. Управление окнами
■
■
О кно пр ое кта позволяет открыть или сделать видимым ранее
открытое окно, относящееся к любой составляющей проекта
или группы проектов, открытых в данный момент — это могут
окна форм и связанного с ними кода, а также окна кода про­
граммных модулей.
Командами меню W indow (см. 2.4.10) можно переключаться
между открытыми окнами и упорядочивать их.
Обзор. Закрытие и открытие окон
■
Если на рабочей поверхности не хватает
места, часть окон можно закрыть.
В
Закрыть окно можно щелчком на кнопке [X] в правой верхней
его части.
На стандартной панели инструментов расположена группа кно­
пок (см. 2.5), соответствующих командам меню V iew (см.
2.4.3). С помощью этих кнопок, как и с помощью команд меню
View (Просмотр), можно открыть любое из пяти служебных
окон Visual Basic.
В
Обзор. Разбивка окна кода
В
В
Окно кода может быть разделено (разбито) на две независи­
мые области, каждая из которых будет отображать различные
фрагменты одного и того же текста.
В правом верхнем углу окна кода, над вертикальной полосой
прокрутки, находится небольшая горизонтальная полоска. По­
местите на нее указатель мыши (вид указателя при этом изме­
нится), нажмите левую кнопку мыши и перетащите появившую­
ся разделительную панель в нужное положение. При этом об­
ласти окна кода выше и ниже панели станут самостоятельными.
Справочная система
30
■
■
Положение разделительной панели можно впос­
ледствии изменить, перетащив ее мышью.
Убрать разбивку окна кода можно двойным щелч­
ком на разделительной панели, или просто пере­
тащив ее к верхней или нижней границе окна.
Разделитель
окна
2.3. Справочная система
Справочная система Visual Basic состоит из двух частей. Первая,
отвечающая за справочные сведения по языку Visual Basic и по
интерфейсу пользователя пакета Visual Basic — и есть собственно
справка Visual Basic (Visual Basic Help). Вторая часть, которую на­
зывают «онлайновой» справкой (Books Online), представляет
собой, скорее, набор учебников и справочников по различным ас­
пектам программирования на языке Visual Basic. Точный состав
набора этих учебников и справочников зависит от варианта Visual
Basic 5. Например, справочник по созданию приложений типа
«клиент-сервер» имеется только в варианте для рабочих групп
(Enterprise Edition).
IЙг
2.3.1. Справка Visual Basic
Обзор. Вызов справки
Ш Командой M ic ro s o ft Visual B asic Help T opics меню H elp от­
крывается окно справки Visual Basic, изображенное на рисун­
ке. Окно состоит из трех вкладок:
• Вкладка Содержание отображает общую структуру спра­
вочных сведений в виде разделов (каждый раздел сопро­
вождается значком закрытой книги слева). Двойным щелч­
ком на значке книги можно «раскрыть» раздел, при этом по­
явится список входящих в него разделов более низкого
уровня.
Справочная система________________________________________
31
Справочная система: Visual Basic 5 Help
г-
j|*
*_
Im S v
Л
-- 'v
.v
* *v .
!/ v
X
• « а Я П
^
Ф
т В З л
Содержание J Преамет№ій фдеэтель J Поиск f
Выберите книгу и нажмите кнопку ’.‘Открыть1', /ибо выберите ДРДОО
вклаакч. налр»*«р "Прсомеггмьй ч<язатеп>\ ш ^ШиШ Еі Н Р и^Щ
щ
.
____________________________________
Controls Reference
Interface Reference
T rappable Effort
^
Visual Basic S O ReadMe
Sample Appicabons
^
AddUonal Information
Открыть
Печать.
Отмена
• Вкладка П редм етны й указатель содержит текстовое поле
и список, предоставляющие возможность поиска раздела
по названию. По мере ввода в текстовое поле строки поиска
список отображает соответствующие (или наиболее близ­
кие к ним) названия разделов. Двойным щелчком на эле­
менте списка можно вывести на экран соответствующий
раздел.
• Вкладка П оиск предоставляет более широкие возможности
поиска нужного раздела. Здесь вы можете найти все раз­
делы, в тексте которых упоминается нужное вам слово.
Здесь имеется комбинированное поле (1) для ввода (или
выбора) строки поиска и поле списка (3), содержащее на­
звания разделов, в которых встречается строка поиска.
Кроме того, окно содержит список слов (2), соответствую­
щих введенным символам. Щелчком на кнопке Вы вести или
двойным щелчком на названии раздела можно вывести со­
держимое выделенного раздела на экран. При первом ис­
пользовании вкладки П оиск будет произведено построение
Справочная система
базы данных (это может занять некоторое время), которая
зэтем ^удет ^пользоваться при поиске. Щелчком на кнопке
затем иуде I *
..............fia-sv данных заново. РазПРПбСТООИТЬ мижпи
j —
ЛМ1|Л
личные детали алгоритма поиска можно уточнить в окне
диалога, открывающемся по щелчку на кнопке П арам етры.
Нажатие клавиши [F1] задействует систему контекстной
справки:
. При вводе исходного текста в окне кода клавиша [F1 ] предо­
ставляет подсказку по синтаксису языка.
В окне диалога нажатие на клавишу [F1] эквивалентно щелч­
ку на кнопке Справка.
Многие окна диалога содержат кнопку С правка, по щелчку на
которой можно получить справку о деталях диалога.
Во многих окнах диалога можно также получить справку отно­
сительно конкретного элемента окна диалога. Для этого не­
обходимо поместить указатель мыши на соответствующий
элемент и щелкнуть правой кнопкой мыши (при этом появится
контекстное меню, содержащее пункт Что это такое?, выбрав
который, вы получите справку относительно данного элемента
диалога). Такого же результата можно добиться при вводе с
клавиатуры — нажатие клавиши [F1] приведет к выдаче справ~
w _•____
а ІГЧ Л\ Л Л t/ Г1 _
обладающем
виатуры.
2.3.2. «Онлайновая» справка Visual Basic
Обзор. «О нлайновая» справка
Справка вызывается командой B ooks O n lin e ... меню Help.
С таким же успехом окно справки можно открыть и без запуска
Visual Basic, выбрав пункт B ooks O nline в папке M ic ro s o ft V is­
ual Basic 5 .0 (подменю П рограм м ы меню кнопки П уск).
В левой части окна справки перечислена имеющаяся докумен­
тация — учебники и справочники. Существует ряд возможнос­
тей для навигации и поиска в этой справочной системе:
Система меню
33
• В правой части окна справки отображается текст, описы­
вающий содержимое «книги», название которой выделено
в левой части окна. *
^
? *• Двойным щелчком на значке книги разворачивается ее внут­
ренняя структура, состоящая из «подкниг». Как и прежде, в
правой части окна справки отображается текст, описываю­
щий содержимое элемента, выделенного в левой части
окна.
• Щелчки на значках «+» в древовидной структуре левой части
окна приводят к разворачиванию пункта справа от значка в
более подробную структуру. Щелчки на значке «-» имеют
противоположный эффект.
■ Так же, как и в справке Visual Basic, здесь есть функции поиска.
Они задействуются кнопками, расположенными над левой
частью окна.
Ш Панель инструментов окна справки содержит различные сер­
висные кнопки (печать, записная книжка и др.).
2.4. Система меню
Команды меню позволяют получить доступ ко всем функциям па­
кета. Как и в других Windows-приложениях, все меню Visual Basic
могут быть задействованы как с помощью мыши, так и клавиатурно. В данном разделе приведено краткое описание команд
меню Visual Basic.
Примечание
■
Более подробно команды меню рассмотрены в справочной
системе Visual Basic.
2.4.1. Меню File
Команды меню File (Файл) относятся к наиболее общим аспектам
работы с данными.
2 Заказ 3337
Система меню
New P roject (Новый проект). Этой командой открывается окно
new riUJCOL V
г-_____ олм/un создать НПНЫИ ПППРКТ
пользователю будет предложено выбрать ™п лрое о т Набор предлагаемых топов зависит от варианта (издания) пакета Visual Basic 5.0.
:
ODen P roject (Открыть проект). С помощью этой команды
можно открыть и загрузить существующий проект. Стандарт­
ный диалог Open P ro je ct содержит две вкладки (Existing и
Recent) которые позволяют выбирать либо один из вообще
существующих проектов, либо один из последних, с которыми
работал пользователь.
,
£ ' і
Add P roject (Добавить проект). Создает или открывает еще
один проект, не закрывая текущий. При этом появляется окно
диалога, предлагающее выбрать либо тип нового проекта
(вкладка New), либо существующий проект, который необхо­
димо открыть параллельно уже открытым (вкладки Existing и
Recent). Таким образом можно открыть несколько проектов
одновременно и создать группу проектов.
Remove P roject (Удалить проект). Закрывает текущий проект.
П О И
э т о м
Save P roject/S ave P ro je ct G roup (Сохранить проект/группу
проектов). Сохраняет проект или группу проектов на диске.
Save P roject As/Save P ro je ct G roup As (Сохранить про­
ект/группу проектов под именем). Сохраняет проект или группу проектов под новым именем.
_ .
Save... (Сохранить...). Сохраняет текущий элемент проекта на
диске. Многоточие представляет здесь имя элемента проекта,
который является текущим.
Save...As (Сохранить...под именем). Сохраняет текущий эле­
мент проекта на диске под новым именем.
P rint (Печать). Открывает окно диалога, позволяющее вывес­
ти на принтер форму или программный код.
P rint Setup (Установка параметров печати). Открывает окно
диалога, позволяющее изменить параметры печати.
М а ке ... (Создать исполняемый файл). Создает исполняемый
(EXE, DLL или OCX) файл текущего проекта (многоточие пред­
Система меню
35
ставляет здесь имя файла). При этом открывается окно диа­
лога M ake P roject, позволяющее задать имя исполняемого
файла, а также открыть диалог P ro je ct O ptions (Параметры
проекта), где в свою очередь можно задать параметры ком­
пиляции (например, компиляция в машинный код или в Р-код
и др.).
В M ake P ro je ct G roup (Создать исполняемые файлы для про­
ектов группы). Создает исполняемые (EXE, DLL или OCX)
файлы всех проектов текущей группы.
■ С писок последних откры ты х проектов. Далее в меню File
следует список проектов, которые открывались последними
(до четырех). Открыть любой из них можно щелчком на соот­
ветствующем пункте.
В Exit (Выход). Закрывает окно Visual Basic.
2.4.2. Меню Edit
В меню E dit (Правка) собраны команды, осуществляющие опера­
ции буфера обмена Windows, команды редактирования текста и
экранной формы, а также некоторые другие.
В Undo (Откат). «Откатывает» (отменяет) последнюю выполнен­
ную операцию, т. е. восстанавливает состояние, которое
имело место до нее.
В Redo (Откат отката). Восстанавливает состояние, которое
имело место перед выполнением команды Undo.
В Cut (Вырезать). Удаляет выделенную область и копирует ее в
буфер обмена. Эта и остальные операции буфера выполнимы
как применительно к тексту, так и к управляющим элементам
при редактировании экранной формы.
В Сору (Копировать). Копирует выделенную область в буфер
обмена.
В Paste (Вставить). Вставляет содержимое буфера обмена в те­
кущую позицию курсора (если речь идет о тексте) или в об­
ласть левого верхнего угла формы (если речь идет об управ­
ляющих элементах).
Система меню
Paste Link (Специальная вставка). Устанавливает связь OLE и
DDE-элементов, находящихся на редактируемой форме, с OLE
и DDE-объектами из других приложений.
Delete (Удалить). Удаляет выделенную область или (если ни­
ч е г о не выделено) символ справа от курсора. При редактиро­
вании формы, если ничего не выделено, будет удален текущии
элемент.
-•
Select АН (Выделить все). Выделяет все содержимое текущего
окна.
Find (Поиск). Открывает диалоговое окно, позволяющее наити
первое или все вхождения строки символов в текстовом окне.
Find Next (Продолжить поиск). Продолжает поиск, начатый ко­
мандой Find.
Replace (Поиск с заменой). Открывает окно диалога, позво­
ляющее заменить строку (или все строки) в текущем окне, ко­
торые удовлетворяют заданному образцу, на заданную в этом
же окне строку.
- %■-, Indent (Отступ). Сдвигает все строки в выделенном фрагмен­
те текста на следующую позицию табуляции.
O utdent (Отмена отступа). Сдвигает все строки в выделенном
фрагменте текста на предыдущую позицию табуляции.
Insert File (Вставить файл). Открывает окно диалога, позво­
ляющее открыть текстовой файл и вставить его содержимое
в текущей позиции курсора.
л*##*
List P roperties/M ethods (Список свойств/методов). Открыва­
ет в окне кода список свойств и методов, определенных для
объекта, имя которого предшествует точке (.). Свойство или
метод можно при этом выбрать и вставить после точки (.).
List Constants (Список констант). Открывает в окне кода спи­
сок констант, которые могут быть присвоены в качестве зна­
чения свойству, имя которого предшествует знаку равенства
(=). Константу можно при этом выбрать и вставить справа от
знака равенства (=).
^
Система меню
■
■
■
37
Q uick Info (Синтаксическая подсказка). Дает краткую под­
сказку относительно синтаксиса функции, процедуры или ме­
тода, на имени которого находится курсор в окне кода.
P aram eter Info (Подсказка о параметрах). Дает краткую под­
сказку относительно параметров функции, процедуры или ме­
тода, на имени которого находится курсор в окне кода.
Bookm arks (Закладки). Это подменю содержит четыре коман­
ды, которые позволяют устанавливать и убирать закладки, а
также перемещаться между ними в окне кода.
2.4.3. Меню View
Команды меню View (Вид) позволяют открывать или делать ви­
димыми различные окна, а также получать вспомогательную ин­
формацию.
■ Code (Окно кода). Открывает или делает видимым окно кода,
относящееся к текущей форме или модулю.
■ O b je ct (Окно экранной формы). Открывает или делает види­
мым окно формы, которая является текущей.
■ D e fin itio n (Переход на определение). Переходит на то место
в окне кода, где определяется переменная или процедура, на
имени которой находится курсор.
■ Last P osition (Возврат). Позволяет вернуться в то место кода,
которое непосредственно перед этим подвергалось редакти­
рованию. Visual Basic запоминает 8 таких позиций.
■ O b je ct B row ser (Каталог объектов). Открывает список объек­
тов (типов, классов, констант, методов, свойств и событий),
которые пользователь может использовать в своей програм­
ме. Список также содержит имена процедур и модулей, уже
имеющихся в программе.
■ Im m ediate W indow (Окно отладочной информации). Откры­
вает окно Im m ediate, используемое при отладке программ.
■ Locals W indow (Окно локальных переменных). Открывает
окно Locals, где при отладке программ отображаются значе­
ния переменных.
Система меню
38
W atch W indow (Окно отслеживаемых выражений). Открывает
окно w atches, где при отладке программ отслеживаются зна­
чения выражений, определенных пользователем.
Call Stack (Просмотр стека). Служит для просмотра последо­
вательности вызовов процедур, которая привела к текущему
состоянию программы.
= ^
P roject Explorer (Окно проекта). Открывает окно проекта.
P roperties W indow (Окно свойств). Открывает окно свойств.
Form Layout W indow (Окно вида формы на экране). Откры­
вает окно, отображающее положение формы на экране, каким
оно будет при выполнении программы.
Property Pages (Страницы свойств). Открывает окно диалога
с несколькими вкладками, дающими доступ к свойствам вы­
бранного управляющего элемента.
ш ш тц ф ф
Ш Toolbox (Коллекция инструментов). Открывает или делает ви­
димым окно коллекции инструментов.
.>
Color P alette (Палитра). Открывает окно диалога, позволяю­
щее выбрать цвет текущего элемента или формы.
Toolbars (Панели инструментов). Это подменю содержит пять
команд, управляющих наличием на экране панелей инстру­
ментов Visual Basic, а также команду C ustom ize (Настройка),
которая позволяет создать новую панель инструментов или
изменить настройки IDE в том, что касается имеющихся пане­
лей инструментов, а также панели главного меню (см. 2.5.2).
2.4.4. Меню Project
В меню P roject (Проект) собраны команды, предназначенные для
управления проектом.
' J: 'Л ~
Ш Большинство команд этого меню предназначено для включе­
ния в состав текущего проекта нового элемента. Каждая Addкоманда открывает окно диалога, которое позволяет создать
и включить в состав проекта новый элемент (или, не создавая
нового, выбрать и включить в проект существующий элемент).
Вот эти команды:
^
Система меню
39
• Add Form (Добавить форму). Открывает окно диалога, по­
зволяющее включить в состав проекта новую или сущест­
вующую форму.
• Add MDI Form (Добавить MDI-форму). Открывает окно диа­
лога, позволяющее включить в состав проекта новую или су­
ществующую материнскую MDI-форму. Проект может со­
держать только одну материнскую MDI-форму, поэтому
после ее включения данная команда становится недоступ­
ной.
• Add M odule (Добавить программный модуль). Позволяет
включить в состав проекта новый или существующий про­
граммный модуль.
• Add Class M odule (Добавить модуль классов). Позволяет
включить в состав проекта модуль, содержащий определе­
ния классов.
• Add User C ontrol (Добавить элемент, определяемый поль­
зователем). Visual Basic разрешает пользователю создавать
управляющие элементы. Для включения таких элементов в
состав проекта и предназначена эта команда.
• Add P ro p e rty Page (Добавить страницу свойств). Позволяет
включить в состав проекта страницу свойств. Visual Basic
дает возможность создавать страницы свойств для новых
или существующих определяемых пользователем управля­
ющих элементов.
• Add U ser D ocum ent (Добавить пользовательский доку­
мент). Эта команда доступна только при работе над ActiveXэлементом (проекты типа ActiveX EXE или ActiveX DLL). Она
позволяет включить в состав проекта пользовательский до­
кумент, который предназначен для взаимодействия с про­
граммой Internet Explorer или другим броузером, поддержи­
вающим технологию ActiveX.
• Add A ctiveX D esigner (Добавить конструктор ActiveX). Ко­
манда становится доступной после того, как в диалоге Com­
ponents (меню P roject) будет подключен хотя бы один кон­
структор AxtiveX.
Система меню
• Add File (Добавить файл). Включает существующий файл в
состав проекта, при этом один и тот же файл может быть
включен в состав нескольких проектов. Любые изменения,
внесенные в файл, отразятся во всех проектах одновременНО.
Remove .. (Исключить...). Многоточие здесь представляет те­
кущий элемент проекта. В результате выполнения этой коман­
ды соответствующий элемент будет исключен из состава про­
екта.
"
References (Ссылки). Открывает окно диалога, которое по­
зволяет включить в проект ссылки на библиотеки объектов,
классов и элементы других проектов. Ссылки позволяют об­
ращаться в коде к объектам из других приложений.
Components (Компоненты). Открывает окно диалога, позво­
ляющее для данного проекта включить в состав коллекции ин­
струментов управляющие элементы, конструкторы и другие
объекты (например, документы Word).
...P ro p e rtie s (Свойства проекта ...). Многоточие здесь пред­
ставляет имя текущего проекта. Открывает окно свойств про­
екта, позволяющее их изменить (см. 4.1.5). Диалог состоит из
четырех вкладок:
• General (Общие). Эта вкладка содержит наиболее общие
свойства проекта: имя проекта, его тип, стартовый объект
и др.
I
• М аке (Сборка). Здесь устанавливаются параметры сборки
проекта: имя исполняемого файла, параметры командной
строки компилятора и др.
Щ -vx
• Compile (Компиляция). На этой вкладке можно установить
параметры компиляции— такие, как, например, режим ком­
пиляции (в P-код или в машинный код), вид оптимизации
кода (по скорости или по размеру) и др.
• Com ponent (Компонент). Параметры, доступные на этой
вкладке, определяют режим старта проекта (используется
при создании ActiveX-элементов).
■
Система меню
______ 41
2.4.5. Меню Format
Команды и подменю этого меню предназначены для форматиро­
вания уже размещенных на форме управляющих элементов — под
форматированием понимается изменение размеров и позиции
элементов, а также их выравнивание.
■ A lign (Выровнять). Это подменю содержит ряд команд, пред­
назначенных для выравнивания выделенной группы элемен­
тов. За исключением команды То Grid, все команды этого под­
меню доступны лишь в случае, если на форме выделена груп­
па (не менее двух) управляющих элементов.
• Lefts (По левому краю). Сдвигом по горизонтали выравни­
вает левые края выделенных элементов по левому краю того
элемента, который был выделен последним (его размерные
маркеры обозначены более темным цветом):
• C enters (По центру).
• R ights (По правому краю).
• Tops (По верхнему краю). Сдвигом по вертикали выравни­
вает верхние края выделенных элементов по верхнему краю
того элемента, который был выделен последним.
• M iddles (По центру).
. п я ,о . 1 ш
• B ottom s (По нижнему краю),
• То G rid (По сетке). Перемещает левые верхние углы на бли­
жайшие узлы сетки.
Ш M ake Same Size (Сделать одинакового размера). Подменю
содержит команды, которыми можно уравнять размеры выде­
ленных элементов (при этом за «образец» берется элемент,
выделенный последним — элемент с темными размерными
маркерами):
ш
• W idth (По ширине).
• H eight (По высоте).
■
• B oth (По высоте и ширине).
Size to G rid (Размеры по сетке). В результате выполнения
этой команды размеры выделенных элементов будут измене-
Система меню
ны так, чтобы их вертикальные и горизонтальные грани совпа­
с ближайшими линиями сетки.
Л ^
Horizontal S pacing/V ertical S pacing (Промежутки по горизонтали/Промежутки по вертикали). Эти два подменю содер­
жат идентичные наборы команд, предназначенных для изме­
нения свободных промежутков между выделенными элемен­
тами по горизонтали/вертикали:
д
■
а
л
и
•
•
•
•
Make Equal (Сделать равными).
и І
ЭIncrease (Увеличить на один шаг сетки).
Decrease (Уменьшить на один шаг сетки).
Remove (Удалить). При этом соответствующие края эле­
ментов совпадут друг с другом.
Ш C enter in Form (В центр формы). Две команды этого подменю
позволяют переместить центры выделенных элементов на
центральную вертикальную либо горизонтальную линию
формы.
гг .у
S O rder (План). Меняет положение выделенных элементов от­
носительно остальных элементов формы:
• Bring То Front (Вынести на передний план).
• Send То Back (Убрать на задний план).
■ Lock C ontrols (Блокировка). Все управляющие элементы,
размещенные на текущей форме, блокируются — переместить
их с помощью мыши невозможно.
<
2.4.6. Меню Debug
В меню Debug (Отладка) собраны команды, используемые при
отладке программы и поиске ошибок. Эти команды позволяют уп­
равлять процессом выполнения программы и наблюдать за ее со­
стоянием.
^
Ш Step Into (Шаг). Эта команда выполняет один оператор про­
граммы. Если текущий оператор — вызов процедуры, следу­
ющим текущим оператором станет первый оператор проце­
дуры.
І ж
I, .. ^
Система меню
■
43
Step Over (Шаг через процедуру). Эта команда также выпол­
няет один оператор программы. Но если текущий оператор —
вызов процедуры, то следующим текущим оператором станет
первый оператор после вызова процедуры.
■ Step O ut (Шаг из процедуры). Если текущим оператором яв­
ляется один из операторов процедуры, то в результате выпол­
нения этой команды будут выполнены все оставшиеся опера­
торы процедуры.
11 Run То C ursor (Выполнять до курсора). Будут выполнены все
строки, начиная с текущей и кончая той, в которой находится
курсор. Затем программа перейдет в режим останова (ее вы­
полнение будет приостановлено).
Ш Add W atch (Добавить отслеживаемое выражение). Открывает
окно диалога, позволяющее определить выражение, значение
которого можно будет наблюдать при отладке.
■ E dit W atch (Редактировать отслеживаемое выражение). От­
крывает окно диалога, позволяющее отредактировать или
удалить наблюдаемое выражение.
Ш Q uick W atch (Просмотр текущего значения). Открывает окно
диалога, позволяющее узнать значение выражения, которое
не было ранее определено как отслеживаемое (в диалоге Add
W atch).
■ Toggle B reakpoint (Установить/снять точку разрыва). Уста­
навливает (или снимает ранее установленную) точку разрыва
в позиции текущей строки.
■ Clear All B reakpoints (Снять все точки разрыва). Снимает все
ранее установленные точки разрыва в отлаживаемой програм­
ме.
Ш Set N ext S tatem ent (Задать следующий оператор). Позволяет
принудительно сделать текущей произвольную строку исход­
ного текста отлаживаемой программы.
■ Show N ext S tatem ent (Показать следующий оператор). В ре­
зультате выполнения этой команды будет выделен оператор,
который должен получить управление после текущего.
Система меню
Меню Run
Команды меню Run (Выполнить) управляют процессом выполне­
ния программы. В отличие от меню Debug программа здесь рас­
сматривается как нечто целое и неделимое.
■ s ta rt (Пуск). Запускает программу.
• ^
■
S tart W ith Full Com pile (Пуск с полной компиляцией). Осу­
ществляет полную компиляцию проекта и запускает програм-
му.
;
~
Я Break (Прерывание). Прерывает выполнение программы и
переводит IDE в режим прерывания (режим пошаговой отлад­
ки).
Н И
а
Я End (Останов). Завершает выполнение программы.
Я R estart (Повторный пуск). Перезапускает выполяющуюся про­
грамму. При этом программа стартует с начала, все перемен­
ные заново инициализируются.
2.4.8. Меню Tools
Меню Tools (Инструментарий) содержит команды, которые не
нашли себе места в других меню.
Я Add Procedure (Создать процедуру). Открывает окно диалога,
помогающее программисту создать процедуру, функцию,
свойство или событие.
/ *
Я Procedure A ttrib u te s (Атрибуты). Позволяет установить атри­
буты для свойств и методов объекта.
Я Menu E ditor (Редактор меню). Открывает окно редактора
меню, позволяющее присоединить меню к текущей форме.
Я O ptions (Параметры). Открывает окно диалога (шесть вкла­
док), позволяющее менять параметры и настройки IDE.
2.4.9. Меню Add-Ins
Add-Ins (внешние утилиты, запускаемые из среды IDE) позволяют
расширять возможности IDE Visual Basic практически безгранич­
но. Все варианты Visual Basic 5 позволяют включать вызов внеш-
Система меню
45
них утилит (надстроек) в меню A dd-Ins, а профессиональные ва­
рианты позволяют также эти утилиты создавать. Поэтому содер­
жимое меню A dd-Ins зависит как от варианта (издания) Visual
Basic, так и от того, какие пункты включил в него пользователь.
Как минимум, это меню включает в себя один «обязательный»
пункт: A dd-In M anager (администратор внешних утилит), кото­
рый, собственно, и дает возможность включать в это меню новые
команды.
2.4.10. Меню Window
Стандартное для любого Windows-приложения меню W indow
(Окно) содержит стандартные же команды управления окнами.
■ S p lit (Разбивка). Включает или выключает разбивку окна кода
на две независимые области. Команда доступна только в том
случае, когда окно кода является текущим.
■ Tile H orizontally (Горизонтальная черепица). Если вы рабо­
таете с окнами в режиме MDI, то эта команда укладывает окна
форм и кода горизонтальной черепицей.
■ Tile V e rtica lly (Вертикальная черепица). Если вы работаете с
окнами в режиме MDI, то эта команда укладывает окна форм
и кода вертикальной черепицей.
■ Cascade (Каскад). Укладывает окна форм и кода каскадом.
■ A rrange Icons (Расположить значки). Укладывает значки ми­
нимизированных окон в нижней части окна IDE.
■ W indow L ist (Список окон). Нижняя секция меню W indow
представляет собой список всех открытых окон.
2.4.11. Меню Help
Команды меню Help (Справка) относятся к справочной системе
Visual Basic.
■ M ic ro s o ft Visual B asic Help Topics (Справка Visual Basic). За­
пускает справочную систему и выводит на экран окно диалога
(три вкладки), позволяющее найти нужный раздел.
Панели инструментов
■
Books Online («Онлайновая» справка). Дает доступ к набору
«книг» - учебников и справочников, освещающих различные
аспекты программирования на языке Visual Basic.
■ O btaining Technical S upport (Техническая поддержка). Эта
команда запускает справочную систему, которая предлагает
пользователю разнообразную информацию об услугах корпо­
рации Microsoft в сфере поддержки своих программных продуктов.
т M icro so ft on th e W eb. Список WWW-адресов, по которым
имеющий доступ к Internet пользователь может получить по­
лезные сведения о Visual Basic (доступ возможен непосред­
ственно из среды Visual Basic).
? у
Ш About M icro so ft Visual B asic (О программе Visual Basic). Вы­
водит на экран сведения, касающиеся лицензии на данную
копию Visual Basic.
.
2.5. Панели инструментов
IDE в стандартной конфигурации позволяет иметь на рабочей по­
верхности до пяти панелей инструментов (Toolbars). Кроме того,
пользователь может создавать новые панели по своему усмотре­
нию. Кнопки с точечными (bitmap) рисунками, размещенные на
панелях инструментов, предоставляют наиболее простой и бы­
стрый доступ к наиболее употребительным функциям и командам
меню. В исходном состоянии на рабочей поверхности присутст­
вует только одна панель инструментов, называемая стандартной.
Другие панели носят специализированный характер и принадле­
жат различным подсистемам Visual Basic.
Примечание
Ш Чтобы вывести на экран другие панели инструментов, необ­
ходимо поместить указатель мыши на любую панель инстру­
ментов или на панель главного меню и щелкнуть правой кноп­
кой мыши. В открывшемся контекстном меню следует выбрать
либо имя нужной панели, либо команду Customize — в резуль­
тате откроется окно диалога, позволяющее определить, какие
Панели инструментов
47
из шести панелей (включая панель главного меню) должны
присутствовать на экране. Этот же диалог позволяет созда­
вать новые панели инструментов (кнопка New).
■ Как и прочие окна IDE, окна панелей инструментов могут
быть пристыкованы к другим окнам или оставаться «свобод­
ными».
■ «Отстыковать» панель инструментов от IDE можно, взявшись
указателем мыши за любое свободное (не занятое кнопкой)
место или выполнив двойной щелчок на таком месте.
Ш Чтобы пристыковать панель инструментов к материнскому
окну IDE, просто поместите ее на нужное место или выполните
двойной щелчок на титульной строке окна панели.
2.5.1. Кнопки стандартной панели инструментов
В таблице 2.1 приведены изображения кнопок стандартной пане­
ли инструментов и краткие пояснения к ним. Кроме того, подсказ­
ку относительно назначения кнопки можно получить, поместив на
нее (на несколько секунд) указатель мыши.
Таблица 2.1. К н о пки стандартной панели инструм ентов
Кнопка
Действие
Добавить новый проект. Создает новый проект,
не закрывая уже открытых.
Добавить элемент проекта. Создает и включает
в состав текущего проекта новый элемент
(по умолчанию — форму). При щелчке
непосредственно на кнопке новый элемент будет
того же вида, что и последний добавленный.
Редактор меню. Вызывает редактор меню Menu
Editor для текущей формы.
Открыть существующий проект или группу
проектов. Открывает окно диалога Open Project
Панели инструментов
Кнопка
Действие
Сохранить проект или группу проектов
&
Вырезать. Переносит в буфер обмена Windows
выделенную область.
Копировать. Копирует в буфер обмена Windows
выделенную область.
1,
*
Вставить. Вставляет содержимое буфера обмена
в текущую позицию курсора^ (если речь идет о
тексте) или в верхнии левый угол формы (если
речь идет об управляющих элементах).
Поиск. Открывает окно диалога Find,
позволяющее найти строку в тексте.
Откат. Отменяет последнюю выполненную
операцию редактирования.
Откат отката. Отменяет последний откат.
Пуск. Запускает разрабатываемую программу.
Прерывание. П эерывает выполнение программы
и переводит ID : в режим отладки.
Я
Останов. Завершает выполнение программы.
1
Окно проекта. Открывает окно проекта.
1
Панели инструментов
Кнопка
49
Действие
Окно свойств. Открывает окно свойств.
Окно вида формы на экране. Открывает окно,
отображающее положение формы на экране,
каким оно будет при выполнении программы.
Каталог объектов. Открывает окно Object
Browser.
Коллекция инструментов. Открывает или делает
видимым окно коллекции инструментов.
2.5.2. Настройка панелей инструментов
Стандартный набор панелей инструментов можно расширить, а
имеющиеся панели — изменить.
Процедура. С оздание новой панели инструм ентов
1. Выберите в меню View команду T oolbars и в раскрывшемся
подменю — пункт Custom ize.
в
открывшемся
окне
диалога
C
ustom
ize
выберите
вкладку
2.
Toolbars и щелкните на кнопке New.
В
появившемся
окне
ввода
введите
имя
новой
панели
инстру3.
ментов и щелкните на ОК.
Перейдите
на
вкладку
Commands,
выберите
нужные
меню
и
4.
команды и «перенесите» их на новую панель инструментов с
помощью мыши.
5. Завершите диалог щелчком на кнопке Close.
Примечание
Созданные панели инструментов можно удалить, ИСП0ЛЬЗУ"' ™т
же диалог C ustom ize. Для этого следует выделить на вкладке
Toolbars необходимый пункт и щелкнуть на D elete.
«Горячие» клавиши
50
Процедура. М одиф икация сущ ествую щ ей панели
инструментов
1. Откройте диалог C ustom ize (V iew \T oolbars\C ustom ize) на
вкладке Commands.
■
Я
2. В левой части вкладки вы видите список категорий команд, в
правой отображаются команды, соответствующие выбранно­
му элементу списка слева.
1
* Любую из команд вы можете перетащить с помощью мыши
на нужную панель инструментов.
V.,- 1
• И наоборот, «взявшись» указателем мыши за кнопку на па­
нели инструментов и вытащив ее за пределы окна, вы тем
самым удалите кнопку с панели.
3. Завершите диалог щелчком на Close.
Примечание
f
Если вы хотите вернуть стандартным панелям инструментов их
первоначальный вид, то откройте диалог C ustom ize (V iew \Toolbars\C ustom ize) на вкладке Toolbars, выделите необходимый
пункт и щелкните на кнопке Reset.
2.6. «Горячие» клавиши
Для многих операций в IDE существуют так называемые горячие
или быстрые клавиши (Shortcuts). Очень часто операцию можно
выполнить гораздо быстрее, нажав сочетание клавиш, чем после
путешествия с помощью мыши по меню и подменю. В таблицах
2-2 2.6 приведен краткий обзор наиболее употребительных со­
четаний клавиш в среде Visual Basic.
л В
«Горячие» клавиши
Таблица
Сочетания клавиш общ его назначения
1 Сочетание клавиш
| Действие
I
[Ctrl]+[N]____________
Новый проект_____ _________________ 1
[Ctrl]+[0]
Открыть проект______________ ___________ 1
Сохранить файл_______ __________________ 1
К
[Ctrl]+[P]
[Alt]+[F4], [Alt]+[Q]
и
I [Shift]+[F10]
Печать__________ _ _ ___________________1
1 Выход из Visual Basic
Вызов справки________ ________ ___________1
Вызов контекстного меню______________
1 [Ctrl]+[Z]_____________1 Откат
I [Ctrl]+[X]
______________
______________ _________ ________ I
|
1 Вырезать
[Ctrl]+[C]
Копировать
[Ctrl]+[V]
Вставить
[Del]
Удалить
_____
_________ __________ I
1
____ ______________________
[Ctrl]+[A]
1 Выделить все
[Shift]+[F2]
ІПерейти к объявлению функции/процедуры
I [Ctrl]+[SWft]+[F2]
Перейти на предыдущую позицию
редактирования _____
Таблица 2.3. Сочетания клавиш редактора кода
Сочетание клавиш
Действие
[Ctrll-ҢҒ]
Поиск
[Ctrl]+[H]
Поиск с заменой
Продолжение поиска вперед
[Shift]+[F3]
1
Продолжение поиска назад
1
52
«Горячие» клавиши
Сочетание клавиш
Действие
[Ctrl]+[Home]
Переход на начало текста
[Ctrl]+[End]
Переход на конец текста
[Home]
Переход на начало строки
[End]
Переход на конец строки
[Tab]
Отступ
[Shift]+[Tab]
Отмена отступа
[Ctrl]+[J]
Список свойств/методов
[Ctrl]+[Shift]+[J]
Список констант
[Ctrl]+[l]
Синтаксическая подсказка
[Ctrl]+[Shift]+[l]
Подсказка о параметрах
[Ct rl] -Ь[Пробел]
Автоматическое завершение не до конца
введенных слов
[Ctrl]+[D]
Добавить файл
[ctrij+m
Добавить/удалить управляющий элемент
9
Таблица 2.4. Сочетания клавиш для управл ения о кн а м и
Сочетание клавиш
Действие
Окно каталога объектов
[Ctrl]+[G]
Окно отладочной информации
[Ctrl]+[L]
Просмотр стека
[Ctrl]+[R]
Окно проекта
Окно свойств
[Shift]+[F4]
Страницы свойств
[Shift]+[F7]
Окно формы
Окно кода
53
«Горячие» клавиши
Для
Сочетание клавиш
Действие
[Ctrl]+[F7]
Компиляция
[Ctrl]+[F5]
Полная компиляция и запуск
Таблица 2.6. Сочетания клавиш , используем ы е при отладке
Сочетание клавиш
Действие________________________
[Ctrl]+[Shift]+[F9]
Снять все точки разрыва
[F5]
Запуск программы_______________
______
Выполнять
до
указателя__________
[Ctrl]+[F8]_______________
Повторный п у с к ______________
[Shift]+[F5]
[Shift]+[F8]
Шаг через процедуру
[Ctrl]+[Shift]+[F8]
Шаг из процедуры_______________
[F8]
Шаг______ ________
I [Shift]* [F9]
[F9]
[Ctrl]+[F9]
I [Ctrl]+[Pause]
Просмотр текущего значения_____
Установить/Снять точку разрыва
Задать следующий оператор______
Прерывание______
Примечание
Более полную и подробную информацию о «горячих» клавишах
Visual Basic можно найти в справке Visual Basic (команда M i­
c ro s o ft Visual B asic Help T opics меню Help).
54____________________________________ Конфигурация и параметры
2.7. Конфигурация и параметры
Visual Basic предоставляет пользователю достаточно обширные
возможности в плане настройки параметров среды и изменения
конфигурации. Большинство доступных для настройки парамет­
ров Visual Basic сосредоточены в диалоге O ptions (команда Op­
tions меню Tools). Настройка панелей инструментов осуществля­
ется в диалоге Custom ize (команда C ustom ize подменю Toolbars
меню View, см. 2.5.2).
Options
Erfltor I
Format I General I Docking | Drw rorm ent I Advanced I
; Code Settings ■ ......-—
- ...........
J f jjg p Auto Syntax Check
F
Ш
r --------- -—
la b W idth: I 4
*
Ж
Р l ^ i j i r e Variable Declaration/
П7 e *A i u u __ _
— -.Ш Ш
К Auto y s t Members
Иу"ІІ
Ж
I F Auto Quick In fo
1 . .. ■
Auto Indent
Ш B fi
-
ШШI Щ
Auto Data Tips
W indowSettings
ЩQrag-end43rep Text ЕсЙп<
F Defauft to Fu3 Module View
F
причем каждая
метров.
Erocedtre Separator
вкладок
ПС одним ИЗ ярлычков можно открыть нужную вклад­
ку И получить доступ к соответствующей категории параметРОВ.
ftp '- { Г
иімрноі!™
8 Диалога щелчком на О К приведет к фактическому
З я в р п тіи модиФицированных в ходе диалога параметров.
L mpEpmI o ДИаЛ° Га щелчком на О тмена закроет диалог без
изменения параметров.
.%
Конфигурация и параметры__________ __________________________ 1_
Обзор. В кладки диалога O ptions
В E ditor (Редактор). На этой вкладке представлены параметры,
имеющие отношение к собственно вводу программного кода
(группа Code S ettings) и параметры окна редактора (группа
W indow Settings).
• Группа параметров Code S ettings. Параметры этой группы
отвечают за режимы ввода программного кода. Здесь
можно включить или выключить различные сервисные функ­
ции, которые облегчают взаимоотношения пользователя с
синтаксисом языка Visual Basic. Например, флажок Auto
Syntax Check включает/отключает автоматическую провер­
ку синтаксиса строки, установка флажка Require Variable
D eclaration соответствует наличию в программе оператора
Option Explicit (обязывающего программиста заранее объ­
являть все переменные), а флажок Auto Q uick Info обеспе­
чивает автоматическую подсказку относительно функций и
их параметров.
• Группа параметров W indow S ettings. Эти параметры отве­
чают за режимы функционирования окна кода. Флажок
D rag-and-D rop T ext E diting разрешает перетаскивание
элементов текста внутри окна кода, а также из окна кода в
окна W atch и Im m ediate. Флажок Procedure S eparator
включает/выключает разделительные линии между проце­
дурами — это облегчает ориентирование в тексте. Флажок
D efault to Full M odule View определяет режим прокрутки в
окне кода (прокрутка, как обычного текста или пролистыва­
ние по процедурам).
В E ditor Form at (Параметры текста). Эта вкладка определяет
вид текста в окне кода. Здесь можно выбрать шрифт и цвет
символов, относящихся к разным категориям программного
кода. Например, выделение цветом ключевых слов облегчает
восприятие текста, а выделение ошибок
их поиск.
В General (Общие параметры). Здесь собраны параметры, оп­
ределяющие наиболее общие черты поведения Visual Basic,
такие, как реакция на ошибки, выравнивание по сетке, ее шаг
и др.
■
Docking (Стыковка окон). Вкладка содержит список окон, для
которых можно включить или выключить режим стыковки.
■ Environm ent (Среда). Параметры, представленные на этой
вкладке, объединены в три группы: W hen Visual Basic starts
(параметры старта Visual Basic), When a program s ta rts (пара­
метры старта программы) и Show T em plates For (наличие
шаблонов в командах A d d ... в меню P roject).
• When Visual Basic sta rts. Содержит переключатель на два
положения: P rom pt fo r p ro je c t (Предлагать выбрать тип
проекта, создаваемого при старте) и C reate d e fa u lt p ro je ct
(Автоматически создавать проект типа Standard EXE).
• When a program sta rts. Содержит переключатель на три по­
ложения: Save Changes (сохранять проект перед запуском
программы), P rom pt То Save Changes (сохранять по выбо­
ру пользователя) и D on’t Save Changes (не сохранять про­
ект перед запуском программы).
• Show Tem plates For. Определяет, предлагать ли пользова­
телю набор шаблонов при выполнении A dd-команд меню
P roject.
И Advanced (Дополнительные параметры). Вкладка содержит
три флажка: Background P ro je ct Load разрешает фоновую
загрузку проекта (при этом управление возвращается к поль­
зователю быстрее), N o tify w hen changing shared p ro je ct
item s обеспечивает выдачу предупреждения в случае, когда
пользователь пытается сохранить на диске модифицирован­
ный им элемент проекта, который входит в состав более чем
одного проекта. И, наконец, флажок SDI D evelopm ent Envi­
ronm ent определяет режим работы интегрированной среды
разработки — если этот флажок установлен, то в следующий
Раз^ '? иа' " ? , 'с запУстится в режиме однодокументного ин­
терфейса (SDI — Single Document Interface), т. е. каждое из
Window3461 самостоятельным окном на рабочей поверхности
57
Внешние утилиты Add-Ins
2.8. Внешние утилиты Add-Ins
Под термином Add-Ins (надстройки, внешние утилиты) в системе
Visual Basic понимаются некоторые сервисные программы, кото­
рые могут быть интегрированы в среду Visual Basic с целью рас­
ширения его возможностей.
Обзор. П рим енение утилит A d d -In s
Утилиты (надстройки) Add-Ins интегрируются в_ среду Visual
Basic на правах ActiveX-элементов. И, как любой ActiveX-элемент, Add-ln-утилита должна быть зарегистрирована в систе­
ме, прежде чем ею можно будет воспользоваться. В нормаль­
ном случае такая регистрация происходит при установке ути­
литы. Процедура регистрации описана в главе 6 (6.3.1).
Add-tn Manager
OK
к ДуаІаЫе Add-Ins:
Cancel
Й ActiveX Control Interface Wizard
У ; VB ActiveX Document Mgratlon Wizard
i^VB Add-In Toolbar
jV B API Viewer
5VB Application Wizard
3VB Class Bidder UtSty
J VB Data Form Wizard
Ю VB Property Page Wizard
Ц
i
VB W izard Manager
Я
!
■
■
■
Доступ к зарегистрированным в системе Add-Іп-утилитам воз­
можен через меню A dd-Ins.
Включить в меню A dd-Ins доступные для этого Add-ln-утилиты
можно с помощью команды A dd-In M anager меню Add-Ins.
К сожалению, Visual Basic не располагает макроязыком, как,
например, Developer Studio. Единственный способ програм­
мировать саму IDE состоит в применении Add-ln-утилит. Про­
фессиональные варианты Visual Basic позволяют создавать
Add-ln-утилиты — этот процесс описан в главе 6 (см. 6.3.2).
Visual Basic
как язык
При беглом знакомстве с технологией визуального программи­
рования может показаться, что все сводится к тому, чтобы по­
местить на форму управляющие элементы и ввести немного не­
сложного кода в заготовки процедур обработки событий. Во мно­
гих случаях (когда речь идет о программах, решающих простей­
шие задачи) так оно и есть. Но если потребуется реализовать хоть
сколько-нибудь сложные алгоритмы обработки данных, то на пер­
вый план выступает собственно язык Visual Basic. Данная глава
посвящена основам языка Visual Basic — его синтаксису, типам
данных и управляющим структурам. Поскольку Visual Basic явля­
ется объектно-ориентированным языком, последний раздел
главы будет посвящен объектам и классам Visual Basic.
3.1. Основы языка
Первое, что необходимо знать о любом языке программирова­
ния, — это его зарезервированные (ключевые) слова и поддер­
живаемые им типы данных.
3.1.1. Зарезервированные слова Visual Basic
В приведенной ниже таблице собраны зарезервированные (клю­
чевые) слова Visual Basic.
59
Основы языка
Таблица 3.1. Зарезервированны е слова Visual Basic
ALL
Mid___________ I Resume
False
•
New
For
A
____ I Seek
S
ASC___________I Friend
Next__________ I SELECT
Binary_________ Get
Nothing
I Set
Null
| Static
I BY
IN
I ByRef
INDEX
| ByVal
CREATE
j[ on
I Step
I Input
I On____________ I String
[ into
I Option
I Date__________ [ Is
_____________________________________________________________________________
Optional
I TABLE
Then
DESC
I JOIN
I ParamArray
I Time
| DROP
I Len
j Print
I Else
| Let
I Private
I
| WITH
T
Empty
j L o c k _______ Property
Error
I Me
o
| With Events_____
Public
3.1.2. Типы данных
Типы данных относятся к самым фундаментальным свойствам лю­
бого языка программирования. Чтобы написать программу на не­
котором языке, необходимо знать, какие типы данных поддержи­
вает данный язык и как они в нем определены. Например, при
передаче параметров по ссылке во внешнюю функцию или при
переопределении переменных важно точно знать определение
типа внутри Visual Basic, чтобы избежать несовместимости с
внешним типом.
В языке Visual Basic определены все стандартные типы данных.
Единственной особенностью является тип Variant. Если перемен­
ная объявлена без указания типа, ей будет присвоен тип Variant,
60
Основы языка
который способен играть роль нескольких наиболее употреби­
тельных типов (строка, дата, целое и др.).
Пользователь может объявить собственный тип (см. 3.2.4) как
комбинацию переменных стандартных типов. Переменные поль­
зовательских типов, представляющие собой логически связанные
наборы нескольких переменных, выступающих под одним име­
нем, важны для организации взаимодействия с АРІ-функциями
Windows.
—
В таблице 3.2 приведен список типов данных, поддерживаемых
языком Visual Basic.
,у
Таблица 3.2. Типы данны х Visual Basic
Тип данных
Объем
Краткая Диапазон значений
занимаемой запись
памяти
Целые типы
Byte (Байт)
1 байт
от 0 до 255
Boolean
(Булево)
2 байта
True или False
Integer (Целое) 2 байта
Long (Целое
4 байта
двойной
длины)
%
от -32768 до 32767
&
от -2147483648
до 2147483647
Плавающие типы
Single-positive
(Плавающее
положитель­
ное)
4 байта
от 1.401298Е-45
до 3.402823Е+38
Single-negative
(Плавающее
отрицатель­
ное)
4 байта
от -3.402823Е+38
до -1.401298Е-45
61
Основы языка
Тип данных
Double-positive
(Плавающее
положитель;
ное двойной
точности)
Double-negative (Плаваю­
щее отрица-_
тельное двой­
ной точности)
Объем
_ I Краткая Диапазон значений
занимаемой! запись
памяти
от 4.94065645841247Е-324
#
8 байт
до 1.79769313486232Е+308
8 байт
#
от -1.79769313486232Е+308
до -4.94065645841247Е-324
Строковые типы
String (Строка
переменной
длины)______
10 байт +
длина строки
от 0 до двух миллиардов
символов
String (Строка
фиксирован­
ной длины)
длина строки
от 1 до прибл. 65400
Объектные тияы
4 байта
ссылка на объект
Variant
(Variant-число
вые типы)
16 байт
любое числовое значение
Variant
(Variant-строковые типы)
22 байта +
длина строки
любое строковое значение
Object
(Объект)
Variant-типы
Прочие типы
Currency
(Число
в денежном
формате)
от -922337203685477.5808
до 922337203685466.5807
Основы языка
52
Г Тип данных
Краткая Диапазон значений
Объем
занимаемой запись
памяти
Date (Дата)
8 байт
Decimal
(Десятичное
число)
14 байт
Определяемые
пользователем
■типы
от 1 января 100 года
до 31 декабря 9999 года
7^2281625142643375935439
50335 без знаков после
запятой;
+ /'
7.92281625142643375935439
50335 с 28 знаками после
запятой; ближайшее к
нулю значение:
+ /0.000000000000000000000
0000001
диапазон значений
соответствует диапазону
используемых базовых
типов
Примечание
Количество знаков в объявленных пользователем типах зависит
от стандартных типов, использованных при объявлении.
3.1.3. Комментарии
При работе над программой необходимо иметь возможность ис­
пользовать комментарии, т. е. фрагменты текста, которые не яв­
ляются программным кодом и будут проигнорированы компиля­
тором. Комментарии выполняют две важные функции: они позво­
ляют качественно документировать программу, поясняя смысл
программного кода, и они же могут быть использованы для того,
чтобы «отключить» (не удаляя) фрагмент программного кода в
целях отладки или тестирования программы.
Основы языка
__________________
63
В языке Visual Basic предусмотрены два способа ввода коммен­
тариев. Первый заключается в применении апострофа (’ ). Его
можно вставить в любом месте строки (в том числе и в начале),
при этом все символы, начиная от апострофа и заканчивая пос­
ледним символом строки, будут рассматриваться как коммента­
рий. Вторая возможность — использование зарезервированного
слова REM вместо апострофа. Слово REM представляет собой ру­
димент «старого, доброго» языка BASIC, оставленный в Visual
Basic, наверное, из ностальгических побуждений.
Примечание
Visual Basic не предусматривает «блочных» комментариев, суще­
ствующих, к примеру, в С или C++, когда любой фрагмент текста
от символов Г и до символов * / является комментарием вне за­
висимости от числа строк. Если в Visual Basic требуется сделать
комментарием несколько строк, необходимо вставить апостроф
в начало каждой из них — для этого можно воспользоваться кноп­
кой Comment B lock панели инструментов Edit, предварительно
выделив необходимый блок (см. 4.1.8).
Пример
'Комментарием является вся строка
REM Еще одна строка-комментарий
а = b 'Присваиваем переменной а значение b
с = b REM Присваиваем переменной с значение b
3.1.4. Перенос строк в окне кода
Иногда строка кода Visual Basic получается слишком длинной.
Наиболее наглядный пример — объявление API-функции (некото­
рые из них так длинны, что, кажется, вообще никогда не кончатся).
Для таких случаев в Visual Basic предусмотрен символ переноса
строки (_). Если строка оканчивается этим символом, то следую­
щая строка будет рассматриваться компилятором как ее продол­
жение. При этом необходимо учитывать два обстоятельства. Пер­
вое: символу ( J должен предшествовать пробел. И второе: нель­
зя разбивать переносом строковые константы.
54
Переменные, константы, массивы и структуры
Пример
:
strResult = "Строковая константа для __
примера!" + strTemp ' ОШИБОЧНЫЙ ПЕРЕНОС
$
1Д*П*ГД••v- 4• ' • i ІиЙІЗҒTVf\^®5-
~
г
- . ?■
v.^-Л
^ .
strResult = "Строковая константа для п р и м е р а !" _
+ strTemp ' ПРАВИЛЬНЫЙ ПЕРЕНОС
3.2. Переменные, константы, массивы
и структуры
В этом разделе мы остановимся на структурах данных, которые
можно использовать в программах на языке Visual Basic и на ос­
нове которых можно создавать определяемые пользователем
типы.
МЙ
3.2.1. Переменные и константы
И переменные, и константы используются для хранения некото­
рых необходимых программе данных. Переменные получают свои
значения в период выполнения программы и сохраняют их, пока
им не будет присвоено новое значение. Чтобы программа смогла
воспользоваться переменной, необходимо ее объявить. При объ­
явлении переменной указывается ее имя и тип. В качестве типа
может выступать один из базовых типов или класс. Переменная,
для которой в качестве типа указан класс, становится объектом
(экземпляром) данного класса.
Константы получают свое значение на этапе разработки програм­
мы, и в период выполнения их значение изменить нельзя.
Обзор. Применение перем енны х и констант
■
В
Синтаксис объявления константы (одновременно ей присваи­
вается значение):
[Public/Private] Const ИмяКонстанты [As ИмяТипа] = Значение
Константы применяют в случаях, когда требуется много раз
использовать в программе одно и то же значение. Тогда для
Переменные, константы, массивы и структуры__________________ 65
того, чтобы изменить это значение, достаточно будет изме­
нить только текст объявления константы.
■ Кроме того, константы делают текст программы более «про­
зрачным» и легким для понимания. Например, при вызове
многих функций используются предопределенные константы
Visual Basic:
Result = MsgBox("Тестовое сообщение!", vblnformation)
Предопределенная константа vblnformation означает, что в окне
сообщения, которое откроет функция MsgBox, должен присутст­
вовать значок «Информация». Вместо этой константы можно было
бы с таким же успехом использовать ее значение (число 64), но
константа сделала код более ясным и облегчила его понимание.
■ Синтаксис объявления переменной:
P ublic/P rivate/D im ИмяПеременной [As ИмяТипа]
• Начинается объявление с одного из зарезервированных
слов, определяющих область видимости переменной (см.
ниже).
• Если не указать тип переменной, ей будет присвоен тип Vari­
ant. При этом следует учитывать, что переменные типа Vari­
ant занимают больше места в памяти и обращение к ним
происходит несколько медленнее.
■ В одной строке можно объявить несколько переменных. При
этом, правда, следует обращать внимание на указание имени
типа:
Dim a As Integer, b As Integer,
Dim e As Integer, f, g
с As Long
>
В первой строке объявлены две переменных типа Integer и одна
переменная типа Long. Во второй строке три переменные, при­
чем одна из них получит тип Integer, а две другие по умолчанию
тип Variant.
Ш Выбирая имя для переменной, следует учитывать ряд обсто­
ятельств. Во-первых, имя переменной должно отражать ее
назначение — это делает код более «прозрачным» и облег­
чает работу над программой, а также ее отладку. Во-вторых,
3 Заказ 3337
66
Переменные, константы, массивы и структуры
Visaul Basic накладывает на имена переменных ряд ограниче-
В
• Имя должно начинаться с буквы.
• Имя не должно содержать точек.
• Имя должно быть уникальным, оно не должно совпадать с
другими именами или с зарезервированными словами Vis­
ual Basic.
'I Щ
• Имя должно содержать не более 255 символов.
Чтобы присвоить переменной значение, необходимо выпол­
нить операцию присваивания, где слева от знака равенства
находится имя переменной, а справа — не содержащее оши­
бок выражение.
..V"
Имя__переменной - Выражение
В
.
■J'.
Под выражением может пониматься другая переменная, функ­
ция, свойство некоторого объекта или значение (числовое,
строковое и т.д.), или результат разрешенных над соответст­
вующими типами данных операций. Конечно, тип операндов
и результата должен быть совместимым с типом переменной.
Если в качестве операндов требуется использовать шестнад­
цатеричные или восьмеричные числа, их необходимо снаб­
дить префиксами:
• &Н — префикс шестнадцатеричных чисел (латинская буква
Н — hexadecimal)
Ш
? 111 fe;
iMask A &HFFFFFFFO
• &0 — префикс восьмеричных чисел (латинская буква О —
Octal)
* л ь
iRes = &б! 2 3
Примечание
-
і
ШъцьП В
* .
; /
В Список предопределенных констант Visual Basic можно найти
в справке Visual Basic (H e lp /M icro so ft Visual Basic Help Topісэ/Содержание/Ьапдиаде R eference/C onstants).
Ш Visual Basic не допускает присваивания значения переменной
при ее объявлении.
Переменные, константы, массивы и структуры__________________ 67
■
Visual Basic позволяет не объявлять переменные заранее. Од­
нако такая практика является неиссякаемым источником оши­
бок и ее следует всячески избегать. Чтобы Visual Basic расце­
нивал необъявленную переменную как ошибочную, в разделе
глобальных объявлений формы или модуля должен присутст­
вовать оператор O ption Explicit. (Visual Basic может помещать
туда этот оператор автоматически — см. 2.7).
Обзор. Преобразование и совместимость типов
В отношении типов Visual Basic проявляет известную терпи­
мость — когда это возможно, преобразование одного типа в дру­
гой будет выполнено автоматически и программисту нет нужды
об этом заботиться. Однако следует учитывать следующее:
• При преобразовании числа с плавающей запятой в целое
дробная часть округляется к ближайшему целому.
• При преобразовании целого числа в число с плавающей за­
пятой дробная часть принимается равной нулю.
• В случае преобразования целого типа в другой целый тип
возможна ситуация, когда целый тип с большим диапазоном
значений преобразуется в целый тип с меньшим диапазо­
ном значений. Если значение, которое присваивается «ко­
роткому» типу, выйдет за пределы диапазона его допусти­
мых значений, произойдет ошибка периода выполнения
(runtime error 6).
■ Строковые и числовые типы несовместимы. Нельзя присвоить
числовое значение строковой переменной и наоборот.
Л Наибольшую свободу предоставляет разработчику тип Variant,
способный принять строковое или числовое значение, а также
дату или время. Иногда такая универсальность может оказать­
ся полезной, но вообще говоря, применения переменных типа
Variant следует избегать. Всегда, когда это возможно, следует
отдавать предпочтение простым типам, поскольку с исполь­
зованием типа Variant связан ряд проблем:
• Существенно большее время обращения по сравнению с
простыми типами.
68
Переменные, константы, массивы и структуры
• Больший объем занимаемой памяти (см. 3.1.2).
• Код программы становится менее «прозрачным», а отладка
затрудняется, поскольку практически никакое ошибочное
присваивание в отношении переменной типа Variant не вы­
зовет ошибки периода выполнения.
Обзор. Область видимости перем енны х и констант
Под областью видимости переменной понимают те части про­
граммного кода (процедуры, модули или формы), из которых
переменная «видна», т. е. доступна. Если переменная доступна,
то она существует — но не наоборот. Переменная может не су­
ществовать в тот период времени, когда выполняется некоторый
участок программного кода. Переменная может существовать в
памяти и быть доступной для некоторых частей программного
кода и при этом быть недоступной («невидимой») для других. Вот
небольшой пример:
т ь *.,• :*&«*••v; i
Dim A As Integer
Dim В As Integer
Private
Dim
A =
в Щ
c =
Sub Form__Load ()
С As Single
254
569
1132
MyListing С
End Sub
Sub MyListing(D As Single)
Dim A As String
A = "Тестовое сообщение!"
Debug.Print A
Debug.Print В
Debug.Print D
End Sub
•
’
^
'
"
*
^
"
'
-
Переменные, константы, массивы и структуры__________________ 69
Ш В результате выполнения этого кода в окно Im m e d iate будут
выведены следующие строки:
Тестовое сообщени е!
569
1.732
Ш Вот необходимые пояснения: А и В объявлены как глобальные
переменные модуля и существуют в течение всего времени,
пока выполняется программа. С и D являются локальными
переменными и существуют лишь в тот промежуток времени,
пока выполняется процедура, где они объявлены. В момент
вызова процедуры MyListing глобальная переменная А суще­
ствует, но недоступна, поскольку ее область видимости пере­
крыта областью видимости одноименной локальной перемен­
ной и в окно отладочной информации будет выведено значе­
ние той переменной А, которая объявлена внутри процедуры.
Переменная В также является глобальной, но она при этом
доступна для кода процедуры MyListing. Наконец, переменная
С объявлена в коде процедуры Form_Load и, будучи передан­
ной в процедуру MyListing в качестве параметра, доносит свое
значение до окна отладочной информации посредством ло­
кальной переменной D.
Ш При объявлении переменной область ее видимости задается
одним из ключевых слов:
• Dim. Таким образом объявляют локальные переменные, ко­
торые существуют только во время вызова функции или про­
цедуры, где они объявлены. Если переменная с помощью
Dim объявлена в разделе глобальных объявлений модуля
или формы, то она будет доступна для всех процедур мо­
дуля. Но для кода других модулей или форм такая перемен­
ная все равно будет «невидимой».
• P rivate. Отличается от Dim тем, что не может объявлять
переменные внутри процедуры или функции, при объявле­
нии же в разделе глобальных объявлений модуля Dim и P ri­
va te равнозначны.
• P ublic. Объявленная таким образом переменная является
глобальной на уровне приложения и доступна из всех мо-
Переменные, константы, массивы и структуры
70
дулей и форм проекта. Если переменная объявлена в раз­
деле глобальных объявлений программного модуля, то до­
ступ к ней возможен просто через ее имя. Если переменная
объявлена как P ublic в коде формы, то из других форм и
модулей доступ к ней должен осуществляться через кон­
струкцию ИмяФормы. ИмяПеременной.
• S tatic. Переменные S ta tic объявляются внутри процедур и
функций и вне их недоступны, но в отличие от обычных ло­
кальных переменных они не инициализируются при входе в
процедуру или функцию, где они объявлены.
3.2.2. Массивы
.
Еще одной базовой структурой данных являются массивы.
Обзор. Массивы
Массивом (или вектором) называют набор однотипных пере­
менных, объединенных одним именем и доступных через это
имя и порядковый номер переменной в наборе. Количество
элементов массива теоретически может быть бесконечным,
ограничения накладываются конкретными языком программи­
рования и операционной системой.
Ш Все элементы массива относятся к одному и тому же типу и
обладают одной и той же областью видимости.
Ш Элементы массива обладают непрерывной нумерацией, но­
мера первого и последнего элементов (а следовательно, и их
количество) задаются при объявлении массива. В типичном
случае нумерация начинается с нуля.
* п
Ш Как и «простую» переменную, массив необходимо объявить,
прежде чем можно будет к нему обратиться. Синтаксис объ­
явления массива:
■ ; г*
Dim ИмяМассива{НомПерв1 То НомПосл1, НомПерв2
То НомПосл2, ...) [As [N ew ] ИмяТипа]
• Минимально необходимая форма конструкции при объяв­
лении массива: Dim ИмяМассива{). В этом случае будет
создан динамический массив, т. е. массив, размер которого
Ш
Переменные, константы, массивы и структуры____________
71
определяется (и может быть переопределен) в процессе вы­
полнения программы. Прежде чем произойдет первое об­
ращение к элементу динамического массива, размер пос­
леднего должен быть определен с помощью оператора
ReDim И м яМ ассива(Р азмер), в противном случае выпол­
нение программы будет прервано (ошибка периода выпол­
нения). Далее, в процессе выполнения программы размер
массива можно многократно переопределять, используя тот
же оператор ReDim. При переопределении содержимое
элементов массива будет теряться. Чтобы при переопреде­
лении размера массива сохранить значения тех его элемен­
тов, присутствие которых не противоречит новому размеру,
следует использовать конструкцию ReDim Preserve ИмяМ ассива (Р азм ер).
• Выражение НомПерв То Н омП осл обозначает границы ну­
мерации элементов массива — ими должны быть целые
числа (допустимы в том числе и отрицательные), при этом
таких индексов может быть несколько (речь тогда будет
идти о многомерном массиве). Двумерные массивы обычно
используют для представления таблиц, массивы с числом
измерений, большим двух, редко находят применение. Од­
нажды объявленные границы массива не могут быть изме­
нены в процессе выполнения программы.
• Если нижняя граница номера элемента массива не указана,
она автоматически принимается равной нулю.
• Последний элемент объявления массива определяет его
тип. Если тип не определен, по умолчанию будет принят тип
Variant. Можно создать массив любого типа, допустимого
для «простых» переменных.
■ В отношении области видимости массивы подчиняются тем
же правилам, что и обычные переменные.
Пример
Dim s t rN a m e s (10) As String * 20
'Объявлен массив, состоящий из 11 строк
'длиной 20 символов каждая
72
Переменные, константы, массивы и структуры
Примечания
В Обратите внимание на тот факт, что если нумерация элемен­
В
тов массива начинается с 0, то количество элементов будет
на 1 большим номера последнего из них (об этом часто за­
бывают). Данное обстоятельство является обычным источни­
ком ошибок в случаях, когда указывают только верхнюю гра­
ницу массива.
--лу?-. •с -'г-/ д г і ^ ^ - ^ ІдИИВНВИІ
С помощью оператора O ption Base 1 можно принудительно
перевести Visual Basic в режим, когда нижняя граница массива
по умолчанию будет приниматься равной 1.
Обзор. Массивы в действии
В Чтобы присвоить значение элементу массива, необходимо
указать его порядковый номер (индекс):
МуАггау(Ю)
= 25
В При обращении к элементу многомерного массива необходи­
мо указывать все его индексы:
M y A r r a y (1, 5, 3) = "Visual Basic 5.0"
В Для выполнения некоторой операции со всеми элементами
массива следует использовать цикл For:
Dim M y A r r a y (0 То 10) As Integer
Dim I As Integer
For I = 0 To 10
MyArray (I) = 777
Next I
'
В Верхнюю и нижнюю границы массива в процессе выполнения
программы можно узнать, используя функции Lbound() и
Ubound соответственно. Обращение к этим функциям имеет
следующий синтаксис:
L b o u n d (ИмяМассива, НомерИзмерения)
U b o u n d (ИмяМассива, НомерИзмерения)
Параметр НомерИзмерения используют в случае многомерного
массива, когда речь идет не о первом его измерении.
Переменные, константы, массивы и структуры
■
73
Возможна операция присваивания с участием массива и пере­
менной типа Variant. При этом на массив накладываются ог­
раничения: он не может состоять из строк фиксированной
длины и его элементы не должны принадлежать к определя­
емому пользователем типу. Следующий пример иллюстрирует
операцию присваивания массива в качестве значения пере­
менной типа Variant:
Dim М уА ггау(З) As Integer
Dim Temp As Variant
M y A r r a y (0) = 9
M y A r r a y (1) = 5
MyArray(2) = 56
Temp = MyArray
MyArray(O) = T e m p (2)
Ш В результате нулевой элемент массива MyArray получит зна­
чение 56.
■ С помощью функции IsArrayO можно выяснить, является ли
переменная типа Variant массивом. Синтаксис обращения к
этой функции:
А,
;
I s A rr a y (ИмяПеременнойТипаУаriant)
■
Сделать переменную типа Variant массивом и одновременно
присвоить значения всем его элементам можно посредством
функции А ггау(С писокЗначений):
Dim Auto As Variant
Auto = Array (" A U D I ” /'BMWVTord"/4Dpel", "Mercedes", _
"Запорожец")
3.2.3. Перечни: оператор Enum
С помощью оператора Enum можно объявить группу констант,
объединенную общим именем и принадлежащую к типу Enumera­
tion (Перечень).
74
Переменные, константы, массивы и структуры
Обзор. Перечень
Ш Перечень может быть объявлен только в разделе глобальных
объявлений модуля или формы.
. ^
■ Синтаксис объявления перечня выглядит следующим образом:
[P u blic/P riva te] Enum ИмяПеречня
ИмяКонстантыІ [ -значение ]
ИмяКонстантыЫ [= значение]
IМ
-г
End Enum
• P ublic/P rivate. Определение области видимости перечня,
может отсутствовать.
• ИмяПеречня. Задает имя создаваемого перечня.
• ИмяКонстанты
Список имен констант, принадлежа­
щих перечню. Каждой из них может быть присвоено значе­
ние явным образом, в противном случае они получат зна­
чения в соответствии с непрерывной нумерацией внутри
перечня (первая — 0, последняя — N-1).
в Для обращения к константам перечня используют следующий
синтаксис:
[
ИмяПере чня. ИмяКонстанты
• ИмяПеречня. Имя объявленного ранее перечня.
• ИмяКонстанты. Имя константы, принадлежащей перечню.
Ш Можно также создать переменную, относящуюся к типу, кото­
рый определен объявлением перечня:
Dim ИмяПеременной As ИмяПеречня
• ИмяПеременной. Имя объявляемой переменной.
• ИмяПеречня. Имя объявленного ранее перечня.
Пример
Ш Предположим, перечень Names должен содержать список
имен, каждому из которых необходимо поставить в соответ­
ствие порядковый номер:
f
Переменные, константы, массивы и структуры
Public Enum Names
Hans
Peter
Karl
Gertrud
Petra
Sabine = 4
Unknown = -1
End Enum
75
»>л
■-•
Константа Hans получит значение 0, Peter — 1 и т.д. Константы
Petra и Sabine получат значение 4 (первая в силу последователь­
ной нумерации, второй значение задано явным образом). И, на­
конец, Unknown получит отрицательное значение -1.
3.2.4. Определяемые пользователем типы
Обзор
■
■
■
Определяемые пользователем типы (их также называют
структурами) дают возможность строить достаточно сложные
структуры данных, логически объединяя группу переменных.
Каждая из переменных, упомянутых в объявлении типа, может
относиться как к одному из базовых типов, так и к определен­
ному ранее пользовательскому типу.
При объявлении определяемого пользователем типа исполь­
зуют следующий синтаксис:
Туре ИмяТипа
ИмяПеременной1 As ТипПеременнойІ
ИмяПеременной2 As ТипПеременной2
m m m
■
ИмяПеременнойЫ As ТипПеременнойЫ
End Type
После того как тип определен (объявлен), на него можно ссы­
латься также, как и на любой базовый тип. В частности, можно
объявить переменную, принадлежащую к этому типу.
7б
Переменные, константы, массивы и структуры
Ш Если объявлена переменная, относящуюся к определенному
пользователем типу, то к любой из входящих в ее состав «подпеременных» (т. е. переменных, определенных внутри объяв­
ления типа) можно обратиться следующим образом:
ИмяПеременной.ИмяПеременнойВОбъявленииТипа
Пример
,
В приведенном ниже примере будет объявлен пользовательский
тип, предназначенный для структуризации данных о книгах. Объ­
явление необходимо поместить в раздел глобальных объявлений
программного модуля (объявлять пользовательский тип в коде
формы нельзя). Тип можно определить как Private, в этом случае
он будет доступен лишь в пределах соответствующего модуля.
Объявление типа в разделе глобальных объявлений программно­
го модуля:
Type Book
Title As String * 40
Author As String * 40
Number As Integer
End Type
I
,t
* -
Обращение к типу в коде одного из модулей или форм:
Dim WarAndPeace As Book
WarAndPeace.Title = "Война и мир"
WarAndPeace.Author = "Лев Толстой"
WarAndPeace .Number = 5000
Ш Ш я Ш
Примечание
■
■
Visual Basic позволяет объявить массив, элементы которого
принадлежат к определяемому пользователем типу.
С помощью переменных пользовательского типа можно запи­
сывать структурированные данные в файл на диске, а также
читать данные из файла в переменные соответствующего типа
(режим произвольного доступа, см. 5.4.2).
Переменные, константы, массивы и структуры__________________ 77
3.2.5. Соглашение об именах
Вне зависимости от того, какой язык использует программист, он
должен придерживаться некоторых правил при образовании имен.
Как и многие другие языки программирования, Visual Basic ^е накла­
дывает сколько-нибудь серьезных ограничений на имена перемен­
ных, процедур, констант и т.д. — они могут быть практически любы­
ми. Однако бессистемное построение имен затрудняет чтение и по­
нимание исходного текста даже его автором, не говоря уже о других
программистах. И наоборот, наличие четкой системы в образовании
имен повышает «прозрачность» кода и облегчает сотрудничество
между программистами (что особенно важно для рабочих групп).
Одно из распространенных в мире Windows соглашений об именах
называется венгерской нотацией (в честь родившегося в Венгрии
Чарльза Симони, который сыграл важную роль в становлении кор­
порации Microsoft). Суть соглашения состоит в следующем: имя
некоторого объекта начинается с короткого префикса, который яв­
ляется стандартным для объектов данного рода и описывает тип
или область видимости. Префикс состоит из фиксированного ко­
личества строчных литер. За префиксом следует собственно имя
объекта, отражающее его назначение, при этом первый символ
имени должен представлять собой заглавную литеру. Если имя со­
ставлено из нескольких слов, то с заглавной литеры начинается
каждое из них (например, cm dHelloW orld).
В приведенных ниже таблицах собраны префиксы и примеры их
применения для различных объектов (управляющих элементов,
типов данных и т.д.) программы на языке Visual Basic.
Таблица 3.3. Префиксы имен переменных, отражающие тип
I тИп
Префикс_____________ Пример имени
I Boolean
bln
bin MyFlag_________
bytPortEA
Collection
col Buttons
Currency
curSaldo
78
Переменные, константы, массивы и структуры
1 Тип
Префикс
Пример имени
I
1 Date(Time)
dtm
dtmNewYear
I
I Double
I obi
| dblDistance
I
I Error
err
] errFatalError
I
I integer
int
int NumberOfCars
I
Long
ing
IngNumberOfStars
|
I Object
t °bj
sng
objAutomation
I
sngWit ҺОf Door
I
strName
I
Single
I String
I
5tr
'
'^ ^ * 2 3
Variant
vnt
vnt UniverseI
I
Определяемый
пользователем тип
udt
udt My Book
I
Таблица J.4. Префиксы имен переменных, отражающие
область видимости
Область видимостй у Префикс
Пример имени
Глобальная уровня
приложения
giUserlD
Глобальная уровня
модуля
Локальная
(уровень процедуры)
m
mint Price
ЫпАп swer
Примечание
Определение понятия «область видимости» см. в 3.2.1.
Переменные, константы, массивы и структуры
79
Таблица 3.5. Префиксы имен управляющих элементов
Управляющий
элемент
Префикс
Пример имени 1
ImageList (Список графических
образов)
ils
ilsCards
Image (Графический образ)
img
imgAnimal
CommandButton (Командная
кнопка)
cmd
cmdStart
j Label (Этикетка)
Ibl
Ibllnfo
I PictureBox (Картинка)
pic
piclnitPicture
PictureClip (Матрица картинок)
dp
cIpToolBarl
FileListBox (Список файлов)
fil
filFiles
| DBGrid (Сетка данных)
dbgrd
dbgrdStaff
I DBCombo (Комбинированное
I поле данных)
dbcbo
dbcboLanguage I
j Data (Данные)
dat
datAuthors
j
1 Shape (Фигура)
shp
shpSquare
I
I Form (Форма)
frm
frmAbout
I ProgressBar (Индикатор процес1 са)
prg
prgFileLoad
I HScrollBar (Горизонтальная поло­
са прокрутки)
hsb
hsbLength
ComboBox (Комбинированное
поле)
cbo
cboNames
CheckBox (Поле флажка)
chk
chkColor
drv
drvMyPC
I DriveUstBox (Слисок устройств)
j
I
Переменные, константы, массивы и структуры
Управляющим
элемент
Префикс
Пример имени
Line (Линия)
ІІП
linDivider
ListView (Расширенный список)
Ivw
Ivwlcons
List Box (Поле списка)
1st
IstTopics
MAPIMessages (Консоль
системных сообщений)
mpm
mpmSend
MAPISession (Сеанс системных
сообщений)
mps
mpsMeating
MCI (Мультимедийный элемент)
mci
mciAudio
Menultem (Элемент меню)
mnu
mnuFiles
Gauge (Шкала)
gau
gauSpeed
MSFIexGrid (Сетка)
msg
msgTable
MSTab/SSTab (Набор вкладок)
mst
mstOptions
OLE (OLE-объект)
ole
oleWordDoc
Frame (Рамка)
fra
fraMain
TabStrip (Вкладка)
tab
tabGeneral
RichTextBox (Текстовое поле
в формате RTF)
rtf
rtf Editor
Slider (Ползунок)
sld
sldSpeed
CommonDialog (Общий диалог)
dig
dlgPrint
StatusBar (Панель состояния)
sta
stalnfo
Control (Управляющий элемент
неизвестного заранее типа)
ctr
ctrCurrent
TreeView (Дерево данных)
tre
treDocuments
81
Переменные, константы, массивы и структуры
Управляющий
элемент
Префикс
Пример имени
ToolBar (Панель инструментов)
tlb
tlbStandard
Grid (Сетка)
grd
grdDates
TextBox (Текстовое поле)
txt
txtStreet
MDI-Form
(Дочерняя MDI-форма)
mdi
mdiChild
VScrollBar (Вертикальная полоса
прокрутки)________________
vsb
vsbHeight
DirListBox (Список каталогов)
dir
dirView
Timer (Таймер)
tmr
tmrClock
Примечание
____ вы столкнетесь с объектом, который не упомянут в дан­
Если
ной таблице, то вам следует придумать для него «стандарт­
ный» префикс. При этом желательно руководствоваться сле­
дующими правилами:
• Длину префикса следует ограничить тремя символами, если
нет особых причин для использования четырех или более
символов.
• Если речь идет о созданном вами управляющем элементе,
причем в качестве основы для него использовался один из
стандартных элементов, то префикс следует сделать состав­
ным __ к префиксу стандартного элемента можно добавить
еще три символа, описывающих то новое качество, которым
он теперь обладает (в данном случае увеличение длины пре­
фикса будет оправданным). Например, если вы усовершен­
ствовали комбинированное поле ComboBox так, что оно
может теперь отображать палитру цветов, то наиболее под­
ходящим префиксом для нового элемента будет cbo +
clr(Color) = cboclr, например cboclrM yColorl.
Операции
Таблица
Префиксы объектов доступа к данным (DAO)
Объект
Префикс
Пример имени
Container
concurrent
Database
dbStock
dbeNow
Document
docLetterl
Parameter
prmKeyCode
QueryDef
qryBest
Recordset
recPersonal
TableDef
tbdClient
usrNewUser
Workspace
wspHome
3.3. Операции
В программах на языке Visual Basic можно использовать обычный
набор операций надданными. Различаюттри вида таких операций:
К М атематические операции выполняются над числами и их
результатом также являются числа — вспомните, к примеру,
«четыре действия арифметики».
Ш Операции отношения применяются не только к числам, а их
результатом всегда является логическое (булево) значение,
выражающее истинность некоторого отношения между дан­
ными, которые играли роль операндов. Например, операция
А > В («А больше В») в результате может дать только значение
True (Истинно) или False (Ложно).
Л огические операции выполняются над логическими значе­
ниями (или над выражениями, результатом которых являются
логические значения) и в результате дают также логические
значения. Это позволяет строить достаточно сложные услов­
ные конструкции. Например, логическое выражение (результат
логической операции) в конструкции lf...T h e n ...E n d lf опреде­
ляет, будут ли выполнены операторы между Then и Endlf:
If (A AND NOT В) Then
С = D
End I f
Здесь А и В — логические значения, и операция присваивания
будет выполнена лишь в том случае, когда А = True и одновре­
менно В = False.
В таблице 3.7 представлены операции всех трех описанных
категорий.
Таблица 3.7. Операции Visual Basic
Операция
функция
Математические операции
сумма
[операнд!] + [операнд2]
Сложение. Результат
операндов.
[операнд!] - [операнд2]
Вычитание. Результат — разность
операндов.
- операнд!
Перемена знака. Результат операнд с противоположным
знаком.
[операнд!] * [операнд2]
Умножение. Результат произведение операндов
_________
34
Операции
Операция
функция
[операнд!] / [операнд2]
Деление. Результат
операндов.
[операнд!] \ [операнд2]
Целочисленное деление.
Результат - целая часть
отношения операндов.
[операнд!] MOD [операнд2]
Деление по модулю. Результат дробная часть отношения
операндов.
отношение
Возведение в степень. Результат
«операнд! в степени операнд2».
Операции отношения
[операнд!] < [операнд2]
Меньше. Результат - True, если
первый операнд меньше второго
[операнд!] > [операнд2]
Больше. Результат - True, если
первый операнд больше второго
[операнд!] <= [операнд2]
Меньше или равно. Результат
True, если первый операнд
меньше или равен второму.
[операнд!] => [операнд2]
Больше или равно. Результат
True, если первый операнд
больше или равен второму.
1 [операнд!] = [операнд2]
Равно. Результат - True, если
первый операнд равен второму.
I [операнд!] О
Не равно. Результат - True, если
первый операнд не равен второму.
I
[операнд2]
[строка] Like [маска]
Соответствие маске. Результат True, если строка соответствует
маске.
Щ
1
|
,
Операция
Функция
[операнд!] Is [операнд2]
Ссылка на объект. Результат будет
равным True только в том случае,
когда обе ссылочные переменные
ссылаются на один и тот же
объект. Если вторым операндом
является идентификатор типа, то
операция Is возвращает значение
True в случае, когда объект, на
который указывает ссылочная
переменная (первый операнд),
принадлежит к данному типу.
Логические операции
[операнд1] AND [операнд2]
Логическое «И» двух операндов.
[операнд!] OR [операнд2]
Логическое «ИЛИ» двух
операндов.
NOT [операнд]
Логическое отрицание операнда
[операнді] IMP [операнд2]
Логическая импликация двух
операндов.
[операнді] EQU [операнд2]
Логическая эквивалентность двух
операндов.
Другие операции
[строкаі) & [арока2]
Объединение строк. Результат
строка. _____ ' _ __________
[операнд*!] + [операнд2]
Объединение строк или
сложение. Результат зависит от
типа операндов.
AddressOf [ИмяПроцедуры]
Адрес процедуры. Результ
ссылка на процедуру
(используется при вызове
АРІ-функций).
86
___________________ Операции
Примечания
^
“т
Ш Логические операции выполняются как над логическими, так и
над числовыми значениями. Если оба операнда являются чис­
лами, то результатом также будет число, каждый бит которого
является результатом соответствующей операции над битами
операндов.
Ш Операции IMP и EQU представляют собой реликты прошедших
эпох. Современный программист вряд ли в них нуждается.
Далее следуют две таблицы, содержащие определение этих
операций.
г k&zM
• Операция IMP
... _ ___ C i
т
Бит первого
операнда
Бит второго
операнда
Бит результата
0
0
1
0
1
1
1
0
0
1
1
1
Бит первого
операнда
Бит второго
операнда
Бит результата
0
0
1
0
1
0
0
1
0
• Операция EQU
1
1
Щ
1
3.3.1. Приоритеты операций
Если в выражении использовано несколько операций, то резуль­
тат может зависеть от последовательности, в которой эти опера­
ции выполняются. Visual Basic выполняет операции в соответст­
вии с их приоритетом (см. табл.3.8).
Управляющие структуры языка________________________________ 87
Таблица 3.8. Таблица приоритетов
Приоритет
Операция
Вызов функции, скобки
(с одним операндом)
3.4. Управляющие структуры языка
Данный раздел посвящен операторам, которые предназначены
для управления процессом выполнения всех остальных исполня­
емых операторов Visual Basic. Такие классические структуры,
как условные операторы и операторы цикла, имеются во всех
процедурных языках программирования, имеются они и в Visual
Basic.
Управляющие структуры языка
88
3.4.1. Условные операторы (ветвление по условию)
Под ветвлением по условию понимается программная структура,
в которой некоторый код исполняется или не исполняется в за­
висимости от выполнения определенного условия.
Классической условной конструкцией является конструкция
If...T hen...E nd If. В этой конструкции некоторые операторы вы­
полняются только при условии, что содержащееся в конструкции
логическое выражение имеет значение True (Истинно):
If Л огическое вы раж ение Then О ператор
ИЛИ
____
. — •J
If Л огическое вы раж ение Then
Группа операторов
End If
В первом, «укороченном» варианте оператор, подлежащий вы­
полнению или невыполнению может быть только один. При этом
вся конструкция размещается в одной строке. В полном варианте
конструкции речь может идти о нескольких операторах, но при
этом они должны замыкаться строкой End If.
Примеры
.
-
№ В первом примере переменная va rln p u t должна получить в ка­
честве значения текущую дату, но произойдет это лишь в том
случае, если она принадлежит к типу Date.
If IsDate(varlnput)
Then varlnput = Date
Ш Теперь используем более сложную конструкцию и более слож­
ное логическое выражение. Два оператора присваивания
будут выполнены только в том случае, если А не равно В и
одновременно С равно D. Обратите внимание на использова­
ние скобок — они только подчеркивают последовательность
выполнения операций. Поскольку приоритет операций
«равно» и «не равно» выше приоритета операции «логическое
И», в скобках нет нужды. Однако скобки облегчают чтение и
понимание кода, а привычка явно указывать последователь­
ность операций скобками уберегает программиста от многих
ошибок.
If (А <> В)A N D (С = D) Then
е - f
g = 5012
Щ
В следующем примере использована комбинация функции и
логической операции. Если Variant-переменная varTest содер­
жит какое-либо значение, это значение будет выведено в окно
отладочной информации. Обратите внимание на тот факт, что
конструкцию замыкает строка End If, хотя речь идет лишь об
одном операторе (поскольку он помещен не в строку If...T hen,
а в следующую за ней).
If NOT IsNull(varTest) Then
debug.print varTest
End If
Условный оператор
If. ..Else. ..B s e Ш Ш Ш V-
Конструкции If...T h e n ...E n d If вполне достаточно, если нужно
принять решение о том, выполнять или не выполнять некие опе­
раторы. Для принятия более сложных решений с большим числом
вариантов потребуется более сложная конструкция:
If Логическое выражение 1 Then
Группа операторов
□ s e lf Логическое выражение 2 Then
Группа операторов
Группа операторов
End If
Это роскошное сооружение предоставляет целую гамму возмож­
ностей. Можно, например, ограничиться ветвлением только на
два направления: оставив If, Then и Else, при этом операторы
после Then будут выполняться в случае истинности выражения
Управляющие структуры языка
90
после If, а операторы после Else — в случае его ложности. И на­
оборот, можно увеличить число направлений ветвления, добавив
еще несколько строк E lself (при этом строку Else можно исклю­
чить). Для каждой строки E lse lf будут действовать те же правила,
что и для строки If. Наконец, можно построить вложенную кон­
струкцию, когда внутри одной конструкции If содержится другая.
Теоретически это позволяет осуществлять сколь угодно сложное
ветвление, однако следует учитывать, что «многоэтажная» lf -конструкция трудна для понимания и чревата ошибками.
Примеры
■
В данном примере из двух переменных будет выбрана та, чье
значение окажется большим (значение будет выведено в окно
отладочной информации).
If А < В Then
D e b u g .Print A
E lse
Debug.Print В
End If
•* ;f
ШЗ .
H
Обратите внимание — случай равенства не предусмотрен, и в
этом смысле переменная В обладает «незапланированным» пре­
имуществом.
;w
Теперь попробуем организовать ветвление на четыре направ­
ления. Для этого потребуется добавить две строки Elself. Будет
проанализировано числовое значение, и в зависимости от
того, каким оно окажется, строковая переменная получит соот­
ветствующее значение. Эту задачу можно решить также с по­
мощью оператора S elect, разговор о котором еще впереди.
If А = 5 Then
strResult = "Пять"
Elself А = 4 Then
strResult = "Четыре"
Elself A = 3 Then
strResult = "Три"
Else
strResult = "Прочие"
End If
*
'Л ->v?
, V.-., ■
*
I
Примечание
■
Visual Basic располагает оператором, который тоже в свое
время использовали для организации ветвления. Речь идет об
операторе G oto, который согласно принципам структурного
программирования был объявлен «вне закона». Оператор
Goto может быть использован в конструкции If, он осущест­
вляет переход к метке (конечно, метка должна существовать
где-то в коде). Практика показала, что использование (осо­
бенно неумеренное) оператора Goto делает код программы
настолько «непрозрачным» и трудным для понимания, что для
такого кода стали использовать термин «спагетти-код» — по­
пытки проследить логику работы такой программы напомина­
ют ковыряние в кастрюле со спагетти. Поэтому оператор Goto
существует, но не используется. Единственное исключение —
конструкция On E rror Goto, необходимая для организации об­
работки ошибок. В других случаях использование оператора
Goto нежелательно. Синтаксис оператора проясняет приве­
денный ниже пример.
If iTest > 100 Goto Bolshe
MsgBox "Меньше или равно 100"
Goto Dalshe
Bolshe:
MsgBox "Больше 100"
Dalshe:
условный оператор
Если с помощью конструкций E lse lf можно было на каждом на­
правлении ветвления проверять отдельное условие, то конструк­
ция S elect Case «принимает решение» на основе анализа значе­
ния одного выражения. При этом число вариантов может быть
каким угодно. Имя переменной, значение которой подлежит ана­
лизу, указывается в строке S elect Case. Затем следует произ­
вольное количество строк Case и операторов между ними, при
этом управление получит та Саве-строка, чье значение «совпадет
Управляющие структуры языка
92
с реальностью» (речь может идти также о списке или диапазоне
значений).
Select Case АнализируемоеВыражение
Case Значение 1
Группа операторов
Case Значение2
Группа операторов
Case 3Ha4eHneN
Группа операторов
Case Else
Группа операторов
End Select
Конечно, анализируемое выражение должно возвращать значе­
ние типа, совместимого с типом значений в строках Case. Строку
Case Else можно опустить.
Пример
■
■—
#
^
Ш Здесь мы используем конструкцию S elect Case с пятью стро­
ками Case и одной строкой Case Else. В зависимости от зна­
чения переменной iTest строковой переменной strR esult
будет присвоено соответствующее значение. Первое ответ­
вление будет осуществляться по совпадению с указанным
значением, второе — по совпадению с одним из значений в
списке, третье — по попаданию в диапазон значений и, нако­
нец, четвертое и пятое ответвления срабатывают по соответ­
ствию условию. Причем для задания условия применены два
разных способа. Если в пятой Case-строке явно указано имя
переменной iTest, то в четвертой использовано ключевое
слово Is, под которым подразумевается анализируемое вы­
ражение (в данном случае просто переменная iTest). Послед­
няя строка, Case Else, получит управление в случае, когда ни­
какая из Case-строк не сработает (т. е. при iTest = 0).
Select Case iTest
Case 1
strResult M "iTest равно 1"
Case 2, 3, 4
strResult = "iTest равно 2, 3 или 4"
Case 5 To 9
strResult = "iTest находится в диапазоне
от 5 до 9"
Case Is > 9
strResult = "iTest больше 9"
Case iTest < 0
strResult = "iTest меньше 0"
Case Else
strResult i "iTest равно 0"
End Select
3.4.2. Циклы
Для многократного выполнения некоторого ф рагм ент кида
пользуют циклы. Visual Basic располагает всеми стандартными
видами цикла.
Цикл
з
случае,
когда
заранее
известно
«стартоЭтот
цикл
используют
^ |
| u v | »■%* I
^ J *— вое» значение счетчика цикла и количество проходов, которые
цикл должен совершить. Синтаксис цикла типа F or...N ext выгля­
дит следующим образом:
For С четчикЦ икла = С тарт То С топ м е р ш а г
\ j
w ш
J
•
Группа операторов
Next [С четчикЦ икла]
Роль счетчика цикла может играть только ранее объявленная
переменная целочисленного типа (переменная цикла). Числовые
значения С тарт и Стоп задают интервал, в котором будет изме­
няться переменная цикла. Необязательный параметр Ш аг задает
nnunaiimuup г.чйтчика никла на каждом проходе, по умолчанию
g4
Управляющие структуры языка
оно принимается равным 1. Наконец, после операторов, составляющих тело цикла, следует оператор N ext, обозначающий гра­
ницу действия цикла. В случае вложенных циклов требуется ука­
зывать, к какому из них относится оператор N e xt, это достигается
добавлением имени переменной цикла.
Пример
: ;г- •:
@ В первом примере цикл For...Next будет использован для того,
чтобы присвоить значение 1 всем элементам массива. Циклы
For вообще часто применяются для выполнения разнообраз­
ных манипуляций с массивами.
Dim I As Integer
Dim i A r r a y (10) As Integer
For I = 0 To 10
iArray(I) = 1
Next
^
- -•
I - -■j jj.
Ш В следующем примере будут продемонстрированы две возмож­
ности: явно заданный шаг цикла и отсчет в обратном направ­
лении. Последнее достигается заданием отрицательного шага
и тем, что начальное значение счетчика больше, чем конечное.
Dim N As Integer
- v, да .i
For N = 100 To 0 Step -10
Debug.Print N
Y%
Next N
вШ Ш в1
а
Ж'
ж?
Y V **V
■
-jiU-f
'!Щ
'
щ
Fo r Each...Next
Эта специфическая форма цикла For предназначена для выпол­
нения некоторой операции с каждым объектом, входящим в со­
став некоторой коллекции объектов (такой операцией, например,
может быть вызов метода или присваивание значения свойству—
см. 3.6.1). Это дает возможность выполнять массовые манипуля­
ции с управляющими элементами и другими объектами так же,
как это делается с массивами переменных. Синтаксис этой раз­
новидности цикла For прост:
For Each ИмяОбъекта In ИмяКоллекции
О перации над объ ектам и
N ext ИмяОбъекта
Две следующие разновидности цикла тесно взаимосвязаны, и их
часто рассматривают как один из базовых видов цикла. Как уже
отмечалось, циклы For применяют в тех случаях, когда количество
проходов и диапазон изменения счетчика цикла заранее извест­
ны. Циклы типа W hile предназначены для ситуаций, когда коли­
чество проходов заранее неизвестно, но зато известно условие
завершения цикла (цикл должен завершиться по достижении не­
которого результата). В обоих своих разновидностях цикл W hile
работает до тех пор, пока не станет истинным условие выхода из
цикла. Вот синтаксис двух разновидностей цикла W hile:
Do W hile УсловиеВы хода
Группа операторов
Loop
г
.V
. ' - ’ 'м ’ , ‘ ; “v
Группа операторов
Loop W hile УсловиеВы хода
Отличие между ними заключается в том, что условие выхода про­
веряется в одном случае перед очередным проходом, а в другом
случае — после прохода. Это важное различие: если условие вы­
хода из цикла выполняется еще до его начала, то в первом случае
операторы, составляющие тело цикла, не будут выполнены ни
разу. А во втором случае по меньшей мере один раз тело цикла
будет выполнено обязательно.
Do
Примечание
Ш Если в цикле D o.-.Loop опустить условие выхода, то получит­
ся так называемый бесконечный цикл:
Do
Debug.Print "Я вечный цикл!"
Loop
Х / п п а п п а і Л І І І И Р ГТПХ/ K T V D b l Я З Ы К Я
Пример
Do
iNumber = I n t (100 1 R n d () + 1)
Debug.Print iNumber
Loop While iNumber < 99
По своей логике цикл Until подобен циклу W hile с той лишь раз­
ницей, что проходы цикла выполняются до тех пор, пока условие
выхода в строке Until не выполняется. Как только выражение, за­
дающее условие выхода, получает значение True, цикл прекра­
щается. Как и в случае цикла W hile, проверка условия выхода в
цикле Until может осуществляться перед очередным проходом
или после него. Вот синтаксис этих двух вариантов:
Do Until Условие Выхода
Группа операторов
Loop
Do
Группа операторов
Loop Until УсловиеВыхода
Пример
iNumber jj Int (100 * Rnd()
Debug.Print iNumber
Loop Until iNumber > 9 9
.
. .г-
+1)
С помощью операторов E xit... можно осуществить досрочный
выход из цикла вне зависимости от значения, которое имеет в дан­
ный момент условие выхода. Оператор E xit... помещают среди
операторов тела цикла, обычно его выполнение обусловлено опе­
ратором If. Возможно также применение оператора E xit... в соста­
ве конструкции Case Select, что позволяет задать достаточно
сложное условие досрочного выхода из цикла. Синтаксис двух ва­
риантов оператора E xit... выглядит следующим образом:
Exit For ’Досрочны й выход из цикла For
Exit Do ’ Досрочный выход из цикла D o...Loop
Примечание
Итак, циклы For предназначены для случаев, когда известно ко­
личество проходов, а циклы Do (While и Until) — для случаев,
когда известно условие выхода из цикла. Тем не менее возможно
использование циклов «не по назначению». Все задачи, решае­
мые с помощью циклов, можно решить, используя только один
вид цикла — For или Do — не случайно эти структуры считаются
фактическим стандартом и присутствуют во всех языках програм­
мирования процедурного типа. Разница между этими видами
цикла не так уж велика — просто некоторые задачи удобнее ре­
шать, используя цикл For, другие — цикл Do. А разница между
разновидностями цикла Do и того меньше — достаточно инвер­
тировать условие выхода с помощью операции NOT, и W hile пре­
вращается в Until, a Until — в W hile.
Примеры
■
Возьмем последний пример с циклом For и реализуем те же
действия с помощью цикла Do:
Dim N As Integer
N = 100
Do While N >= 0
N Щ N - 10
Debug.Print N
Loop
4 Заказ 3337
Управляющие структуры языка
А последний пример с циклом W hile повторим, используя цикл
Until:
D o
iNumber = Int(100 * Rnd()
Debug.Print iNumber
Loop Until NOT (iNumber < 99)
•
+ 1)
Г?
|;B
:|Ц - Ш
;
' V'
3
9
І
3.4.3. Условная компиляция
В языке Visual Basic определены две директивы компилятора,
благодаря которым можно обеспечить условную компиляцию не­
которых фрагментов исходного кода. Этот механизм особенно
удобен для работы над программами, исполняемые файлы кото­
рых должны существовать в нескольких вариантах (в расчете на
различные платформы, локализованные языковые версии и т.п.).
Исходный текст такой программы состоит из «универсальных»
фрагментов, которые должны компилироваться в любом случае,
и из фрагментов, компилируемых по условию. Благодаря этому
разработчик имеет дело с одним и тем же исходным кодом, но
может получать при этом разные исполняемые файлы для этого
ему достаточно изменить значение всего одной константы.
Обзор. Условная ком пиляция
Ш Прежде всего необходимо определить константы-«переключатели», значением которых компилятор будет руководство­
ваться при компиляции. Константы должны быть определены
в разделе глобальных объявлений модуля:
#C onst ИмяКонстанты = Выражение
• ИмяКонстанты. Задает имя константы, используемое затем
в условных директивах.
* Выражение. Допустимое по правилам Visual Basic выраже­
ние (в простейшем случае просто число, соответствующее
требуемому варианту компиляции).
Чтобы указать компилятору, какие фрагменты кода компили­
ровать при разных условиях, используется директива # lf. Ее
синтаксис схож с конструкцией If... языка Visual Basic, но пу-
Управляющие структуры языка_______________ __________________ Щ
тать их нельзя. Оператор If является объектом компиляции,
директива же # lf — это служебная пометка в тексте, которую
компилятор принимает «к сведению».
Ф рагм ент исходного текста
# lf Условие 1 Then
ф рагмент исходного текста
[# Elself Условие 2 Then
[Ф рагм ент исходного текста]]
[#E lse
[Ф рагм ент исходного те кста ]]
#End If
Ф рагмент исходного текста
• Условие. Выражение, состоящее только из определенных
ранее констант и операций над ними.
Пример
В данном примере директивы условной компиляции использова­
ны для того, чтобы в вариантах исполняемого файла для трех раз­
ных платформ в качестве имени файла заставки в строковую
переменную загружались имена трех разных ВМР-файлов.
#Const WinPlat = 1
'1 = Win95
'2 1 Win NT 3*51
'3 = Win NT 4.0
#If WinPlat - 1 Then
strWinLogo = App.Path & "\Win95.bmp"
#ElseIf WinPlat = 2 Then
strWinLogo = App.Path & "\WinNT3.bmp"
#Else
strWinLogo = App.Path & ”\WinNT4 .bitip
ГІроцедуры и функции
3.5. Процедуры и функции
ЕоазделеЙГЙ
Й£
E
К
=
;
;
■
глобальных объявлений модуля или формы весь код про
5
2
™
5
граммы на языке Visual Basic состоит из процедур и функции.
Обзор. Виды процедур и ф ункций
■
В поограмме на языке Visual Basic можно использовать не­
сколько видов процедур и функций. Вот некоторые из них.
ГЮоцедура представляет собой самостоятельную часть про­
граммного кода, обладающую уникальным именем благо­
даря которому она может быть вызвана и выполнена. Про­
цедура не возвращает никакого значения в ту точку, откуда
она была вызвана, но ей можно передать параметры.
Функция во всем подобна процедуре, а единственное ее от
личие состоит в том, что функция возвращает значение в то
место, откуда она была вызвана.
Процедура-обработчик события отличается от обычной
процедуры тем, что программа вызывает ее автоматически
при наступлении соответствующего события (см. ь.г).
Процедура-свойство. Чтобы снабдить существующий
объект (например, форму) новым свойством, необходимо
создать пару процедур, которые будут автоматически вы­
зываться каждый раз, когда свойству присваивают значение
или обращаются к значению свойства (см. 6.1.3).
Обзор. П рименение процедур и ф ун кц и й
• Чтобы код функции или процедуры был исполнен, она долж
на быть вызвана.
• Вызов процедуры осуществляется вставкой ее имени в
текст программы. Сразу после имени должны следовать
параметры процедуры, если таковые предусмотрены. Дру-
Процедуры и ф ункции
гой способ вызова процедуры заключается в использовании
ключевого слова Call, при этом за ним должно следовать
имя процедуры и заключенный в скобки список параметров.
’Операторы
И м яП роцедуры [П арам етр"!, П арам етр2...... П арам етры ]
Операторы
Call И м яП роцед уры [(П арам етр1, П а р а м е тр 2 ,...,
Параметры)]
’ Операторы
Л Функция возвращает значение, в остальном же ее вызов во
всем подобен вызову процедуры. Чтобы функция могла вер­
нуть значение, ее вызов должен фигурировать в качестве присваеваемой величины в операции присваивания, в качестве
условия в конструкции If или в какой-нибудь другой конструк­
ции, использующей возвращаемое функцией значение. Если
функция, к примеру, возвращает значение типа Integer, то ее
вызов может фигурировать в любом месте, где можно было
бы использовать целое число.
’ Операторы
И м яП ерем енной = И м я Ф у н кц и и ([П а р а м е тр 1 ,...,
Параметры])
’ Операторы
Пример
M y P rin t MyPage
C a ll M yP rint(M yP age)
Number = R n d ()
dK ath = dH ypothenuse * S in (d A n g le )
Обзор. Объявление процедур и ф ункций
Ш Visual Basic позволяет программисту объявлять собственные
процедуры и функции.
Процедуры и ф ункции
Для объявления процедуры тлятш -ж-*?
[P riv a te /P u b lic /F rie n d ] [S ta tic ] Sub ИмяПроцедуры
[(П а р а м е тр ы )]
,.',a i* n O
[О ператоры ]
[E x it Sub]
[О ператоры ]
i .m j
End Sub
Синтаксис объявления функции выглядит несколько иначе
[P riv a te /P u b lic /F rie n d ] [S ta tic ] F unction ИмяФункции [(П арам етр ы )]
[As ИмяТипа]
b a rj& m
[О пе р а то р ы ]
j
. 1^
Щ
т?
[ИмяФункции = В ы ра ж е ние ]
[E x it F u n ction ]
[О ператоры ]
[ИмяФункции = В ы ра ж е ние ]
End Function
Далее следуют необходимые пояснения относительно синтаксиса объявлений функции и процедуры.
*и
*
Public. Этим зарезервированным словом объявляют проце­
дуру или функцию, которая должна быть доступна всем про­
цедурам и функциям всех модулей и форм.
Private. Если требуется, чтобы процедура или функция была
доступна только в пределах того модуля, где она объявлена,
то ее следует объявить как Private.
- *■.
Friend. Используется только в модулях классов (см. 4.1.5).
• Static. Если это слово использовано при объявлении проце­
дуры или функции, то все объявленные внутри нее перемен­
ные станут статическими.
ИмяПроцедуры/ИмяФункции. Идентификатор, с помощью
которого можно вызвать соответствующую процедуру или
функцию.
Процедуры и ф ункции______________ _______ __________________ 1?!
• Параметры. Список параметров (пояснения по этому эле­
менту объявления будут даны ниже).
• ИмяТипа. Этот элемент используется только при объявле­
нии функции. Он определяет тип возвращаемого функцией
значения. Допустимы все стандартные типы, а также типы,
определяемые пользователем. Если тип функции не указан,
она будет возвращать значение типа Variant.
• Операторы. Здесь имеются в виду операторы, составляющие тело функции или процедуры.
• Выражение. Используется только в коде функций. Присва­
иванием ИмяФункции = Выражение задается возвращае­
мое функцией значение.
• Exit Sub/Exit Function. Этими операторами осуществляется до­
срочный выход из процедуры или соответственно функции.
■ Синтаксис списка параметров, обозначенный ранее как Пара­
метры, сам по себе является достаточно многовариантным:
[O ptional] [ВуУа1/ВуН еЧ[РагатАггау]И мяП араметра[()]
[As И мяТипа] [=ЗначениеП оУмолчанию ]
• Optional. Это зарезервированное слово (атрибут) должно
предшествовать имени того параметра, который является
необязательным. После необязательных параметров могут
следовать только необязательные же параметры. Нельзя
использовать необязательные параметры совместно с мас­
сивом параметров (РагатАггау).
• ByVal. Параметр, имени которого предшествует это слово,
будет передаваться в процедуру или функцию по значению.
Если параметром окажется внешняя относительно процеду­
ры переменная, то никакие манипуляции с этим параметром
в коде процедуры не изменят значения этой внешней пере­
менной.
• ByRef. Если имени параметра предшествует слово ByRef, то
передача параметра будет производиться по ссылке, т. е.
значение внешней переменной, переданной в процедуру в
качестве этого параметра, может быть изменено операто­
рами процедуры. Режим передачи параметров по ссылке
принят в языке Visual Basic по умолчанию.
Процедуры и функции
ParamArray. Массив параметров. Таковым может быть объ­
явлен только последний параметр в списке, при этом он
будет представлять собой переменную типа Variant, содер­
жащую в себе массив. Этим способом можно передавать в
пооиедуру или функцию значительные объемы данных. При
использовании массива параметров нельзя применять ат­
рибуты Optional, ByVal и ByRef.
ИмяПараметра. Идентификатор, по которому будет проис­
ходить обращение к параметру в коде процедуры или функЦИИ.
' ..V
4
:
-
’■
ИмяТипа. Определяет требуемый тип параметра, допусти­
мы определяемые пользователем, а также все стандартные
типы.
ЗначениеПоУмолчанию. Допустимо только для необяза­
тельных параметров (т. е. тех, имени которых предшествует
зарезервированное слово Optional). Задает значение, кото­
рое будет автоматически присвоено параметру в случае его
отсутствия. Если параметр отнесен к типу Object, то единственное допустимое значение по умолчанию
Nothing.
Командой Add Procedure меню Tools открывается диалог Add
Procedure, позволяющий создать заготовку процедуры или
функции при условии, что окно кода является текущим. Вве­
дите имя процедуры, установите переключатели в требуемое
положение, щелкните на кнопке ОК, и соответствующая заго­
товка будет вставлена в текст.
Add Procedure
(
й ш иП
Туре
Sub
л
<Ж
Cancel
'
1
1
Процедуры и ф ункции__________________ _______________________ 125
Пример
■ Процедура, код которой приведен в данном примере, получа­
ет массив параметров, состоящий из чисел. Построив строку,
содержащую список этих чисел, она сообщает ее пользова­
телю. Для проверки этой процедуры ее можно вызвать из про­
цедуры Form_Load().
Sub NumbersOut(ParamArray varNumbe rs() As Variant)
Dim ioBorders As Integer
Dim strOutstring As String
Dim N As Integer
ioBorders = UBound(varNumbers)
strOutstring = "Числа, содержащиеся в массиве:
For N = 0 То ioBorders
strOutstring т strOutstring + Str(varNumbers _
(N)) + I "
Next N
MsgBox strOutstring
End Sub
Private Sub Form_Loa d()
NumbersOut 1, 2, 3, 4, 5, 6, 7, 8, 9
End Sub
■
Теперь покажем, как используются необязательные парамет­
ры при объявлении функции. Функция Мах дважды вызвана в
коде процедуры Form_Load. Обратите внимание на тот факт,
что порядок передачи параметров в данном случае не играет
роли, поскольку присваивание значения именованным пара­
метрам производится в явном виде.
Function Max(Optional A As Integer, Optional В As _
Integer) As Integer
If A > В Then
Max * A
E lse
Max « В
End If
Процедуры и функции
End F u n c tio n
Private Sub Form_Loa d()
Dim iNumberl As Integer
Dim iNumber2 As Integer
Dim iResultl As Integer
Dim iResult2 As Integer
Dim strResult As String
iNumberl
iNumber2
iResultl
iResult2
e
e
=
=
.
5012
"
784
Max(A:=iNumberl, В :~iNumber2)
M a x ( B :=iNuraber2, A : “ iNumberl)
strResult = "iResultl: " & Str(iResultl)
strResult = strResult & Chr(13) & "iResult2:
strResult = strResult & Str(iResult2)
MsgBox strResult
End Sub
1
"
1
И, наконец, последний пример демонстрирует использование
значений по умолчанию для необязательных параметров.
Функция MyCalc представляет собой программный «калькуля­
тор» для выполнения четырех действий арифметики.
Function MyCalc(Operandl As Integer, Operand2 As _
Integer, Optional Operator As String = __
"+")As Integer
Select Case Operator
Case Is *
MyCalc = Operandl + Operand2
Case Is = "-"
MyCalc = Operandl - Operand2
Case Is *
MyCalc = Operandl * Operand2
Case Is «
If Operand2 Then
MyCalc = Operandl \ Operand2
Ё іэе
MsgBox "Деление на нуль!", vbCritical,
"Ошибка!"
End If
Case Else
MsgBox "Операция не определена!", vbCritical
End Select
End Function
Private Sub Form_Loa d()
Dim iNumber1 As Integer
Dim iNumber2 As Integer
Dim iResultl As Integer
Dim iResult2 As Integer
Dim strResult As String
iNumberl = 5012
iNumber2 = 0
iResultl = Calc(iNumberl,
iResult2 « Calc(iNumberl,
iNumber2)
iNumber2,
"\")
strResult * "iResultl: " + Str(iResultl)
strResult = strResult + Chr(13) + "iResult2:
strResult = strResult + Str(iResult2)
MsgBox strResult
End Sub
Процедуры и функции
Ю
о
1
1
Примечание
■
Процедуры и функции не могут быть вложенными, т. е. нельзя
объявить процедуру или функцию внутри процедуры или функции.
н и
Ш Visual Basic позволяет вызывать внешние функции, исполняе­
мый код которых размещен в динамической библиотеке DLL.
В частности, техника обращения к так называемым АР1-функциям Windows, которые размещены в системных DLL-файлах,
будет рассмотрена в главе 5 (см. 5.7).
3.5.1. Функции Visual Basic
Visual Basic располагает большим набором встроенных функций,
предназначенных для решения разнообразных задач. Функции
Visual Basic доступны в любом месте исходного кода за исключе­
нием ссылок на объекты. Ниже будут кратко описаны наиболее
употребительные функции Visual Basic. Их можно разделить на не­
сколько категорий:
® финансово-математические функции
Ш Функции преобразования типов
Ш Математические функции
Ш Функции статуса
Ш Функции обработки строк
Ш Прочие функции
Примечание
Ш В примерах программ, которые вы встретите в последующих
главах, будут использоваться описанные ниже функции.
Ш Речь идет о весьма кратком описании. Если вам потребуется
уточнить некоторые детали, это можно сделать с помощью
справочной системы Visual Basic.
D D B (cost, salvage, life , p e rio d [, fa c to r])
Функция вычисляет амортизацию фондов в течение заданного ин­
тервала времени. В зависимости от параметров вычисление
может производиться как по прогрессивной шкале, так и другими
методами.
математические
Ж
и
FV(rate
Вычисляет будущую стоимость при известном размере регуляр­
ного взноса и постоянной процентной ставке.
мшр;
щвщашшл
Ш
?h nisiЛ&ІН
IPmt
IP m t(ra te , p e r, n p e r, p v [, fv [, ty p e ]])
Вычисляет сумму выплат при известном размере регулярного
взноса и постоянной процентной ставке.
шФинансово-математические функции
IRR (values()[, guess])
Вычисляет внутреннюю норму доходности при из естной последовательности выплат и поступлений.
MIRR
ЯП
Финансово-математические функции
M IR R (values(), fin a n ce _ra te , re in ve st_ra te )
Вычисляет модифицированную внутреннюю норму доходности.
NPer
инансово-математические функции
N P er(rate, p m t, p v[, fv [, ty p e ]])
Устанавливает количество периодов времени, требующихся для
достижения заданной фактической стоимости при постоянном
размере выплат и постоянной процентной ставке.
110
Процедуры и функции
и
N PV(rate, values())
Вычисляет чистую приведенную стоимость инвестиционного прое^-а при известных размерах выплат и поступлении и постоянной
дисконтной ставке.
P M T(rate, n p e r, p v [, fv [, ty p e ]])
которые
необходимо
Вычисляет величину постоянного взноса,
определенной
суммы
вносить или выплачивать для достижения
при постоянной процентной ставке
P P m t(rate, p e r, n p e r, p v[, fv [, ty p e ]])
Аналогична функции PMT, но позволяет определить величину вы
платы (поступления) в зависимости от того, производится пос
п о п и а а в НЯЧЯПЙ ИЛИ В КОНЦв КӘЖДОГО П е р И О Д З .
PV(rate, n p e r, p m t[, fw[, ty p e ]])
Вычисляет приведенную стоимость при известном и постоянном
постоянной
процентной
размере выплаты, периоде выплат и
ставке.
R ate(nper, p m t, p v [, fv[> ty p e [, g u e s s ]]])
Вычисляет процентную ставку, необходимую для получения заданной стоимости при известном периоде выплат.
S LN (cost, salvage, life )
Вычисляет величину амортизации фондов с помощью линейного
метода.
Ш
SYD(cost, salvage, life , period)
Вычисляет величину годовой амортизации фондов за определен­
ный период.
Азс(С трокаС имволов)
Возвращает код первого символа в строке-параметре
СВооІ(Выражение)
Преобразует числовое выражение или строку в булево значение
-и •>*.
СВуІе(Вы ражение)
Преобразует числовое выражение или строку в байт
се
уикци
ССиг(Выражение)
Преобразует числовое выражение или строку в число в денежном
формате. При этом количество знаков после запятой уменьшает­
ся до четырех.
✓
Ш ж Ш 'і-мжШй
С Date
типов
СО аІе(Выражение)
Преобразует числовое выражение или строку в дату
шjзов
типов
функции
CDbl
ж
СОЫ (Выражение)
Преобразует числовое выражение или строку в число типа Double
I
г ' • '
CDe с
« I Д г
. I . ■ л
”в "
*
J
• *
" * t v J * V / -'
‘ -fc
■
^JQQi
функции преобразования типов
СО ес(Выражение)
Преобразует числовое выражение или строку в число типа Decimal.
Процедуры и функции
С
функции преобразования типов
(Ж
СІпМВыражение)
Преобразует числовое выражение или строку в число типа InteРР
Функции
преобразования
типов
mm
ЗКИЁМШ
СІ-пд(Выражение)
Преобразует числовое выражение или строку
число типа Long
функции преобразования типов
СЗпд(Выражение)
Преобразует числовое выражение или строку в число типа Single
ф и кц и и преобразования типов
CStr(BbipaxeHne)
Преобразует числовое выражение или строку в строку.
ш ш
функции преобразования типов
СУаг(Выражение)
Преобразует числовое выражение или строку в значение типа
Variant.
функции
преобразования
типов
Hex
Нех(Число)
Преобразует числовое выражение или строку в шестнадцатерич­
ное число. Дробное значение будет округлено, возвращает зна­
чение типа Variant.
Функции
преобразования
типов
O ct
О сі(Число)
Преобразует числовое выражение или строку в восьмеричное
число. Дробное значение будет округлено, возвращает значение
типа Variant.
Процедуры и ф ункции
113
АІп(Число)
Вычисляет арктангенс от значения параметра
Соз(Число)
Вычисляет косинус от значения параметра
Математические функции
Ехр(Число)
Вычисляет экспоненту от значения параметра
функции
Ғіх(Число)
Эта функция удаляет дробную часть числового значения, переш нного ей в качестве параметра. При этом для положительных
значений она возвращает ближайшее меньшее целое число, а для
отрицательных — ближайшее большее.
Математические функции
int
ІіЛ(Число)
Действует аналогично функции Fix с той разницей, чтовслучае
отрицательного параметра будет возвращено ближайшее меньшее целое число.
І_од(Число)
. л. >г \*
Вычисляет натуральный логарифм от значения параметра. Функ­
ция, обратная функции Ехр.
Vi'* *
щ
ВЩ Ф ун
ИпсІ(Чисяо)
Генерирует случайное (строго говоря, псевдослучайное) число в
интервале от 0 до 1. Необязательный параметр позволяет вы­
полнить предустановку генератора псевдослучайной последова­
тельности. Одна и та же предустановка приведет к генерации
одной и той же последовательности, которая может рассматри­
ваться в качестве случайной только сама по себе в статистичес­
ком смысле.
Sgn( Число)
Возвращает +1, если значение параметра положительно, -1, если
отрицательно, и 0, если 0.
Щ
1
не
ц
£
Зіп(Число)
J
Вычисляет синус от значения параметра.
w ''Ц
ж
т
I
акая®
Бдг(Число)
Вычисляет корень квадратный от значения параметра.
егШ Ш
Тап(Число)
Вычисляет тангенс от значения параметра
е функции
Процедуры и ф ункции
115
1вАггау(ИмяПеременной)
Возвращает булево значение, отражающее статус параметр
True, если переменная типа Variant является массивом, и False
противном случае.
IsDate
IsDate(Bbipa)KeHHe)
Возвращает булево значение, отражающее статус параметра.
True, если значение параметра может быть интерпретировано как
дата, и False в противном случае.
ции
IsEmpty
IsEmpty(BbipaxeHne)
возвращав i u y » ^ о™-,с ние, отражающее состояние парами
типа Variant: если переменная инициализирована, будет возвра-
щено True. ,
IsBnror
ф ункции с т а щ щ
ІвЕггог(Выражение)
Возвращает булево значение, отражающее статус параметра. True,
если значение параметра может рассматриваться как ошибка.
tsMissing
Функции статуса
IsMissing(HMflnapaMeTpa)
Возвращает булево значение, отражающее статус параметра^
Если необязательный параметр передан в процедуру, то True, в
противном случае — False.
IsNuH
Функции статуса
ІзНиІІ(Выражение)
Возвращает булево значение, отражающее о.а ,Уо
Если выражение содержит действительные данные, то True,
противном случае — False.
116
Процедуры и ф ункции
мш татуса
IsN um erfc
lsNumeric(Bbipa*ceHHe)
Возвращает булево значение True, если параметр является числом, и False в противном случае.
имвшмя&мнжя
IsObject(CcbmKa)
Возвращает булево значение True, если параметр относится к
типу Object, и False в противном случае.
туса
TypeNam e
ТуреЫ ате(ИмяПеременной)
Строка, возвращаемая этой функцией, содержит информацию о
переменной-параметре.
'
~ V
шт
ж:
Ш
Функции статуса
ЖІ
VarType
УагТуре(ИмяПеременной)
Возвращает значение типа Integer, указывающее на разновид­
ность значения, содержащегося в Variant-переменной, передан­
ной в функцию в качестве параметра.
сһг
ЩЙ
ш
ш
истрок |
Сһг(КодСимвола)
Возвращает строку, содержащую символ, код которого был пере­
дан в функцию в качестве параметра.
In s tr
ни стр о к
ln str([S ta rt, ]С трока1, С трока2[, 0 /1 ])
Возвращает номер позиции начала строки С трока2 в составе
строки С тр о ка і, или 0, если таковая не обнаружена.
§
А
Функции обработки строк
Left(CTpoKa, КоличествоСимволов)
Возвращает строку, извлеченную из строки-параметра, начиная с
первого символа, и содержащую заданное число символов.
Процедуры и функции
Ьеп(С трока/И мяП еременнои)
количество
байт
Возвращает количество символов в строке или
занимаемое переменной в памяти.
ш ш яш
ІТгіт(Строка)
Удаляет лидирующие пробелы из строки-параметра
кции
RTrim
Я Т пт(С тр о ка )
Удаляет замыкающие пробелы из строки-параметра
Str(HnM O)
Преобразует числовое значение в строку
ф ункц и и о б р а б о тки
StrComp(CTpoKa1, С тр о ка 2 [, co m p a re ])
Сравнивает строки и возвращает число-результат. Режим срав
нения зависит от параметра compare.
______
Функции обработки строк
StrConv(CTpoKas conversion)
Преобразует строку. Вид преобразования зависит от параметра
conversion.
Процедуры и функции
ф ун кц и и об раб отки стр о к
ф ун кц и и об раб отки
Тгіт(Строка)
удаляет лидирующие и замыкающие пробелы из строки-пара
метра.
------------------------------Ф т т и и д в щ ң времени
Date / Date = дата
Возвращает текущую системную дату или же позволяет устано
вить системную дату.
■т л
ф ун кц и и д а ты и врем ени
ф ун кц и и д а ты и времени
D a te P a rt(n H T e p B a n , д а та [, П ервы йД еньН едели[, Первая
Н еделяГода]])
Возвращает заданную часть даты.
•
______
^ф ун кц и и Д 0 ты и времени
D ateS erial(roA , м есяц , день)
Возвращают дату дня, соответствующего заданным параметрам.
119
Процедуры и ф ункции
mm
DateValue(AaTa)
Возвращает дату, содержащуюся в строке-параметре
м еня
Оау(дата)
Возвращает число от 1 до 31, соответствующее числу месяца в
дате-параметре.
Ноиг(время)
Возвращает число от 0 до 23, соответствующее часу
М іпіЛ е(врем я)
Возвращает число от 0 до 59, соответствующее минуте
M onth
Функции
М оггіһ(дата)
Возвращает число от 1 до 12, соответствующее месяцу
функции
и времени
Now
Эта функция возвращает значение типа Variant, содержащее сис
темную дату и системное время.
_________ ___
нкции даты и времени
Second(BpeMfl)
Возвращает число от 1 до 59, соответствующее секунде
Tim e
функции даты и времени
Time
Возвращает значение системного времени.
120
Объекты и классы
Timer
Функции даты и времени
T im e r
,
Возвращает количество секунд, прошедших с момента последней
полуночи.
Weekday
Функции даты и времени
W eekday (дата [, П ервы йД еньН едел и ])
Возвращает номер дня недели, соответствующий переданной в
параметре дате.
Функции даты и времени
Year(дата)
Возвращает число, соответствующее году переданной в парамет­
ре даты.
3.6. Объекты и классы
В программировании на языке Visual Basic важную роль играют
объекты. Объекты позволяют, в частности, создавать многократ­
но используемый код. Идея объекта состоит в том, что некоторые
данные и код, предназначенный для работы с этими данными,
объединяются в одно целое (инкапсуляция). Внешний код может
взаимодействовать с объектом через его свойства, методы и со­
бытия. Возьмем, к примеру, управляющий элемент, который по­
мещен на форму на этапе визуального программирования. Он
представляет собой объект, обладающий свойствами (значения
которым можно присвоить на этапе визуального программирова­
ния), методами и событиями, которые обрабатываются соответ­
ствующими процедурами. Но роль объектов в Visual Basic про­
грамме этим не исчерпывается. Объект Clipboard обеспечивает
доступ к буферу обмена Windows и позволяет программе обме­
ниваться данными с другими приложениями. A ActiveX-элемент,
поддерживающий технологию OLE, способен обеспечить прило­
жениям еще более тесную связь.
Объекты и классы
______ ______________________________
121
Теперь следует прояснить отношения между объектами и клас­
сами.
• Класс представляет собой шаблон объекта, его определе­
ние, пользуясь которым, Visual Basic может создать собст­
венно объект. В объявлении класса определяются свойства,
методы и события объекта.
• Объект называют также экземпляром класса, это одна из кон­
кретных копий, созданных по шаблону, заданному классом.
Имея дело с классами и объектами, в большинстве случаев их
можно рассматривать как своего рода типы и своего же рода
переменные этих типов. Чтобы создать переменную какого-либо
типа ее необходимо объявить — точно так же необходимо объ­
явить объект, относящийся к некоторому классу, чтобы его со­
здать. Как и в случае типов, можно создать собственный класс,
что позволит сделать соответствующую часть кода многократно
используемой.
В противоположность объектно-ориентированным языкам, таким,
как Smalltalk или C++, Visual Basic не поддерживает в полной мере
принципы объектного программирования и некоторые возмож­
ности в нем отсутствуют. Объектно-ориентированные языки под­
держивают инкапсуляцию, полиморфизм и наследование. Visua
Basic поддерживает инкапсуляцию и отчасти полиморфизм, но не
поддерживает наследования.
Примечание
■
Понятия полиморфизма и наследования нуждаются в кратком
пояснении.
• Полиморфизм. Под полиморфизмом подразумевается, что
в разных классах существуют методы с одинаковыми име­
нами (и решающие при этом одинаковые задачи), но отно­
сящиеся при этом к разным объектам (см. 3.6.3).
• Наследование. В объектно-ориентированных языках воз­
можно создание новых классов на основе уже существую
щих. При этом вновь созданный класс обладает всеми функ­
циональными возможностями класса-предка» — этот механизм и называют наследованием.
Объекты и классы
3.6.1 Применение объектов
Обзор
'
В К свойствам и методам объекта можно обратиться следую­
щим образом:
j^
ИмяОбъекта.ИмяСвойства
ИмяОбъекта.ИмяМетода
■ С помощью ссылок на объекты можно формирювать более
сложные выражения доступа к объектам. Через ссылку можно
обратиться к свойству или методу объекта, на который указы­
вает ссылка:
Щ
Forml.ActiveControl.BackColor * QBColor(O)
Этим присваиванием устанавливается цвет фона для активного
управляющего элемента формы, при этом ни тип, ни имя элемен­
та неизвестны.
■ Зачастую удобно пользоваться переменной типа Object, кото­
рая может содержать в качестве своего значения объекты оп­
ределенных типов. Синтаксис объявления такой переменной
не отличается от стандартного:
".
P ublic/Private/D im И мяП ерем енной As [N ew ]
ИмяО бъектногоТипа
• Полное описание синтаксиса объявления переменных
см. 3.2.1.
■
• При использовании зарезервированного слова New будет
создан новый объект типа И м яО бъ ектногоТ ипа .
• Чтобы переменная объектного типа содержала ссылку на
объект, используйте синтаксис:
.
Set ИмяПеременной = [N ew ] Ссылка
• При этом ссылка может указывать как на существующий
объект, так и на несуществующий — в этом случае (при на­
личии слова New) он будет создан.
• В этой связи важную роль играет тип связывания, особенно
это важно для ActiveX-объектов. Под типом связывания по­
нимают момент времени, когда происходит связывание объ-
Объекты и классы
■
_________________________ 123
ектов и переменных (т. е. фактическое определение рабочих
адресов в памяти). Различают раннее и позднее связывание.
Раннее связывание производится при компиляции програм­
мы, поскольку тип объекта уже известен — он указан в объяв­
лении переменной. Позднее — в процессе выполнения про­
граммы, при этом переменная объектного типа объявлена в
исходном коде как Object. Недостаток позднего связывания за­
ключается в медленности этого процесса по сравнению с ран­
ним связыванием, которое при выполнении программы вооб­
щ е не занимает времени. Кроме того, при позднем связывании
возможны ошибки несовместимости типов.
С помощью оператора TypeOf можно распознать класс, к ко­
торому относится объект (при этом можно использовать опе­
ратор If и операцию Is):
• • •
If TypeOf X Is Label Then
■i •
■
Используя операцию Is, можно сравнить объекты и выяснить,
принадлежат ли они к одному типу:
р И 8
If Objectl Ts Object2 Then
• • •
Ш С помощью оператора With можно обратиться к нескольким
свойствам одного объекта, не указывая каждый раз заново
имя объекта, и одновременно повысить «прозрачность» свое­
го кода. Наряду с обращением к свойствам объекта в кон­
струкции With можно вызвать методы объекта и разместить
другой код.
W ith ИіляОбъекта
.С войство! = З начениеі
.Свойство2 = Значение2
.СвойствоЫ = Значением
End W ith
Объекты и классы
124
В языке Visual Basic определены некоторые глобальные объ­
екты Это объекты доступны в любом месте программы и
обеспечивают функциональные возможности, общие для всех
Visual Basic-программ. Ниже приведен список глобальных
объектов Visual Basic и краткие сведения о них. Более подроб­
ную информацию можно найти в справочной системе Visual
Basic.
.
'•'•I-.-
Таблица 3.9. Глобальные объекты Visual Basic
Объект
Описание
Приложение, содержит сведения
об исполняющейся программе.
Clipboard
Буфер обмена Windows, позволяет
переносить данные между прилож(
Debug
Отладка. Предназначен для облегчения
поиска ошибок._____________________
Содержит информацию об ошибках периода
выполнения.
-
Error
Служит для отладки приложений,
работающих с базами данных.
Printer
Позволяет обращаться к принтеру
как к объекту.__________________
Screen
Экран. В своих свойствах содержит
параметры вывода на экран и позволяет
обращаться к экрану как к объекту.
Одним из средств, помогающим работать с объектами, явля­
ется окно Object Browser, в котором систематизирована ин­
формация об объектах и константах проекта (а также вообще
о доступных объектах и константах Visual Basic). Здесь можно
найти объявление объекта и скопировать его в окно кода.
125
Объекты и классы
Библиотеки
Строка поиска
Вызов функции поиска
Object Browsor
<All Ljbraries>
Classes;; ■ .. -v. - __
О |<globals> ___________
# AlignConstants
# AlignmentConstanls
0 AmbientProperties
ЙЗ App
r#» AppllcatlonStartConstants
І | | AsyncProperty
ap AsyncTypeConstants
&P BorderStyleConstants
=# ButtonConstants
f g CheckBox
CheckBoxConstants
Щ Clipboard
Ф ciipBoardConstants
Collection
ЫР ColorConstants
Яй Г
л^
К
л О лч/
----„ --- ——
Members of '<globais>
Л Abs
Ш Арр
AppActivate
■Л Asc
Л AscB
Л AscW
з » Atn
Веер
ЙР Calendar
CBool
СByte
CCur
j Л CDate
CDbl
•Л CDec
I Л ChDir
ЛҺПгп>ля„---———■
V• 11
/ t lirv n i
Элементы
класса
Ш
<Ail Ubraries>
Классы
Подсказка относительно выбранного элемента окна
Обзор. Коллекции объектов
О Объекты можно объединить в коллекцию. Обычно такие объ­
екты относятся к одному типу, но это не обязательное требо­
вание — в принципе, возможно объединение в коллекцию и
разнородных объектов. Коллекция объектов позволяет произ­
водить некоторые действия со всеми входящими в нее объ­
ектами.
■ В языке Visual Basic определены две встроенные коллекции
объектов, к которым можно обращаться непосредственно.
Объекты и классы
• Forms. В эту коллекцию включаются все загруженные
формы проекта.
,о
• Controls. Эта коллекция включает все управляющие элемен­
ты всех форм.
f^
Все коллекции располагают собственными методами и свойствами, помимо методов и свойств их членов. Следующие
свойство и метод имеются во всех коллекциях без исключения:
I
♦ Свойство Count. Содержит число объектов в коллекции.
♦ Метод Item. Служит для выбора объекта в коллекции.
Многие коллекции, кроме того, располагают следующими ме- I *I
I
9 Add. С помощью этого метода в состав коллекции включа­
ется новый объект.
v
Н « Remove. Используя этот метод, объект исключается из со­
става коллекции.
.: *.'!;•/
Помимо встроенных коллекций программист может опреде­
лить свои. Для этого необходимо создать объект типа Collection:
I ... '
P ublic/P rivate/D im И м яК оллекции As New C ollection
С помощью цикла For Each...Next можно «перебрать» все объ­
екты, входящие в коллекцию, и выполнить над ними опреде­
ленные операции. Если же при этом использовать оператор
TypeOf и операцию Is, то можно идентифицировать тип объ­
екта в коллекции и с каждым поступать соответственно. На­
пример, изменить цвет всех этикеток формы на красный
можно, применив следующий код:
. ... . •
*
.
-
Private Sub Form__Load ()
•
Dim colLabels As New Collection
Dim X As Control
•‘
For Each X In Controls
If TypeOf X Is Label Then
colLabels.Add X
-
№В|1
:
127
Объекты и классы
End If
Next X
For Each X In colLabels
x.ForeColor = Q B C o l o r (4)
Next X
End Sub
3.6.2. Создание классов
Вам должна быть уже понятна вся важность объектов и классов
для программ на языке Visual Basic. Возможность определения
новых классов особенно важна для технологий ActiveX и OLE.
Обзор. Создание классов Visual Basic
Visual Basic рассматривает форму в качестве класса. Экзем­
пляр формы можно создать с помощью зарезервированного
слова New.
Для создания классов Visual Basic использует модули классов
(см. 4.1.5), код которых размещается в файлах с расширением
CLS.
Модуль класса должен быть включен в состав проекта
(см 4 1 5) что можно осуществить посредством команды Add
Class M odule меню P roject. За несколькими исключениями,
в модуль класса можно помещать любой код. Функциональные
возможности класса определяются описанными при его объ­
явлении свойствами, методами и событиями. Когда полнос­
тью готовый модуль класса включен в состав проекта, можно
создавать экземпляры класса.
В каждом модуле класса должны быть определены три своиства и два события?
Свойство Instancing должно определять, могут ли другие
__
_ОІ/ОРМПп
qпы этого класса и если да,
I | yjvI / I w m
I «г * ■ w w w f - » — — — --------- ^
то в каких случаях и каким образом.
• Свойство Name должно содержать имя модуля класса.
0
• Свойство Public определяет, должен ли класс поддерживать
технологию OLE-Automation (значение по умолчанию —
FaiSe).
-с-
• Событие Initialize должно генерироваться при создании эк­
земпляра класса. Это дает возможность предпринять необ­
ходимые действия с помощью соответствующего обработ­
чика события.
• Событие Terminate должно происходить, когда экземпляр
класса удаляется из памяти (выгружается).
■ Чтобы снабдить класс свойством, необходимо объявить две
процедуры (см. 6.1.3 и ниже). Одна из них будет «срабаты­
вать» в ситуациях, когда свойству присваивается значение, а
вторая наоборот, когда значение свойства присваивается какому-то внешнему объекту. При этом само значение свойства
должно быть защищено от любого доступа в обход этих двух
процедур (это, в сущности, и есть инкапсуляция).
Если процедура, выполняющая присваивание значения свойству,
отсутствует, то данное свойство может использоваться «только
для чтения» (Read Only).
■ Методы класса можно определить как процедуры или функции
(см. 3.5). При этом следует учитывать несколько обстоя­
тельств:
• Собственно методы должны быть определены как процеду­
ры с областью видимости Public, поскольку они предназна­
чены для вызова из других модулей.
• Процедуры и функции, объявленные как Private, могут ис­
пользоваться только для «внутренних» нужд класса.
• Еще одну возможность предоставляет такое определение
области видимости, как Friend, представляющее собой
нечто среднее между Public и Private.
В События являются основой управления в такой ориентирован­
ной на обработку событий среде, как Windows. Событие
можно определить и разрешить его генерацию (см. 6.1.3 и
ниже) в определенных ситуациях. События объявляют в
общем разделе модуля класса с помощью зарезервирован-
Объекты и классы
______________________ Ң 2
ного слова Event. В процедурах модуля можно сгенерировать
событие, используя оператор RaiseEvent. Если объект, явля­
ющийся экземпляром, должен генерировать события, то соотвөтствующую переменную (отнесенную при определении
типа к данному классу) необходимо объявить с использова­
нием зарезервированного слова WithEvents. Непосредственно
после этого можно будет создать процедуру обработки этого
события (см. 5.2).
Процедура. Создание свойства
1. Простейший способ создания пары процедур, необходимых
для функционирования свойства класса, состоит в использо­
вании диалога Add Procedure. Выберите команду Add Pro­
cedure в меню Tools.
2. Введите в поле Name имя свойства.
3. Установите переключатель типа процедуры на Property.
4. Установите переключатель области видимости на Public.
5. Щелкните на ОК. В окно кода будут вставлены заготовки двух
процедур: Property Get и Property Let. Процедура Get будет
автоматически вызываться каждый раз при обращении к зна­
чению свойства, а процедура Let — в случае присваивания ему
значения. Удалив (или просто не определив) процедуру Get,
вы получите свойство «только для чтения».
6. В объявлении процедур Get и Let можно задать тип, к которому
будет относиться значение свойства (по умолчанию—Variant).
Процедура. Создание события
1. Как и при создании свойства, откройте окно диалога Add Pro­
cedure (Tools/Add Procedure).
2. Введите имя события в поле Name.
3. Установите переключатель области видимости на Public.
4. Установите переключатель типа процедуры на Event.
5. Щелкните на ОК, и в общий раздел модуля класса будет
вставлена заготовка объявления события (с использованием
5 Заказ 3337
Объекты и классы
130
зарезервированного слова Event), в комбинированном поле
списка событий в окне кода появится новый пункт (см. 4.1.8).
Чтобы
событие
произошло
(было
сгенерировано),
необходи­
6
мо использовать оператор RaiseEvent.
RaiseEvent. ИмяСобытия
Чтобы
объект,
созданный
как
экземпляр
данного
класса,
мог
7
реагировать на данное событие, соответствующую перемен­
ную необходимо объявить с использованием зарезервирован­
ного слова WithEvents:
P rivate W ithEvents И м яП ерем енной As И м яКласса
После
этого
можно
создавать
процедуры,
обрабатывающие
8
описанное таким образом событие.
Г*4Class Builder
V iew
VM
Й АШ
properties
Project!
шШШмШШ
и
H elp
Name
ч:
j Methods | E verts
AB
:
Data T!
f
Примечания
Упростить работу по созданию классов поможет утилита Class
Builder, которую с помощью администратора Add-ln-утилит
(Add-In Мападег)можно включить в меню Add-Ins.
Более подробные сведения о технике создания классов Visual
Basic вы найдете в справочной системе (Help/Books Online).
Объекты и классы
- ..
_____________131
« 1
3.6.3. П о л и м о р ф и з м
Обзор
■ Под полиморфизмом понимают такое положение вещей, когда
разнородные объекты обладают одноименными методами,
предназначенными для решения аналогичных задач. Например,
метод Drag — большинство управляющих элементов им облада­
ют. Для каждого из элементов он решает одну и ту же задачу и
вызов его производится одинаковым образом, г'
■ Полиморфизм достигается в Visual Basic благодаря примене­
нию концепции интерфейса класса. Под интерфейсом класса
понимают прототипы свойств и методов класса, объединен­
ные в набор. Фактически, это объявления процедур, реализу­
ющих свойства и методы класса. При создании класса все эти
процедуры должны быть реально «прописаны», при этом объ­
явление процедур остается неизменным во всех классах, ре­
ализующих данный интерфейс, а код процедур меняется от
класса к классу. В каждом классе реализован по меньшей
мере один интерфейс и все методы и свойства, определенные
в этом интерфейсе, класс должен поддерживать. Если поль­
зователь при создании класса не «наполнил» кодом некоторые
из процедур, определенные интерфейсом класса, то обраще­
ние к соответствующим методам или свойствам объекта-эк­
земпляра этого класса вызовет ошибку.
■ Чтобы реализовать интерфейс класса (один или несколько),
используют оператор Implements, помещенный в раздел гло­
бальных объявлений модуля класса:
Implements ИмяИнтерфейсаКласса
■ Чтобы создать интерфейс класса, необходимо в отдельном
модуле класса поместить заготовки (т. в. объявления без
кода) процедур, реализующих свойства и методы класса.
Пример
■ В данном примере речь пойдет о сосудах. Сосуды отличаются
один от другого прежде всего объемом, т. е. количеством жид­
кости, которое в них можно налить, или, наоборот, вылить из
132
Объекты и классы
них. Возьмем бочку (Barrel) и бутылку (Bottle) — обе относятся
к сосудам (Vessels). Методы выливания жидкости из бочки и
из бутылки различны (в одном случае речь должна идти о лит­
рах, во втором — о миллилитрах). Таким образом, необходимо
создать интерфейс Vessels (где будет определен метод PourOut — Выливать) и два класса — Barrel и Bottle (где этот метод
будет реализован).
• В модуле класса, содержащем интерфейс Vessels, должен
присутствовать код:
Public Sub PourOut(ByVal NumberOf As Single)
End Sub
• В модуле класса, содержащем определение класса Barrels:
Option Explicit
Implements Vessels
• • •
Private Sub Vessels_PourOut (ByVal NumberOf As Single)
MsgBox нВы вылили из бочки " & Str (NumberOf) _
&" ли тров”
End Sub
• • •
* В модуле класса, содержащем определение класса Bottles:
Option Explicit
Implements Vessels
Private Sub Vessels_PourOut (ByVal NumberOf As Single)
MsgBox "Вы вылили из бутылки " & Str (NumberOf) |
&" миллилитров"
End Sub
Примечание
■
Более подробные сведения о полиморфизме можно наити в
справочной системе Visual Basic.
I Разработка программы:
Г создание, отладка
и тестирование
В этой главе мы попытаемся показать, как разрабатываются про­
граммы на языке Visual Basic. Мы не будем здесь останавливаться
на узких проблемах алгоритмизации и программирования —
этому посвящены главы с 5 по 9, в задачи же этой главы входит
ознакомление читателя со всеми организационными аспектами
создания программ с помощью пакета Visual Basic. Речь пойдет
о визуальном программировании и программировании в исход­
ном коде, о том, как заставить программу работать (отладка) и
как убедиться, что программа делает в точности то, что должна
делать (тестирование).
Примечание
■
Три этапа, упомянутые в заглавии, редко в действительности
следуют один за другим. В самом деле, многие ошибки обна­
руживаются еще при вводе исходного кода, отдельные фраг­
менты программы разработчик может (и должен) тестировать
еще до того, как программа приобретет законченный вид, и
т.д. — под созданием, отладкой и тестированием, скорее, под­
разумеваются аспекты разработки программного обеспече­
ния, три измерения, которыми должен обладать этот процесс
в сознании программиста, планирующего свою работу. Очень
важно понимать роль, которую играют в программировании
дисциплина мышления и тщательное планирование.
4.1. Создание программы
в
Когда фаза планирования завершена и программист приступает
к работе, ему следует начать с создания необходимых ресурсов ,
Создание программы
е «блоков» из которых будет состоять будущая программа.
Сюда относятся рабочая поверхность (desktop) приложения, ис­
ходный код, файлы точечных рисунков, значки и т. д.
4 1 .1. философия программирования на языке
Visual Basic
Каждый язык программирования и каждая среда разработки об­
ладают собственной философией. Программист, желающий с
м а к с и м а л ь н о й эффективностью воспользоваться и языком, и
соедой разработки, должен эту философию воспринять. Visual
Basic — сравнительно легкий язык программирования. Им отно­
сительно нетрудно овладеть и с его помощью можно достаточно
быстро получить ощутимый результат — законченное Windowsпоиложение, отвечающее всем требованиям, которые предъяв­
ляются «уважающему себя» Windows-приложению. Именно поэ­
тому наверное, многие считают Visual Basic несерьезным, «дет­
садовским» языком. И это странно, так как этот «детсадовский»
язык способен создавать профессионального уровня приложе­
ния решающие практически любую задачу из тех, что могут
встретиться в среде Windows. При этом во многих случаях создать
нужное приложение, используя Visual Basic, оказывается легче и
быстрее чем с помощью других систем программирования. Во
многих но не во всех. Чтобы понять, в каких случаях, при решении
каких задач наиболее подходящим окажется тот или инои язык,
необходимо понимать философию языка. Приведенный ниже
краткий обзор призван сыграть роль «вводного курса» в Филосо­
фию Visual Basic, в остальном положитесь на опыт, который при­
ходит со временем, гибкость мышления и открытость ко всему
новому.
Обзор
^
■
- ^ р о м собственно языка Visual Basic является, как уже упо­
миналось, VBA. Ядро окружено оболочкой, с°ДеР*ащеиi в себе
разнообразные сервисные и инструментальные ^
т е то что мы называем интегрированной средой разработки
(IDE), Благодаря IDE существенно облегчается создание поль-
Создание программы
___________________135
зовательского интерфейса (визуальное программирование),
работа с исходным кодом будущей программы, а также тес­
тирование и отладка.
■ Визуальное программирование, т. е. создание рабочей по­
верхности приложения и всех его видимых элементов, играет
важную роль (собственно, сам термин «визуальный» происте­
кает именно отсюда). Однако не следует думать, что в систе­
мах визуального программирования все ограничивается «ри­
сованием» окна приложения. В сколько-нибудь сложных про­
ектах на первый план неизбежно выходит работа с исходным
кодом. Но и в этом случае среда Visual Basic способна суще­
ственно облегчить жизнь программиста, поскольку она насы­
щена разнообразными вспомогательными средствами для
программирования в коде.
■ В современном программировании одно из центральных мест
занимает концепция объектз. Поэтому многие языки програм­
мирования являются ныне объектно-ориентированными.
Такие языки позволяют инкапсулировать данные вместе с
кодом, предназначенным для их обработки, т. е. объединять
их в нечто целое, именуемое объектом. Visaul Basic не явля­
ется объектно-ориентированным языком в строгом смысле
этого слова, однако объектный поход играет в нем важную
роль. Все визуальные элементы (начиная с экранной формы)
представляют собой объекты, пользователь может создавать
собственные объекты как экземпляры определенных им клас­
сов и т.д.
■ Визуальное программирование в среде Visual Basic основы­
вается на управляющих элементах (controls), которые пред­
ставляют собой инкапсулированные визуальные объекты, го­
товые к использованию. Их можно поместить на форму и тем
самым включить в состав своей программы соответствующие
функциональные возможности. Спектр доступных управляю­
щих элементов очень широк и не ограничивается тем мини­
мальным набором, который поставляется вместе с пакетом
Visual Basic — существует целый рынок готовых к употребле­
нию управляющих элементов. Таким образом, чтобы снабдить
свою программу некоторой функциональной возможностью,
Создание программы
вы должны найти подходящий элемент, поместить его на
Форму присвоить значения его свойствам и ввести код, об­
рабатывающий его события. Затем, если требуется, вы може­
те обратиться к его методам в коде программы.
Процесс создания программы с помощью Visual Basic состоит
из трех основных этапо
над
D H O Y W Io n v e
Г — ........... r
,
v ____л
чинается с создания пользовательского интерфейса. С помощью редактора формы (см. 4.1.4) на экранную форму помещают управляющие элементы, которые должны обеспе­
чить взаимодействие программы с пользователем.
Задание значений свойствам . Далее, посредством окна
свойств (см. 4.1.5) задаются значения свойствам управля­
ющих элементам, помещенным ранее на форму. Благодаря
этому можно изменить как вид элемента, так и его поведе­
ние на этапе выполнения программы. Значения некоторых
свойств можно изменить только с помощью окна свойств,
некоторых — только в процессе выполнения программы.
Многие свойства позволяют менять свои значения обоими
способами.
г ;
• Ввод исходного кода. Когда «скелет» приложения готов,
остается нарастить на него плоть. Эту задачу решает исход­
ный код, который должен обеспечить выполнение необхо­
димых функций, ради которых создается программа. В роли
основного инструмента на этом этапе выступает редактор
кода (см. 4.1.6).
Программный код размещается в модулях. Существуют три
вида модулей, где может содержаться код (краткий обзор всех
видов модулей Visual Basic приведен в таблице 4.2):
• Ф орм а (модуль экранной ф ормы). Модуль формы содер­
жит значения свойств и код, связанный с управляющими
элементами данной формы. Форма, вероятно,
наиболее
часто используемый вид модуля.
• Программный модуль. Предназначен для кода, относяще­
гося к приложению в целом.
■
• М одуль классов. Модули классов используют в случаях,
когда требуется создать новый класс на правах определяе­
мого пользователем типа (см. 3.6), здесь содержатся объ­
явления свойств, методов и событий объектов, которые
затем можно будет объявить (создать их экземпляр) в про­
граммном модуле.
Не следует забывать, что Visual Basic предназначен для со­
здания приложений Windows. Поэтому специфика Windows не
может не наложить своего отпечатка на принципы Visual Basic.
В отличие от, скажем, MS DOS, операционная система Win­
dows представляет собой среду, управляемую событиями. Это
означает, что Windows-программа не может просто выпол­
няться сама по себе — она должна реагировать на события и
не делать ничего сверх этого. Поэтому любая программа, со- |
зданная с помощью Visual Basic, будет программой, ориенти­
рованной на обработку событий, и вы не должны забывать,
что любой ваш код в конечном счете окажется кодом, обра­
батывающим некоторое событие.
4.1.2. Пример программы
Приведенный ниже пример программы представляет собой об­
разец классического этюда типа «Привет, мир!» (считается, что
изучение любого языка программирования должно начинаться с
создания программы, которая выводит тем или иным образом со­
общение: «Привет, мир!»). Одновременно на данном примере вы
ознакомитесь с принятым в этой книге способом подачи приме­
ров программ. Просто выполняйте инструкции процедуры пункт
за пунктом.
Процедура. Привет, мир!
1. Запустите Visual Basic.
2. Создайте новый проект типа Standard EXE.
3. Поместите на форму этикетку (Label) и командную кнопку
(Comm and Button). Визуальное программирование этим ис­
черпывается.
Создание программы
4
Задайте значения свойствам управляющих элементов соглас’ но таблице 4.1.Такие свойства командной кнопки и этикетки,
как Caption (Надпись) и Name (Имя), получат значения авто­
матически при помещении управляющих элементов на форму
— это будут Command 1 и Label 1. Вообще говоря, значение
свойства Name также следует изменить (имя элемента долж­
но соответствовать его назначению, иначе вы можете запу­
таться). Но в данном случае в целях упрощения задачи табли­
ца 4.1 оставляет свойство Name обоих элементов неизменным.
Ш
5. Откройте окно кода двойным щелчком на командной кнопке
Нажми меня!. Последний этап создания программы на языке
Visual Basic — ввод исходного кода программы.
6. В окно кода будет автоматически помещена заготовка проце­
дуры обработки события Click для элемента Command*!. Вве­
дите следующий исходный код:
P riv ate
Sub Coitim andl_Click ()
-j
Labell.Visible = Not Labell.Visible
End Sub
,ч ■ - -
.
• -!•
J;
7. Сохраните проект.
.
8. Запустите программу (R un/S tart или [F5]).
9 Щелкните несколько раз на кнопке Нажми м еня! и закройте
окно приложения (кнопка закрытия окна находится в верхнем
правом углу).
Forml
*
'
.
П р и в е т ; м йр!
* :
.
■* *
■
шя
S f lf C V v V I
шШШ
шВШ
іЖ
о п и Д І
i
Н аж м и м еня!
ijjjLІЧдЩ!]
139
Создание программы
Таблица 4.1. Таблица свойств объектов в примере программы
Свойство
Значение
Form
Name
Forml
Label
Name
Labell
Caption
Привет, мир!
Name
Commandl
Caption
Нажми меня!
CommandButton
Примечание
■
В примерах программ, которые вы встретите в этой книге,
будут присутствовать таблицы такого же вида, как и таблица
4.1. Это таблица свойств, которой необходимо руководство­
ваться при работе над экранной формой. Первый столбец
такой таблицы содержит названия объектов, которые необхо­
димо поместить на форму (используются английские назва­
ния, т. е. текст всплывающих подсказок, которые появляются
рядом со значком соответствующего элемента в окне коллек­
ции инструментов, если задержать над ним указатель мыши).
Например, этикетка обозначена в таблице Label и именно по
такой подсказке можно найти значок этикетки. Во втором
столбце таблицы перечислены имена свойств, которые необ­
ходимо изменить — именно эти имена вы найдете в окне
свойств для соответствующего элемента. И, наконец, в тре­
тьем столбце перечислены значения свойств, которые необ­
ходимо им присвоить. Первым свойством любого элемента
является его имя (Name). Важно не путать имя и надпись
(Caption): надпись пользователь видит на изображении эле­
мента на экране, а по имени к этому элементу обращаются в
программном коде. Таблица свойств в совокупности с рисун­
ком, изображающим окно приложения, дает достаточно ин­
формации для того, чтобы читатель мог «пройти» этап визу­
ального программирования примера программы.
Создание программы
отладки
ояесь М Ы п о
------------------о
тестирования. Они подробно изложены в разделе 4.2.
А
4.1.3. Соглашение о коде
В мире программирования существуют общие правила, которых
стараются придерживаться все программисты, независимо от ис­
пользуемых языка и среды разработки. Эти правила касаются на­
писания программного кода (исходного текста программы) и
имеют целью повысить его «прозрачность», легкость для чтения,
и в конечном счете снизить число ошибок.
Обзор. Правила, которых следует придерживаться
при вводе кода
S5 Следует стремиться к тому, чтобы код был самодокументи рованным. Необходимо делать код как можно более про­
стым и «прозрачным» и обязательно снабжать его коммен­
тариями.
• Каждая процедура или функция должна сопровождаться
комментарием, поясняющим, что эта функция или процеду­
ра делает. Необходимо комментировать смысл и назначе­
ние параметров, а также любые особенности реализации,
кроме очевидных.
• Комментировать следует также объявление тех перемен­
ных, которые играют сколько-нибудь существенную роль в
работе программы.
• Наконец, все фрагменты кода, важные для понимания алго­
ритма работы программы, тоже должны быть прокомменти­
рованы.
л
л- ' псй'-^г^Ш Собственно код должен быть отформатирован так, чтобы про­
яснять структуру и логику выполняемых действий. Это дости­
гается вставкой пустых строк и регулированием отступа. Ниже
следуют два примера: это один и тот же код, только по-разному отформатированный.
Создание программы
_______________________ ____ _________
'Первый пример - вам что-нибудь понятно?
If (Д о ж д ь ) Then
If (П р о м о к ) Then
MsgBox "Идет дождь, и вы промокли — забыли зонтик"
12XS6
MsgBox "Идет дождь, но вы не промокли — зонтик с вами"
End If
,ч.
Else
MsgBox "Хорошая погода!"
End If
'Второй пример — вот теперь все ясно!
If (Д о ж д ь ) Then
If (П р о м о к ) Then
MsgBox "Идет дождь, и вы промокли - забыли
зонтик"
MsgBox "Идет дождь, но вы не промокли — зонтик
с вами"
End I f
Else
MsgBox "Хорошая погода!"
End If
■
■
Функционально или логически связанные переменные и кон­
станты следует объединять в группы. Глобальные константы
вообще желательно объявлять в отдельном модуле.
При объединении строк используйте операцию & вместо +,
это избавит от недоразумений при манипуляциях со значения­
ми типа Variant. Вот простейшая иллюстрация:
vntNuml = "2154.78"
vntNum2 = 45
vntRes = vntNuml + vntNum2 'Результат: 2199.78
vntRes = vntNuml & vntNum2 'Результат: 2154.7845
Создание программы
142
При вводе строковых значений разбивайте длинные строки на
более короткие. Строковые значения могут быть очень длин­
ными (при вызове API-функций или, например в случае SQLвыражений), и желательно, чтобы строка была видна в окне
кода целиком.
Dim strLongString As String
strLongString = "Эта строка предназначена для окна " __
& " сообщения." Однако она так длинна, что вряд ли " _
& " будет видна полностью в окне редактора кода. " __
& " Поэтому следует разбить ее на несколько строк, " __
& " объединением которых можно получить требуемое " __
& " строковое значение. Теперь вся строка будет " _
& " видна в окне редактора кода полностью!”
MsgBox strLongString
jSJ і і
4.1.4. Тактика программирования
Здесь мы рассмотрим три темы, имеющие отношение к процессу
создания программ с помощью Visual Basic. Есть много способов
решить одну и ту же задачу, но не все они одинаково удачны. Про­
граммисту, работающему над проектом в среде Visual Basic, сле­
дует учитывать ряд обстоятельств, влияющих на качество конеч­
ного продукта, и придерживаться ряда правил, позволяющих это
качество повысить. Речь идет, во-первых, об ошибках в програм­
ме и о том, как их избежать. Затем, если программа предназна­
чена для использования многими людьми, ее стоит оптимизиро­
вать — это будет второй темой. И, наконец, мы рассмотрим во-просы совместимости между Visual Basic, VBA и VBScript.
Обзор. Как избегать ош ибок
Ш Не жалейте времени на планирование проекта. Заранее в точ­
ности определите, что программа должна делать и как она
должна себя вести. Продумайте каждое возможное событие
и реакцию на него. И только после этого приступайте к созда­
нию программы.
,
■ Используйте всегда, когда это возможно, явно заданные
ссылки на объекты, определяемые типами Variant и Object.
Создание программы
________________________________ 21?
Іф Ш
Точное описание соответствующего класса можно найти в каталоге объектов.
■ Придерживайтесь соглашений об именах и о коде. Это осо­
бенно важно при работе над коллективным проектом.
■ Всегда помещайте оператор Option Explicit в начало любого
модуля, чем избавите себя от ошибок, связанных с неверными
именами переменных и управляющих элементов. Оператор
Option Explicit будет автоматически помещаться в раздел гло­
бальных объявлений каждого созданного вами модуля, если
вы установите флажок Require Variable Declaration на вклад­
ке Editor диалога O ptions (открывается одноименной коман­
дой меню Tools).
Обзор. О птимизация
■
Требования к программе не всегда сводятся к тому, чтобы она
делала нечто и неким образом себя при этом вела. Очень
часто программа должна «вписываться» также в условия, ка­
сающиеся скорости выполнения и/или объема используемой
памяти. Чтобы удовлетворять такого рода требованиям, код
программы зачастую нуждается в оптимизации.
в Когда код программы уже написан, оптимизацию начинать
поздно. Начинать следует еще на этапе планирования, напри­
мер, выбирая алгоритмы обработки данных, необходимо учи­
тывать их скоростные параметры.
■ При оптимизации важно правильно определить цель. Меры,
которые можно принять для увеличения скорости работы про­
граммы, отличаются (а иногда и прямо противоречат) мерам,
ведущим к экономии памяти. Лишь в некоторых случаях и в
некоторой степени удается улучшить и то, и другое.
■ Приступая к оптимизации, следует ясно представлять себе, в
чем состоит проблема и что следует модифицировать, чтобы
ее устранить. При этом, конечно, нельзя забывать о функци­
ональных возможностях программы — они не должны страдать
от оптимизации.
■ Никому не нужна оптимизация ради оптимизации. Бывает, что
результат не стоит цены, которую приходится за него платить.
Создание программы
144
Не стоит, например, стремиться к высокой эффективности ал­
горитма поиска, если речь идет о поиске в небольшом мас­
сиве данных. И напротив, если программа должна работать с
базой данных большого объема, то алгоритмам доступа к дан­
ным следует уделить максимальное внимание. Всегда следует
соотносить время, потраченное на оптимизацию, с ожидае­
мым выигрышем.
Обзор. Оптимизация скорости
9 Имея дело с программами, работающими в среде Windows,
трудно говорить о скорости, как таковой. Следует различать
три скорости: реальная скорость программы, скорость работы
интерфейса пользователя и субъективная скорость, т. е. впе­
чатление о скорости, которое возникает у пользователя.
Я Реальная скорость программы — это скорость, с которой
выполняется ее код. Для ее увеличения существует ряд воз­
можностей.
^ V’
• Следует избегать применения переменных типа Variant.
Ес/1и нет особых причин для выбора типа Variant, исполь­
зуйте только простые типы — обращение к ним происходит
быстрее и, кроме того, это дает возможность избавиться от
неявных преобразований типов, которые также расходуют
время.
• Для математических вычислений наиболее подходящим
численным типом является тип Long — он соответствует
формату чисел, с которым работает процессор, и вычисле­
ния с ним выполняются с максимальной скоростью. Если тип
Long по каким-то причинам не подходит, попробуйте ис­
пользовать Byte или Integer, прежде чем переходить к дру­
гим вариантам.
•••'
• Значения часто используемых свойств следует передавать
в переменные, особенно это важно, если значение свойства
используется в цикле —обращение к значению переменной
происходит существенно быстрее.
• Для фиксированных значений следует использовать имено­
ванные константы.
Создание программы
145
• Вместо того, чтобы выделять некоторый код в отдельную
процедуру, можно просто поместить его в то место, где он
требуется. Этим вы экономите время на вызов процедуры
и возврат из нее— в циклах такая экономия может оказаться
весьма существенной. Если речь идет о часто используемом
коде, то вы при этом жертвуете прозрачностью текста ради
скорости.
• При передаче параметров процедуре или методу отдавайте
предпочтение способу ByVal (передача по значению). По
умолчанию в Visual Basic принят способ ByRef (передача по
ссылке).
■ С корость работы интерф ейса с той точки зрения, с которой
ее оценивает пользователь, выражается в видимых признаках
работы программы, т. е. в том, насколько быстро элементы
окна приложения реагируют на действия пользователя. В гра­
фической среде Windows это представляет собой проблему
само по себе.
• Если в программе используются графические методы, то
большое влияние на скорость их работы оказывает значение
свойства C lipC ontrols (им обладают форма и элемент P ic­
ture). Чтобы графические методы не перерисовывали уп­
равляющие элементы целиком, а ограничивались только из­
менившейся их частью, свойство C lipC ontrols формы долж­
но содержать значение False (по умолчанию его значение
True).
• Перед тем как несколько раз подряд изменить значение
свойства видимого управляющего элемента, его можно от­
ключить. При этом он не будет перерисовываться каждый
раз при новом значении свойства — таким образом можно
достичь некоторой экономии времени, которая в случае
больших по площади элементов или большого числа при­
сваиваний может оказаться значительной.
• Наконец, способ, который позволяет убить сразу двух зайцев, — повысить скорость и сократить требуемую память.
Он очень прост: везде, где это возможно, используйте вмес­
то картинки P ictureB ox графический образ Im age. В боль-
146
Создание программы
шинстве случаев его «способностей» вполне достаточно, а
ресурсов он расходует значительно меньше.
щ Субъективная скорость определяется впечатлением о ско­
рости работы программы, которое возникает у пользователя.
Многие знают, как может раздражать медленно реагирующая
программа и как приятно работать с программой, которая не
заставляет себя ждать. Впечатления — не та область, где воз­
можны точные измерения и конкретные алгоритмы, но все же
некоторые меры к увеличению субъективной скорости про­
граммы принять можно:
1
•щ
• Следует стремиться к тому, чтобы (насколько позволяет па­
мять) все формы приложения загружались (но не показыва­
лись на экране) сразу при старте программы. Пользователю
во время загрузки следует показывать какую-нибудь застав­
ку с картинкой. Стартовым объектом такой программы
должна быть процедура Main(), а первой загруженной (и
сразу показанной) формой — форма, содержащая заставку.
• Не выгружайте формы, а делайте их невидимыми (метод
Hide вместо метода Unload). Загрузка и выгрузка формы
представляет собой сравнительно длительный процесс. Ко­
нечно, такой подход увеличивает объем памяти, потребляе­
мый программой.
?
• Если в процессе своей работы программа должна загружать
данные из файлов, то следует за один «сеанс» обратиться
к как можно большему числу файлов — одна длительная за­
держка раздражает меньше, чем постоянно случающиеся
короткие.
Обзор. О птим изация объема памяти
Ш Другой целью оптимизации может быть уменьшение объема
памяти, потребляемого программой. Методы, которыми это
достигается, в значительной степени противоположны мето­
дам оптимизации скорости.
Ш Следует минимизировать число форм, одновременно находя­
щихся в памяти, т. е. загружать каждую форму по мере необ­
ходимости и сразу выгружать, как только в ней отпадет нужда.
Создание программы
147
Следует минимизировать количество управляющих элементов
на той форме, на которой их размещено больше всего.
■ Если текстовое поле используется только для вывода текста,
замените его этикеткой.
■ Заменяйте, где это возможно, Variant-переменные на пере­
менные простых типов. Например, переменная типа Variant,
содержащая значение типа Integer, занимает в памяти^ 16
байт, в то время как переменная типа Integer— только 2 байта.
■ При использовании точечных рисунков загружайте их из гра­
фических файлов в процессе выполнения программы, а не по­
мещайте на форму на этапе визуального программирования.
Если рисунок требуется использовать многократно, загрузите
его в невидимый элемент Image.
Примечания
■
■
Конечно, приведенный краткий обзор не исчерпывает всех
возможностей оптимизации. Список полезных советов на эту
тему мог бы быть бесконечным.
Данные типа Variant неоднократно уже подвергались заслу­
женной критике. Однако следует помнить, что гибкость Vari­
ant-переменных способна иной раз сослужить неплохую служ­
бу. Не исключено, что благодаря переменной типа Variant вам
удастся реализовать такой алгоритм обработки данных, кото­
рый одновременно повысит скорость, уменьшит объем по­
требляемой памяти и сократит «поле» для ошибок.
Обзор. Совместимость с VBA и VBScript
■
VB и VBA. Visual Basic и «Visual Basic для приложений» обла­
дают многими общими элементами. Это выражается, напри­
мер в коде, который содержится в библиотеке VBA5.DLL.
Кроме того, отдельные управляющие элементы, которые
можно включить в состав коллекции инструментов, находятся
в файле VB5.0LB. Содержимое этих файлов можно изучить в
каталоге объектов (O bject Browser). Таким образом, сущест­
вует неполная совместимость на уровне исходного кода
между VBA и Visual Basic.
Создание программы
148
VB и VBScript. Язык VBScript является подмножеством языка
visual Basic и соответственно VBA. Программы на языке
могут
и предназначены для описания сценариев взаимодеиствия
fiDOvaepa и Internet. Исходный код Visual Basic может быть ис­
пользован для VBScript-программы, при этом следует исклю­
чить файловый ввод-вывод, сложные типы и другие элементы,
поддержи
V
I
Q
U
n
i
v
*
I
г1—
'
_____
____ —
_
а
I
м
4
л
ю
л
г
ч
^- ч
4.1.5. Проект
ГЮоект является основной структурой, организующей модули Vis­
ual B asic- программы в нечто целое. Любая программа на языке
Visual Basic от крохотной программки-упражнения до исполи­
нского приложения может быть создана только с привлечением
понятия проекта. Проект позволяет быстро ориентироваться в
модулях и формах и также быстро получать к ним доступ.
Обзор. Проект
Ш Проект представляет собой реестр файлов, которые требуют­
ся для генерации исполняемого файла приложения, он содер­
жится в файле проекта (файл с расширением VBP) и доступен
в окне проекта (см. ниже).
Ш Visual Basic позволяет работать одновременно с несколькими
проектами. Для удобства их можно объединить в группу. Груп­
па проектов может быть сохранена и загружена как единое
целое (файлы с расширением VBG).
„
• Каждый проект в составе группы представлен собственным
файлом проекта.
>*.*v и av
• В окне проекта каждый из проектов группы изображен от­
дельной древовидной структурой, где «ветвями» дерева яв­
ляются модули и формы, относящиеся к проекту.
• Чтобы создать группу проектов, необходимо открыть один
из проектов, затем командой Add P ro je ct меню File доба­
вить к нему все остальные требуемые проекты. При этом
речь может идти как о существующих проектах, так и созда-
Создание программы
______________________________________
ваемых, диалог Add P ro je ct позволяет также выбрать тип
нового проекта. Группа начинает свое существование после
добавления первого проекта.
• Все команды, позволяющие включить в состав текущего
проекта новые модули или формы, собраны в меню P roject
(см. 2.4.4).
• Проект состоит из модулей и форм. Наиболее часто исполь­
зуемым элементом проекта является форма. Именно на эк­
ранных формах основывается пользовательский интерфейс
стандартного Windows-приложения. Модули проекта могут
принадлежать к одному из нескольких видов. Виды модулей
и краткие пояснения к ним приведены в таблице 4.2.
■ Диалог P roject P roperties (Свойства проекта) позволяет из­
менить конфигурацию текущего проекта. Он состоит из сле­
дующих вкладок:
• General (Общие). Здесь можно задать имя и вид проекта.
Комбинированное поле S trartup O bject (Стартовый объект)
содержит список элементов проекта, которые могут высту­
пить в качестве стартовых. Это может быть одна из форм
или процедура Маіп(), которая в таком случае должна быть
объявлена в программном модуле. В случае когда в качест­
ве стартового объекта выбрана процедура Main(), ни одна
из форм программы не загрузится автоматически загруз­
ка форм должна быть явным образом предусмотрена в коде
процедуры Main(). Это, в частности, позволяет вывести на
экран форму-заставку и продолжать загрузку остальных
форм, не показывая их.
• М аке (Сборка). Под сборкой проекта имеется в виду созда­
ние исполняемого файла на основе откомпилированных мо­
дулей. Параметры сборки, которые позволяет изменить эта
вкладка, относятся к номеру версии и имени приложения.
• Compile (Компиляция). Здесь можно выбрать вариант ком­
пиляции — будет ли программа компилироваться в Р-код
или в машинный код. В прежних версиях Visual Basic воз­
можна была только компиляция в P-код (псевдокод), кото­
рый представляет собой промежуточную ступень между ре­
150
Создание программы
жимом интерпретации исходного кода и машинным кодом.
Исполнение программы в P-коде происходит в режиме
«полуинтерпретации», в то время как машинный код содер­
жит непосредственно машинные команды процессора. Ма­
шинный код выполняется быстрее, зато P-код занимает
меньше места. В случае если программист выберет вариант
компиляции в машинный код (вариант по умолчанию), он
сможет выбрать также вариант оптимизации кода.
• Com ponent (Компонент). Эта вкладка используется при со­
здании ActiveX-элементов и позволяет изменять некоторые
параметры создаваемого элемента.
Таблица 4.2. Виды модулей Visual Basic
II D
Вид модуля
Описание
|
Модуль стандартной
формы (*.FRM)
В FRM-файлах содержится описание
стандартных форм, дочерних MDIформ, а также специальных диалогов.
I
Модуль материнской
MDI-формы (*.FRM)
Материнская MDI-форма (MDIприложение), т. е. главная форма
приложения, реализующего
многодокументный интерфейс MDI,
также содержится в файле с
расширением FRM.
Программный модуль
(*.BAS)
Программные модули Visual Basic
предназначены для размещения
исходного кода, общего для всех форм
проекта (глобальные процедуры
и функции, объявление типов и др.)
Модуль классов (*.CLS)
Этот вид модулей предназначен для
определения классов и интерфейсов
классов. Необходим для создания
многократно используемого кода.
Документ пользователя
(*.DOB)
Может быть добавлен к проекту только
в профессиональных вариантах.
Позволяет создавать программы для
среды Internet Explorer.
|
I
151
Создание программы
Вид модуля
Описание
Страница свойств (*.PAG)
Применяется при создании
управляющих элементов, позволяет
создавать для них свойства._______
Управляющий элемент
пользователя (*.CTL)
Созданный пользователем управляющий
элемент, предназначенный для
использования в программах на Visual
Basic..
f?
OCX-элемент (*.ОСХ)
ActiveX-элемент, предназначенный для
использования в других программах и
на других платформах.
Обзор. О кно проекта
Окно проекта открывается командой P roject Explorer меню
View и отображает состав проекта, предоставляя возможность
доступа ко всем его элементам. Окно проекта может отобра­
жать группу проектов. Открыть его можно также кнопкой на па­
нели инструментов или сочетанием клавиш [Ctrl]+[R].
Окно проекта, изображенное на рисунке, состоит из двух об­
ластей.
• Панель инструментов. Три кнопки этой панели предназна­
чены для выполнения простейших манипуляций с элемен­
тами проекта. Первая слева открывает окно кода, соответЗначок просмотра объекта
Значок просмотра кода
Project - Project!
Порядок в списке
Project 1 (Helo.vbp)
■Q-f Forms
UQ, Forml (Hello.frm)
Деревовидная структура проекта
Создание программы
152
ствүющее выделенному объекту проекта. Вторая кнопка от­
бы вает и показывает сам объект (например, окно формы).
Третья кнопка изменяет порядок элементов в списке
с
группировкой модулей по типам или без нее.
С писок элем ентов проекта. Древовидная структура спис­
ка отображает элементы проекта и сам проект. Выделив
один из элементов, можно затем воспользоваться кнопками
панели инструментов для доступа к соответствующему мо­
дулю или форме. Двойным щелчком на элементе списка
можно открыть модуль непосредственно. Значки «плюс»(+)
в древовидной структуре позволяют развернуть содержа­
щиеся в узле «ветви» более низкого уровня. И наоборот,
щелчок на значке «минус» (-) сворачивает узел к более высокому уровню иерархии.
Окно проекта позволяет открыть два контекстных меню, пред­
назначенных для выполнения различных манипуляции с проек­
том и его элементами. Оба открываются нажатием на правую
кнопку мыши. Которое из контекстных меню будет открыто, за­
висит от места, над которым находится указатель мыши - над
именем проекта или одним из его элементов.
Назначение большинства пунктов контекстных меню окна про­
екта ясно из их названий, которые совпадают с названиями
пунктов системы главного меню.
Таблица 4.3. «Быстрые» клавиш и
Сочетание клавиш
Действие
[Enter]
Открывает или делает видимым окно,
предназначенное для редактирования
выделенного элемента.
[Shift]+[Enter], [F7]
Загружает выделенный файл в окно кода
[Home]
Выделяет первый элемент списка
[End]
Выделяет последний элемент списка
[стрелка вправо]
Разворачивает узел списка, служит для
навигации вправо и вниз.
Сочетание клавиш
Действие
[стрелка влево]
Служит для навигации влево и_вверх,
сворачивает ранее развернутый узел.
[стрелка вверх]
Служит для навигации вверх по списку
[стрелка вниз]
Служит для навигации вниз по списку
4.1.6. Редактор формы
■ Краткий обзор: Редактор формы
Редактор формы является основным инструментом в процессе
визуального программирования и одновременно логическим
центром философии Visual Basic.
■ При работе в окне редактора формы полезным бывает от­
крыть окно вида формы на экране (открывается командой
Form Layout W indow меню View).
Редактируемая форма
t. Project 1 - F o m l (Form)
янияяняияиввжшяяяя
I «. Form)
П р и в е т, м и р !
Управляющие элементы
Н ажим и в н я і
размерный маркер
В нем помещено символическое изображение экрана монитора
с размещенной на нем формой, и при всех изменениях формы в
154
Создание программы
Form Layout
процессе редактирования симво­
лическое изображение окна при­
ложения на экране соответственно
меняется. Все относительные раз­
меры соблюдаются. С помощью
контекстного меню в окне вида
формы можно включить вспомога­
тельные контуры, показывающие
вид экрана при тех видеорежимах,
которые обеспечивают меньшее
разрешение, чем текущий. Форма изображается в стартовой по­
зиции, т. е. в положении, которое будет иметь место после старта
программы. Если проект включает в себя несколько форм, то каж­
дая из них будет изображаться в окне вида формы на экране в
своей стартовой позиции.
Окно редактора формы снабжено двумя контекстными меню.
Первое открывается щелчком правой кнопкой мыши, когда ука­
затель находится на свободном месте формы, второе — когда
указатель находится на одном из управляющих элементов. Оба
содержат стандартные команды из системы главного меню.
Управляющие элементы помещаются на форму с помощью
окна коллекции инструментов (см. ниже).
Окно редактора формы поддерживает операции буфера Win­
dows. Можно выделять элементы и группы элементов, копиро­
вать, вырезать и вставлять их. При этом следует учитывать одну
особенность. При попытке вставить скопированный элемент Vis­
ual Basic выдаст запрос—намерены ли вы создать массив управ­
ляющих элементов. Такой запрос появляется во всех ситуациях,
когда на форме могут оказаться два управляющих элемента с
одним именем. Следует ответить отрицательно, и вставленный
элемент будет помещен в верхний левый угол формы.
Чтобы облегчить размещение управляющих элементов на
форме, используется сетка (Grid). Шаг сетки и режим выравни­
вания по сетке (автоматическое или нет) выбираются на вклад­
ке General диалога O ptions.
Перемещать элементы по форме удобнее всего мышью.
■
размеры формы и размещенных на ней элементов нетрудно из­
менить. Для этого следует выбрать форму или выделить эле­
мент и, поместив указатель мыши на один из размерных мар­
керов (темные прямоугольники вокруг выделенного объекта) и
нажав левую кнопку, растянуть объект до требуемых размеров.
■ Различные команды для манипуляций с управляющими эле­
ментами на форме собраны в меню Form at (см. 2.4.5). Одна
группа команд предназначена для разного рода позициониро­
вания элементов, другая—для управления размерами элемен­
тов. Большинство команд относится к выделенной группе эле­
ментов.
■ Используя команду Lock C ontrols (Блокировка элементов на
форме), можно сделать невозможным изменение размеров и
позиций элементов на форме. Это требуется, чтобы не изме­
нить что-нибудь нечаянно на полностью готовой форме.
Примечание
Заблокированные элементы можно перемещать навигационными
клавишами в сочетании с клавишей [C trl], аналогично менять раз­
меры заблокированных элементов можно с помощью клавиш на­
правления в сочетании с клавишей [Shift]. Разблокировать эле­
менты можно повторным выполнением команды Lock C ontrols.
Обзор. Коллекция инструм ентов
Окно коллекции инструментов — важнейший инструмент редак­
тора формы. Оно содержит кнопки (значки) управляющих элемен­
тов, которые можно поместить на форму.
■ Сразу после создания нового проекта коллекция инструмен­
тов содержит только стандартный набор элементов. Эти уп­
равляющие элементы входят в состав Visual Basic. Все другие
управляющие элементы (внешние элементы, код которых на­
ходится в OCX-файлах) должны быть включены в состав кол­
лекции инструментов. Причем включение это будет иметь
силу только для данного проекта. Делается это с помощью
диалога C om ponents (одноименная команда меню P roject).
156
Создание программы
Кнопка переключения групп
Указатель
Этикетка
Рамка
Поле флажка
Комбинированное поле
Горизонтальная
полоса прокрутки
Таймер
Список каталогов
Фигура
Графический образ
Картинка
Текстовое поле
Командная кнопка
Позиция переключателя
Поле списка
Вертикальная полоса прокрутки
Слисок дисковых устройств
Список файлов
Линия
Данные
Если в составе коллекции инструментов окажется слишком
много элементов, их можно разбить на группы. Стандартные
элементы объединены в группу General. В каждый момент вре­
мени в окне коллекции инструментов может быть доступна
только одна из групп. Кнопка переключения между группами
расположена в верхней части окна. Команды для работы с груп­
пами находятся в двух контекстных меню. Первое открывается
щелчком правой кнопкой мыши, когда указатель находится в
любом месте окна коллекции инструментов, кроме кнопки
переключения между группами, второе — когда указатель на­
ходится как раз на этой кнопке.
Примечание
В главе 6 приведено описание стандартных управляющих эле­
ментов и примеры программ с их использованием. Кроме
того, детальную информацию об управляющих элементах
можно найти в справочной системе Visual Basic (Books Online).
157
■
Прежде чем управляющий элемент станет доступным в окне
Com ponents, он должен быть зарегистрирован в системе. Для
многих управляющих элементов эта процедура выполняется
автоматически, при установке содержащего их программного
обеспечения. Если это не так, вам придется зарегистрировать
элемент «вручную». Эту задачу решает исполняемый файл
regsvr32.exe, который находится в каталоге SYSTEM (подка­
талог каталога WINDOWS). Следует запустить этот файл (с по­
мощью Проводника или в DOS-окне), дав ему в качестве пара­
метра имя файла, в котором содержится управляющий элемент:
regsvr32 И м яФ айла
Процедура. Как поместить управляю щ ий элемент
на ф орму
1. Выполните одиночный щелчок на значке того элемента в окне
коллекции инструментов, который вы собираетесь поместить
на форму.
2. Поместите указатель мыши на то место формы, где должен
располагаться управляющий элемент, нажмите левую кнопку
мыши и, не отпуская кнопки, растяните появившийся прямо­
угольник до требуемых размеров. После этого отпустите кноп­
ку мыши — элемент займет на форме участок, соответствую­
щий размерам прямоугольника.
3. Появившийся на форме управляющий элемент можно пере­
тащить мышью на другое место, а также можно изменить его
размеры.
4. Окно свойств будет отображать свойства только что помещен­
ного на форму элемента, и вы можете немедленно изменить
значения тех свойств, которые в этом нуждаются.
Примечание
■
Если выполнить двойной щелчок на значке элемента в окне
коллекции инструментов, то соответствующий элемент будет
автоматически помещен в центр формы.
Создание программы
158
Процедура. Как вклю чить управляю щ ий элемент в состав
коллекции инструментов
1. Откройте окно диалога Com ponents одноименной командой
меню Project.
.\
2. Вкладка C ontrols содержит список управляющих элементов,
зарегистрированных в системе, — щелчком мыши поставьте
пометку (галочку) слева от имени элемента, который вы хотите
включить в состав коллекции инструментов.
3. Щелкните на ОК, и значки всех помеченных элементов появят­
ся в окне коллекции инструментов.
......
I J
4 Теперь вы можете поместить любой из «новых» элементов на
форму точно так же, как вы это делали со стандартными уп­
равляющими элементами.
Таблица 4.4. «Быстрые» клавиши
Сочетание клавиш
Действие
[F7]
Открывает окно формы (окно редактора
іюрмы) для текущего модуля формы
[Ctrl]+ [С]
Копирует выделенный элемент в буфер
обмена Windows.
ИРЯИ
[Ctrl]+[X]
Вырезает (переносит) выделенный
управляющий элемент в буфер обмена
Включает указанный элемент в состав
выделенной группы элементов или
исключает ранее включенный.______
Нажатие мыши
и растягивание
прямоугольника
Выделяет все элементы, заключенные
в прямоугольнике.
[Ctrl]+[E]
Вызов редактора меню.
[Ctrl]+[J]
Выводит выделенный элемент на передний план.
[Ctrl]+[K}
Убирает выделенный элемент на задний план
[ОгІ]+[одна из нави
гационных клавиш]
Перемещает выделенный элемент на один
шаг сетки в указанном направлении.
159
Создание программы
Таблица 4.5. Панель инструм ентов редактора ф ормы
и значки команд MeHicFormat
Значки и команды
Действие
Выводит выделенный элемент
на передний план.
Убирает выделенный элемент на задний
план.
Sgt Tops
•ofr Middles
oOi Bottoms
Horizontally
Vertically
Команды подменю A lign меню Format
предназначены для выравнивания
элементов в составе выделенной группы
(Lefts — выравнивает левые края
выделенных элементов по последнему.
Centers — выравнивает центры по
горизонтали. Rights — выравнивает
правые края. Tops — выравнивает
верхние края по вертикали. M iddles выравнивает центры по вертикали.
Bottom s — выравнивает нижние края.
To Grid — выравнивает по сетке).
Выполняют центровку выделенных
элементов по вертикали или по
горизонтали.
Три команды этого подменю
выравнивают размеры выделенных
элементов по последнему соответственно по ширине, высоте и по
обоим измерениям.
Блокирует/разблокирует управляющие
элементы на своих местах.
Создание программы
4.1.7. Окно свойств
После того как управляющие элементы размещены на форме, не­
обходимо изменить значения некоторых их свойств. Это делается
с помощью окна свойств (P roperties W indow).
Ш Окно свойств состоит из трех составных чэстей, две из кото­
рых доступны всегда, третью же можно открыть, используя
контекстное меню.
Properties - Labell
Alphabetic ]
aglcon
• В верхней части окна свойств находится свернутый список,
который позволяет выбрать любой из элементов текущей
формы или саму форму. Свойства выбранного объекта ото­
бражаются (и доступны для изменения) в рабочей области
окна.
• Рабочая область окна свойств состоит из двух вкладок —
A lphbetic и C ategorized, отображающих набор свойств
элемента соответственно в алфавитном порядке или по ка­
тегориям (но в любом случае свойство Name будет пер­
вым). В обоих вариантах рабочая область состоит из двух
столбцов. Левое поле содержит имя свойства, правое — его
значение.
V;'■
'>г%
Создание программы
161
• Третья часть окна свойств может быть включена или отклю­
чена и отображает пояснение текущего свойства.
В Окно свойств открывается командой P roperties W indow меню
View или щелчком на соответствующей кнопке панели инстру­
ментов или нажатием клавиши [F4].
В Изменить значение свойства можно несколькими способами:
• Просто ввести с клавиатуры значение в правое поле окна
свойств.
• Некоторые свойства позволяют выбрать свое значение из
списка. Можно развернуть список и выбрать значение щелч­
ком или двойными щелчками на свернутом списке переби­
рать значения последовательно.
• Для выбора значения некоторых свойств предусмотрены
диалоги (выбор файла или цвета). В этом случае в правой
части поля значения, как только оно становится текущим,
появляется кнопка с тремя точками. Щелчком на кнопке
можно открыть соответствующий диалог.
В Контекстное меню в окне свойств содержит три команды, одна
из них, D escription, позволяет включить или выключить под­
сказку-описание текущего свойства в нижней части окна.
Примечание
Properly Pages
C pen /S a ve As |Color J For* J Print |Н ф
j
..
DiatoglWe: f
£Ь9* P
FjleMame:
Ое<аЫ£хі:
Г
Ы£>».
M *£feSee:
[260
Flee
Fftedficfeic ; jo
f
-V,*
*
Г ” Слпсе£пог
OK ]
Отмена
Прищемить
Справка
Некоторые управляющие элементы обладают страницами
свойств, доступных для редактирования с помощью диалога
P roperty Pages (Страницы свойств), который открывается одно6 Заказ 3337
Создание программы
командой меню View или сочетанием клавиш
именной
H f t H [ F 4 ] Рисунок изображает страницы свойств управляюще­
го элемента CommonDialog (Общий диалог, см. 6.1.4).
Таблица 4.6. «Быстрые» клавиш и
Сочетание клавиш
стрелка вниз],
стрелка вправо]
Действие
Переход на следующее свойство
стрелка вверх],
стрелка влево]
Переход на предыдущее свойство
[Alt]+[F6]
Переключение между Ц
которые были текущими перед этим.
Выход из окна свойств.
[Ctrl]+[Z]
Откат последних изменений в поле
значения свойства.
-
[Двойной щелчок]
Перебор значений в свернутом списке
или выделение содержимого текстового
поля.
4.1.8. Редактор кода
Ввод программного кода и все манипуляции с ним осуществляются в Visual Basic с помощью редактора кода.
Обзор. Редактор кода
Ш Окно редактора кода включает в себя следующие элементы.
• Два комбинированных поля в верхней части окна помогают
ориентироваться в процедурах. Левое позволяет выбрать
управляющий элемент или форму, правое содержит список
событий, возможных для выбранного в левом поле объекта.
Если выбрано имя объекта и имя события, то текущая по­
зиция курсора перемещается на код процедуры, обрабаты­
вающей данное событие. Если такой процедуры в модуле
нет, то предварительно будет создана ее «заготовка».
Создание программы
_________
Панель точек разрыва
163
Список событий
Я Project 1 - frmMoon (Code)
Ш j(Pcclartrtiooj?
• ЭС«
Г ^ р д К в М ІО іО І M O t e C £ X U O
О Ь М в І* ? !»
2 4 p «W fr
Option SxpLlcltl
TCSbiSM IW передач??wa
Old gRotdtoFlagl AC integer
Ola gDlroctlon If rrraqnr
— —
— ■
Ola gLoftComer, gropcorner Ad single
Ola gMidtho fMcon, днеIghtOfMoon
Oin.gmidcgeSMrink A s integer
Ola qCUR.r©nt;Moon. Ac .
__________________
Список объектов
r r i n c o sub cadstart.ClleXO
аПерек£хг>кт»
г т ш ъ а у ъ fiKot-atPF1*3 w wd/tnxc- и
•
гм » о а м и в
If gRotdtorlara = О Then
gRotitefug = 1
cadstert.cjpclon = -cron*
Klee
gRotdtoFlag = 0
cadstart.caption = *Ст«рг*
End ГГ
End Sab
__
-
Просмотр
процедур
Prlrete sub rora.LOddC)
gRotdteFlag = 0
gCu rr entKoon = 0
---- ----
______________
Общий просмотр
Основную часть окна кода занимает область редактирования,
где, собственно, и размещается исходный текст программы.
Слева от области редактирования располагается серая вер­
тикальная полоса — панель точек разрыва. Она отображает
(и позволяет изменять) набор точек разрыва, имеющихся в
программе.
В левом нижнем углу окна расположены две небольшие
кнопки. С их помощью можно переключать режимы про­
смотра текста. Если нажата левая из них, то окно отобра­
жает только процедуры, относящиеся к выбранному эле­
менту. Если правая — то весь текст модуля.
Открыть окно кода для текущего (выделенного в окне проекта)
модуля можно несколькими способами:
Щелчком на кнопке View Code в левом верхнем углу окна
проекта или командой Code меню View.
Двойным щелчком на управляющем элементе или на сво­
бодном месте формы открывается окно кода формы, при
этом текущей окажется процедура, обрабатывающая одно
из событий данного элемента. В случае формы это будет
процедура Form_Load().
И, наконец, простейший способ — нажать клавишу [F7].
Создание программы
Работая в окне редактора кода, следует помнить об одном об­
стоятельстве. Любой вводимый вами код должен принадле­
жать одной из процедур. Исключение составляют объявления
глобальных переменных, констант и АРІ-функций — их следует
помещать в начало текста, перед первой процедурой (раздел
глобальных объявлений).
/
Редактор кода предоставляет множество сервисных функций,
доступных в процессе ввода текста.
• Важнейшие функции форматирования текста доступны с
клавиатуры. Поддержаны все стандартные для среды Win­
dows операции.
• В отношении текста применима технология Drag&Drop —
выделенный фрагмент можно переносить и копировать с помощью МЫШИ.
вВ Д И ^ ,?
• Естественно, доступны все операции буфера
как внутри
текста, так и между различными окнами (и не только окнами
кода).
.‘
• Текст можно загрузить из файла командой Insert File (Вставить файл) меню Edit. Содержимое файла будет вставлено
в текущей позиции курсора.
• Существенную помощь при вводе программного кода могут
оказать сервисные функции редактора, который отслеживает
содержание вводимого текста. Если, например, ввести имя уп­
равляющего элемента и завершить его точкой, то рядом
всплывет список свойств и методов, принадлежащих эле­
менту данного типа, из которого можно выбрать желаемое.
Функции поиска и поиска с заменой также часто оказываются
полезными. Например, если потребуется изменить имя пере­
менной, то необходимо заменить имя во всех местах кода, где
оно встречается. Функция поиска с заменой делает эту задачу
тривиальной. Команды Find (Поиск), Find N ext (Продолжить
поиск) и Replace (Поиск с заменой) содержатся в меню Edit.
На вкладке E ditor диалога O ptions (открывается одноименной
командой меню Tools) можно изменить основные параметры
редактора. Вкладка E ditor Form at (Параметры текста) отвеча­
ет за режимы представления текста в окне редактора.
Создание программы
В
______ 165
Контекстное меню окна редактора (открывается по щелчку
правой кнопкой мыши) содержит команды буфера, конфигу­
рации и некоторые другие.
Примечание
Часто случается, что редактор кода вставляет в текст заготовку
процедуры, в которой вы не нуждаетесь. При двойном щелчке на
управляющем элементе формы, например, будет вставлена за­
готовка процедуры ИмяЭлемента_С Iіс к (), обрабатывающей собы­
тие Click (Щелчок). Если выбрать один из элементов списка объ­
ектов, то будет вставлена заготовка процедуры события, выбран­
ного в правом списке и т.п. Эти пустые заготовки процедур можно
смело игнорировать, поскольку компилятор не обращает на них
внимания.
Процедура. Создание процедуры общего назначения
1. Для того чтобы вставить в текст заготовку процедуры общего
назначения (т. е. процедуры, не являющейся обработчиком
событий), следует использовать диалог Add Procedure (от­
крывается одноименной командой меню Tools). Откройте
диалог Add Procedure (окно кода должно быть при этом те­
кущим).
2. В поле Name введите имя будущей процедуры.
3. Установите переключатель типа процедуры в требуемое по­
ложение.
4. Установите переключатель области видимости процедуры в
требуемое положение.
5. При желании можно установить режим S tatic, когда все объ­
явленные в коде создаваемой процедуры переменные по
умолчанию будут статическими.
6. Теперь осталось щелкнуть на О К и заготовка процедуры с вы­
бранными параметрами будет вставлена в текст.
Создание программы
Таблица 4.7. «Быстрые» клавиш и
Сочетание клавиш
Действие
Открывает окно редактора кода
Открывает каталог объектов.
tCtrl]+[F]
[Ctrl]+[H]
[Ctrl]+ [Home]
Открывает диалог Find (Поиск)
Открывает диалог Replace
(Поиск с заменой).
Переносит позицию ввода в начало текста
[Ctrl]+[End]
Переносит позицию ввода в конец текста.
[Ctrl]+ [стрелка вправо]
Выделяет слово справа от курсора.
[Ctrl]+ [стрел ка влево]
Выделяет слово слева от курсора.
Устанавливает/снимает точку разрыва
в текущей строке.
[Ctrl]+[Shift]+[F9]
Снимает все точки разрыва в модуле.
[Ctrl]+[J]
Открывает контекстное меню со списком
свойств и методов.
[Ctrl]+[Shift]+[J]
Открывает контекстное
свойств и методов.
[C trl]+[l]
Задействует всплывающую подсказку,
содержащую сведения об элементе
текста, на котором находится курсор
[C trl]+[S hift]+[l]
Задействует всплывающую подсказку,
содержащую сведения об объявлении
процедуры, в коде которой находится
курсор.
167
Создание программы
Таблица
П анель и н с тр у м е н то в ред актора кода
Значки и команды
Действие
Открывает список методов и свойств,
которые могут быть вставлены в текст
Открывает список существующих констант
которые можно вставить в текст.
Подсказка об объявлении
Показывает текст объявления текущей
процедуры.
Показывает список свойств, методой и
констант в коде модуля.
Увеличивает отступ
Уменьшает отступ
Устанавливает/снимает точку разрыва
Превращает выделенный блок
в комментарий.
Превращает выделенный блок ранее
закомментированного кода снова в
исходный код.
Устанавливает/снимает закладку в тексте
Создание программы
168
Значки и команды
Действие
Переход к следующей закладке
Переход к предыдущей закладке
Снимает все закладки в тексте.
4.1.9. Мастера
Многие приложения Windows, как и сама система Windows, в пос­
ледние годы обязательно включают в свой состав набор масте­
ров , т. е. сервисных утилит, облегчающих выполнение сложных,
но при этом типичных манипуляций. Visual Basic также содержит
команду «добрых духов», готовых взять пользователя за руку и
провести его через рутинные и утомительные процедуры. Состав
«команды» мастеров Visual Basic зависит от варианта (издания),
но два мастера присутствуют во всех вариантах — это мастер со­
здания приложений и мастер создания программ установки.
Обзор. A pplication W izard — мастер создания приложений
S
Этот мастер предназначен для создания «скелета» проекта
Visual Basic. Он позволяет снабдить заготовку проекта интер­
фейсом одной из трех разновидностей: MDI (приложение с
многодокументным интерфейсом), SDI (приложение с одно­
документным интерфейсом) и Explorer Style (приложение с ин­
терфейсом в стиле Internet Explorer). В процессе создания
проекта мастер позволяет интегрировать в него управление
параметрами, броузер, доступ к базам данных и др. Резуль­
татом работы мастера является работоспособный на уровне
интерфейса проект без специфических функциональных воз­
можностей, которые только и остается добавить программис­
ту, введя немного собственного кода.
Создание программы
169
■
Вызвать мастера создания приложении можно несколькими
способами. Неявным образом он вызывается при создании
нового проекта, когда пользователь выбирает тип проекта.
Чтобы иметь дело с мастером без посредников, его необхо­
димо включить в меню Add-Ins с помощью администратора
внешних утилит (команда Add-In Manager того же меню, вы­
берите в диалоге пункт A pplication Wizard).
К Первым шагом после запуска мастера Application Wizard
будет появление приветственной заставки, которую можно от­
менить на будущее, установив флажок Skip this screen in the
future. Навигация по экранам мастера осуществляется с по­
мощью кнопок Next (Следующий шаг) и Back (Предыдущий
шаг). Отменить все сделанное можно, используя кнопки Can­
cel (Отмена), а завершается работа мастера щелчком на кноп­
ке Finish.
Application Wizard - introduction
The Application Wizard w fl hdp you create a new
Visual Basic Application. -
You can press Back a t any Ume to change your
selections.
рЦ |
■ ''
Ф
'
Please dckN ext to beam.
■•—
"S3*,
‘W X v *
ш л]
/ А У
Г”
Skip tNs screw In the future.
.иш С» ** ф
**
Caned
■
Finish
На втором шаге мастер предлагает выбрать разновидность
интерфейса пользователя будущего приложения:
• M iltip ly Docum ent Interface (MDI). Основной формой про­
екта будет материнская MDI-форма, содержащая подчинен­
ные ей дочерние MDI-формы.
Создание программы
Sinale Docum ent Inte rface (SDI). Приложение будет содер­
жать стандартные формы, что не исключает возможности
добавить MDI-формы в последующем.
W hat type of interface w a id you Ita fo r your
Mufctpte Docuroent Interface
a m a in vdndow
(M DI)
4м* S n^e Document Interface C W ),
lv contains chid
windows
• Explorer Style. Интерфейс приложения будет выдержан в
стиле Internet Explorer.
Следующий шаг мастера посвящен системе меню будущего
приложения. Он предложит выбрать меню из ставдартного
для Windows-приложений набора (при этом кнопки Select All
и Clear All позволяют соответственно выбрать или отвергнуть
весь набор):
*
• File (Файл). Содержит стандартный набор команд для oneраций с файлами. Так же, как и для других меню, позднее
необходимо будет ввести код для каждой из команд.
• Edit (Правка). Содержит стандартные операции буфера об­
мена Windows.
• View (Просмотр). Содержит команды просмотра. Набор ко­
манд, которые поместит сюда мастер, зависит от вида при­
ложения.
' ' •*
171
Создание программы
Application W izard - Menus
у ГЩ Щ Р A . V .V ^
Н ш .
WoUki you ice menus In your appicaQon?
You can use the Menu Edftor to m odfy the menus after
th e appficabon is created.
R Edit
Г
Setect A l
View
£lear A l
W
Window
P, НФ
Cared
6
ц
ill
< Back
Finish
• W indow (Окно). Только для MDI-приложений. Содержит
стандартный набор команд для управления дочерними ок­
нами.
• Help (Справка). Сюда помещаются команды доступа к спра­
вочной системе. Конечно, код для вызова справки и саму
справку придется создать программисту.
На четвертом шаге предстоит решить вопрос об использова­
нии файлов ресурсов. Если такие файлы необходимы для ра­
боты приложения, необходимо указать, где они находятся.
Файлы ресурсов могут быть использованы, например, в при­
ложении, которое позволяет выбрать язык общения с пользо­
вателем. Чтобы не создавать несколько вариантов программы
на разных языках, используемые в интерфейсе строки можно
сохранить в файлах ресурсов для разных языков и подключать
любой из них по выбору пользователя.
Следующий шаг позволяет включить в состав будущего при­
ложения Web-броузер, дающий ему доступ в Internet (для
этого следует установить переключатель в положение Yes).
При желании можно указать в текстовом поле стартовый httpадрес, с подключения к которому будет начинаться работа
броузера.
ЮйІИИ
Создание программы
Application Wizard - Internet Connectivity
The wfeard can provide you
a custom web
Browser and can add a >*np to your home page!
~ 'v“
■»
•о
^ »ч . „
» »"»% •
- Л / Т Я Д а И Д у И ^ И п Ц Л -У * I
v"
^*“1 '? ~ » -' 1
Д и Д \ о Ц І| № г Л ^ К х З
*
Do you want your users to be аЫе to access the
Internet from your appkabon?
Шестой шаг. Здесь можно включить в состав проекта одну из
готовых форм специального назначения (заставку, например,
или диалог регистрации). Мастер предлагает на выбор четыре
специальные формы:
ч.
;л %
Splash screen at ap plicatio n s ta rt up. Заставка, появляю­
щаяся при старте приложения. Такая заставка сообщает
пользователю основные сведения о приложении и одновре­
менно заполняет вынужденную паузу, возникающую при за­
грузке остальных форм приложения.
Создание программы
173
Application Wizard - Standard Forms
Would you Sea to include any o f these standard forms
In your appteation*
Vя Splash screen at appfication start up
To indude any custom form
tem plates, dckhere.
Form tem plates, .,
Г lo g in dtelog to accept an © and Password
P Qpbons dtefog fo r custom s c ttrg s
Г
About Box
• Login dialog to accept an ID and Password. Диалог реги­
страции, запрашивающий у пользователя имя и пароль.
• Options dialog box fo r custom settings. Диалог Options,
служащий для настройки параметров программы. Задача
заполнить окно этого диалога элементами для настройки
параметров возлагается на программиста.
• About Box. Окно сообщения «О программе».
• Выбрать заготовки форм других типов можно с помощью
кнопки Form Tem plates.
Forms
Application Wizard
WouH you tke to generate forms based upon tables
and queries f t your local database? З Д Й Я Й
IЯК
(• Nq> do not create forms from my database
С
Use the Data Form Wizard
to generate more complex
data forms!
create forms from my database
Создание программы
Вы почти у цели. Если ваша программа должна будет работать
с базой данных, то на этом шаге можно будет подготовить
Application W izard - Select Tables
forms created foe?
Authors
T tie Author
Titles
Для этого следует щелкнуть на Yes и в появившемся диалоге
выбрать требуемую базу данных, если связь с базой данных
вашей программе не требуется, выберите No, в этом случае
шаг выбора базы данных будет пропущен.
Application Wizard - FinishedI
Woukjyoulto
instructions on
tf*n|
fcdone?
Создание программы
175
■
Наконец, последний шаг. Здесь вы можете задать имя проекта
и соответственно будущего приложения. Если все готово,
щелкните на Finish, и мастер примется за работу (это может
занять некоторое время). В результате будут созданы проект
и исходный код.
Ш Если на последнем шаге вы установите переключатель в по­
зицию Yes, то помимо проекта мастер приложений создаст и
выведет на экран отчет, где будет описана проделанная ра­
бота и даны рекомендации по дальнейшим шагам.
V Application Wizard Summary Report
НЕОН
ippficabon Wizard Instructions:
Гһе Application Wizard has finished creating your appfeaBon. Throughout die
./o je ct, you w i find code comments indicating what you should do to add your own
Funcbonafity to the project. Search fo r "TO DO" In the comments wfthin the project
For more information.
What To Do Next
You cm save this report by dkhng the “Save" button, or you can decard It by
Close". Once you are returned to the Visual Basic environment, run your
abon! Press F5 or choose Start from the Run menu.
Application Wizard has created the foundation fo r your appfication. You can
by editing the project to fit your needs or you can run these other Wizards to
ovide more functionality:
ata Form Wizard - Add more complex forms based upon your local or remote data
................ :
.Ш
j
:
Save
Примечания
Ш Щелчком на кнопке Finish можно завершить работу мастера
на любом шаге, при этом он создаст проект, основываясь на
информации, полученной до этого момента. Для всех осталь­
ных параметров будут приняты значения по умолчанию. По­
пробуйте щелкнуть на кнопке Finish на первом шаге мастер
создаст полностью стандартный проект.
■ В главе 5 будет описано создание Add-ln-утилиты. Поскольку
все мастера являются ничем иным, как Add-ln-утилитами, вы
можете создать мастера сами.
Отладка
176
Обзор. A pplication Setup W izard — мастер создания
програм м установки
Setup Wizard - Introduction
The Setup Wizard w i create a Setup program and/or a
dependency fie fo r your appfcatJon.
'Ч
И
л и
Ш
/ А у н п А '.Ж У
М
М
^ Я .
*
-
0 > > « х^Х У У « ^тАдГ>
£ ,/; Х > £ - Й ь д Й § .
V
.* ^ * 5 5
/ і Д У і « У ^З Д уЧ А ^ Ш м д У Д
-‘
^
у
- - - г -- »
The setup prograin is used to distribute your application
and a dependency tte contains a 1st o f a l thertes your
aookation needs to run.
ЙШ
?§»
r a m t h f e screen in thie future
Эта утилита предназначена для создания программ установки
приложений, созданных с помощью пакета Visual Basic. Воз­
можности мастера зависят от варианта (издания) пакета.
Запуск мастера производится с использованием меню кнопки
Пуск (папка Visual Basic 5.0, пункт A pplication setup Wizard).
Количество шагов и их содержание зависят от вида устано­
вочной программы, которую вы намерены создать. Первый
шаг, как и в случае мастера приложений, представляет собой
заставку, которую можно отменить на будущее, установив
флажок Skip this screen in th e fu tu re . Далее следует выбор
проекта и вида установочной программы (в зависимости от
этого набор последующих шагов может быть разным).
4.2. Отладка
И вот программа написана, все ошибки, обнаруженные компиля­
тором, исправлены, и наступает решающий момент. Необходимо
проверить, действительно ли программа делает в точности то, что
имел в виду ее автор. Если программа большая и сложная, то ее
тестирование представляет собой непростую задачу — оно долж­
но быть обширным и многовариантным. Но только таким путем
создаются надежные, стабильно работающие программы.
В результате тестирования могут выявиться (и, как правило, вы­
являются) разного рода ошибки — оказывается, программа в
какой-то ситуации ведет себя непредусмотренным образом. Чем
сложнее программа, тем это вероятней. Что делать в такой си­
туации? Искать ошибки. Есть много способов «идти по следу пре­
ступника» — можно, например, начать тестировать модули и про­
цедуры по отдельности, можно просмотреть внимательно весь
исходный текст и, быть может, переписать его более ясным и j
«прозрачным» образом. Наконец, можно попытаться обнаружить
ошибку в процессе отладки.
4.2.1. Виды ош ибок
Различают три вида ошибок:
■
О ш ибки период а ко м пи л яц и и. Эти ошибки обнаруживает
компилятор, когда вы пытаетесь запустить программу. Их ис­
точники тривиальны — ошибочный синтаксис, опечатка, ука­
зывающая в никуда ссылка. Программист мог забыть вставить
в текст объявление API-функции или сослаться на интерфейс
класса в модуле классов. Компилятор обнаруживает эти
ошибки и любезно вам на них указывает. При этом он выдает
сообщение с кратким описанием ошибки (окно сообщения,
как правило, позволяет получить подробные сведения о сущ­
ности ошибки от справочной системы Visual Basic).
■ О ш ибки пери од а вы полнения. После того как ошибки пе­
риода компиляции исправлены и программа благополучно за­
пустилась, настает черед ошибок периода выполнения. Эти
ошибки гораздо неприятней, потому что компилятор уже не
выдаст сообщение с номером строки кода и описанием ошиб­
ки _ в лучшем случае выполнение программы завершится
аварийно и вы узнаете номер ошибки (runtime error...). В худ­
шем случае дело кончится системным крахом и перезагрузкой
компьютера. Но самое неприятное качество ошибок периода
178
Отладка
выполнения состоит в том, что они зачастую не проявляются
сразу после старта программы, а возникают лишь в опреде­
ленной ситуации и при некоторых условиях. Вполне вероятно,
что программист вообще не обнаружит ошибку — это сделает
уже пользователь, который, возможно, потеряет при этом цен­
ные данные и скажет много разных слов в адрес программис­
та. Причины такого рода ошибок многообразны. Обнаружить
их можно только при тщательном и всестороннем тестирова­
нии, а чтобы локализовать собственно ошибку, необходимо
воспользоваться отладочными средствами Visual Basic.
Ш Л огические ош ибки. Эти ошибки часто принимают за ошиб­
ки периода выполнения, однако искать их следует в логике
программы. Характерный пример — бесконечный цикл или
бесконечная рекурсия, когда условие завершения цикла или
рекурсии никогда не достигается.
4.2.2. Методы устранения ош ибок
Обзор
I
ill И
Ш Лучшие ошибки — те, которых нет. А лучший способ бороться
с ошибками состоит в том, чтобы их не делать. Чтобы мини­
мизировать число ошибок, необходимо тщательно планиро­
вать логику программы, стараясь сделать ее как можно более
ясной. Необходимо строить общую структуру программы так,
чтобы иметь четкое разбиение на модули. Это позволит со­
здать модуль и протестировать его отдельно на как можно
более ранней стадии. Visual Basic основан на объектном под­
ходе, и это дает широкие возможности в плане модульной
структуры программы. Можно, например, отдельно создать и
протестировать класс, его методы и свойства. Существует
много способов, помогающих избегать ошибок еще на даль­
них подступах к работающей программе.
Ш Синтаксические ошибки можно исправлять при вводе исход­
ного текста, поскольку редактор проверяет синтаксис в про­
цессе ввода и сигнализирует об ошибках. Таким образом, этот
класс ошибок подавляется в зародыше.
■
Visual Basic располагает набором отладочных средств, позво­
ляющих обнаружить ошибки периода выполнения с помощью
пошагового исполнения программы. При этом можно выводить
отладочную информацию, наблюдать за состоянием «подозри­
тельных» переменных и, таким образом, обнаружить причину
неправильного поведения программы и локализовать ошибку.
■ На вкладке General диалога O ptions расположен переключа­
тель Error Trapping (Прерывание по ошибке). Если перевести
его в положение Break on Unhandled Errors, то программа
будет входить в режим прерывания при возникновении оши­
бок периода выполнения (за исключением предусмотренных
и обрабатываемых программой), это позволит начать отладку
именно в том месте, где возникла ошибка.
■ Для объекта Debug (Отладка) в Visual Basic предусмотрены
методы P rin t и A ssert. Метод P rint позволяет выводить текст
в окно отладочной информации. Для этого, вообще говоря,
можно использовать оператор MsgBox, однако метод
D ebug.P rint обладает двумя важными преимуществами. Все,
что он выводит в окно отладочной информации, сохраняется
там — это позволяет проанализировать ход выполнения про­
граммы впоследствии. И второе — обращения к объекту
Debug не включаются в исполняемый ЕХЕ-файл. Метод A ssert
позволяет принудительно перевести программу в режим пре­
рывания при выполнении некоторого условия. Оператор
D ebug.Assert Л о ги ч е с ко е В ы р а ж е н и е вызовет прерывание,
если Л о ги ч е с ко е В ы р а ж е н и е будет иметь значение True. При
этом в роли логического выражения может выступать любая
конструкция типа Boolean, допустимая правилами Visual Basic.
Примечание
■ Если причину неправильного поведения программы не удается выявить с помощью пошаговой отладки, просмотрите вни­
мательно еще раз исходный текст. Попросите изучить текст
друга или коллегу - бывает так, что автор текста не видит
того, что незнакомому с текстом человеку сразу бросится в
глаза.
Отладка
180
4.2.3. Точка разрыва
Важным средством для поиска ошибок являются точки разрыва.
Вместо того, чтобы в режиме прерывания (режиме пошаговой от­
ладки) «шагать» от начала программы до подозрительного на
ошибку места, вы можете установить точку разрыва на нужной
строке и запустить программу как обычно. Дойдя до точки раз­
рыва, IDE автоматически переведет программу в режим преры­
вания и вы начнете пошаговую отладку прямо с интересующего
вас места.
Обзор
Ш Точки разрыва можно без ограничений устанавливать в IDE до
того, как программа запущена. При выполнении программы
это можно сделать не ранее чем программа окажется в режи­
ме прерывания.
..
-|o |x |
1 f i Project1 -frmMoon (Code) Щ
|ғ о г т
lLoed................................. Ш
P r iv a t e
s u b c u d s t a r t _ c llc k . ( )
•г-spsn почить псгр&хажу« g R o ta te r la g
C T * p r E Я?С51!ЗОПОЕО*М О© ЛЛ
i f g R o t a t e F la g = 0 T h e n
g R o t a t e F la g = 1
c m d s ta rс . c a p t io n = •С ГО П *
E ls e
g R o ta te F la g = 0
c m d s t a r t . C a p t i o n = •С т а р т
E nd I f
а
КЯДПИСЬHt 90*
*
ЩЛя
да
E nd S ub
Private^
15
I
«В
,rr°,rj!l^ dd^*
g c u rre n tM o o n = 0
g D ir e c t io n = 1
g L o ftc o m o r = in g c u r r e n ttfo o n . L o f t
g r o p c o r n o r = L n g c u rre n tM o o n .T o p
g H o lg h t o fM oon - 1
= 1
? E n la r g e S h r in k
n g c u r r ontM o o n . s t r e t c h = T r u e
g W ld th o fM o o n = 1
_____________________________________________________________________________________
P r i v a t e S ub t n r r i n o r T in e r O
I f g R o ta te F la g = 1 Then
91
Ш Для установки и снятия точек разрыва существует ряд воз­
можностей — команда меню Debug, кнопка на панели инстру­
ментов Debug, а также нажатие клавиши или щелчок мышью
в окне редактора кода. Общий принцип таков: необходимо по-
Ш„111 іПиІІі
О
т л
а
д
к а
Iffil
_____________________________________- — —
местить курсор на требуемую строку кода и установить точку
разрыва командой меню, кнопкой панели инструментов или
просто нажатием клавиши [F9]. Еще более простой способ за­
ключается в щелчке мышью на панели точек разрыва в окне
редактора кода напротив требуемой строки (серая вертикаль­
ная полоса слева). Точно такие же манипуляции снимают
ранее установленную точку разрыва.
В Установленная точка разрыва обозначается красным марке­
ром на панели точек разрыва в окне редактора кода.
Процедура. Установка точки разрыва
И И !
1. Поместите курсор в ту строку исходного кода, на которой про- Р Я Н
грамма должна перейти в режим прерывания (режим пошаговой отладки).
2. Выполните одно из следующих действий:
• Выберите команду Toggle Breakpoint в меню Debug.
• Щелкните на значке с изображением ладони на панели ин­
струментов Debug (она дол!жна для этого присутствовать на
рабочей поверхности).
• Нажмите клавишу [F9].
• Щелкните мышью на панели точек разрыва (слева от вы­
бранной строки).
3. Готово. Точка разрыва установлена. Теперь вы можете запус­
тить программу — она прервется именно на этой строке.
Процедура. Снятие точки разрыва
1. Поместите курсор в строку исходного кода, где установлена
точка разрыва (красный маркер слева).
2 Выполните любое из действий, описанных в пункте 2 предыду­
щей процедуры. Чтобы снять все точки разрыва в программе,
нажмите клавиши [Ctrl]+[Shift]+[F9] или выберите команду
Clear All Breakpoints в меню Debug.
182
Примечание
Отладка
‘
^
В Альтернатива применению точек разрыва состоит в исполь­
зовании оператора Stop. Действие этого оператора заключа­
ется в приостановке выполнения программы (при этом значе­
ния переменных сохраняются и выполнение программы
можно затем продолжить командой C ontinue меню Run). Од­
нако это верно только для выполнения программы в среде IDE,
а если речь идет об исполняемом ЕХЕ-файле, оператор Stop
действует аналогично оператору End, т. е. завершает про­
грамму с потерей значения всех переменных и возможностью
запустить программу только с начала.
4.2.4. Управление процессом выполнения программы
Visual Basic располагает рядом возможностей для управления про­
цессом выполнения программы в среде IDE. Это команды меню
Debug (см. 2.4.6), панель инструментов Debug (см. табл.4.9), а
также сочетания клавиш (см. табл.4.10). При этом следует разли­
чать три состояния, в которых может находиться Visual Basic-npoграмма (возможности управления для них различаются):
Ш Режим редактирования. Это состояние программы, подвер­
гающейся редактированию с помощью редактора кода или ре­
дактора формы. Из этого режима программу можно только за­
пустить.
. _
I II і ' Уп -ш
ш
яш
Ш Период выполнения. Программа запущена и выполняется.
Можно работать с ней как пользователь, можно просматри­
вать ее код в окне кода (ничего при этом не меняя).
Ш Режим останова (приостановка выполнения). Выполнение
программы приостановлено, но его можно возобновить или
же вести дальше пошагово.
Обзор. Управление процессом выполнения программы
Ш Выполнения одной и той же команды, касающейся управления
процессом выполнения программы, можно достичь разными
способами (меню, панель инструментов, клавиатура), причем
действие, выполняемое командой, от этого не меняется.
S tart (Пуск). Запускает текущий проект в среде IDE. Про­
грамма выполняется до завершения или перехода (по тем
или иным причинам) в режим прерывания.
S tart W ith Full Compile (Пуск с полной компиляцией). Осу­
ществляет полную компиляцию проекта и запускает про­
грамму.
R estart (Повторный пуск). Перезапускает выполняющуюся
программу. При этом программа стартует с начала, все
переменные заново инициализируются.
Step Into (Шаг). Эта команда выполняет один оператор про­
граммы. Если текущий оператор — вызов процедуры, сле­
дующим текущим оператором станет первый оператор про­
цедуры. Если программа не запущена, то она запускается
в режиме пошаговой отладки.
Step Over (Шаг через процедуру). Эта команда во всем ана­
логична предыдущей — за следующим исключением: если
текущий оператор представляет собой вызов процедуры, то
следующим текущим оператором станет первый оператор
после вызова процедуры, т. е. процедура (или функция)
будет выполнена за один шаг.
Step Out (Шаг из процедуры). Если текущим оператором
является один из операторов процедуры, то в результате
выполнения этой команды будут выполнены все оставшиеся
операторы процедуры.
Run То Cursor (Выполнять до курсора). Будут выполнены
все строки, начиная с текущей и кончая той, в которой на­
ходится курсор. Затем программа перейдет в режим оста­
нова (ее выполнение будет приостановлено). Эта возмож­
ность бывает удобной, когда необходимо «проити» фраг­
мент кода, который сам по себе вас не интересует, но его
выполнение приводит к интересующему вас месту.
Break (Прерывание). Прерывает выполнение программы и
переводит IDE в режим прерывания. После этого становится
возможной пошаговая отладка.
Continue (Продолжить). Эта команда доступна только в ре­
жиме прерывания (при этом она замөщаөт команду а в
184
____________ ___________________ Отладка
меню Run). Выполнение программы продолжается с того
места, где произошло прерывание, значения переменных
при этом сохраняются.
^
• End (Стоп). Завершает выполнение программы.
■ С помощью команды Show Next S tatem ent (Показать следую­
щий оператор) можно перевести курсор в строку, на которую
будет передано управление в результате выполнения текущей
строки. Это бывает полезным при пошаговой отладке условных
конструкций.
* *
■ Команда Set Next S tatem ent (Задать следующий оператор)
позволяет принудительно направить выполнение программы
по требуемому пути. Это позволяет «обойти» участок кода при
отладке. Обратите внимание, команда не влияет на состояние
переменных.
^
^
§§ Позиция текущей строки в режиме пошаговой отладки (т. е. стро­
ки, подлежащей выполнению на следующем шаге, может не со­
впадать со строкой, где находится курсор) отмечается значком
«стрелка вправо» на серой панели в левой части окна кода.
Таблица 4.9. Панель инструментов отладчика (Debug)
Значки
Действие
Запускает текущим проект
Прерывает выполнение программы
Завершает выполнение программы
Устанавливает/сбрасывает точку разрыва
Выполняет шаг или запускает программу в
пошаговом режиме.
"-
Отладка
Значки
Действие
Выполняет шаг или запускает программу
в пошаговом режиме. При этом процедуры
и функции выполняются за один шаг.
Выполняет текущую процедуру до конца и выходит
в точку, следующую за точкой, откуда процедура
была вызвана.
Открывает окно Locals (Окно локальных
переменных), а если оно уже открыто, то передает
туда фокус клавиатуры.
Открывает окно Im m ediate (Окно отладочной
информации), а если оно уже открыто,
то передает туда фокус клавиатуры.
Открывает окно W atch (Окно отслеживаемых
выражений), а если оно уже открыто, то передает
туда фокус клавиатуры.
Просмотр текущего значения.
Соответствует команде Call Stack (Просмотр
стека). Служит для просмотра последовательности
вызовов процедур, приведшей к текущему
состоянию программы.
Таблица 4.10. «Быстрые» клавиш и
Сочетание
клавиш
Действие
Запускает текущий проект.
[Ctrl]+[Pause]
Прерывает выполнение программы
[F9]
Устанавливает/снимает точку разрыва в текущей
строке.
______ _____
[FBI
Выполняет шаг или запускает программу
в пошаговом режиме.
Отладка
186
-----— —
Действие
I
[Shift]+[F8]
Выполняет шаг или запускает программу
в пошаговом режиме. При этом процедуры
и функции выполняются за один шаг.
1
1
|
[Ctrl]+[Shift]+
[FS]
Выполняет текущую процедуру до конца и
выходит в точку, следующую за точкой, откуда
процедура была вызвана.
1
1
[Ctrl]+[G]
Открывает окно Locals.
|
Сочетание
клавиш_______ I
~
[Shift]+[F9] ___ Показывает текущее значение.___________________ 1
[Ctrl]+[L]
Показывает стек.________
__
Переключается между окнами Immediate и Watch. |
Г
і ғ
б
і
4.2.5. Окно Im m ediate
(окно отладочной инф ормации)
Окно Im m ediate представляет собой один из важных инструментов отладки, служащих разнообразным целям. С его помо­
щью можно выводить информацию из работающей программы
(используя методы объекта Debug); можно наоборот, вводить
информацию в работающую программу — запрашивать значе­
ния переменных и задавать их, вводить и выполнять фрагменты
кода и др.
- » .«
I
''w itffH rT
Обзор
■
Работая с окном отладочной информации, необходимо придерживатъся нескольких правил:
• В окне Im m ediate нельзя объявлять переменные, а ссылать­
ся можно только на те переменные, которые объявлены в
отлаживаемом коде.
• Введенные в окно Im m ediate операторы выполняются не­
медленно по нажатию клавиши [Enter].
Отладка
_______________
187
• Нельзя вводить операторы, состоящие из нескольких строк.
Если требуется ввести «многострочный» оператор, следует
разделять его «строки» символом «:». Если строка слишком
длинна, можно использовать обычный способ переноса
строки — комбинацию пробела и символа (J .
• Окно Im m ediate поддерживает операции буфера, напри­
мер, в него можно вставить текст.
• Чтобы удалить содержимое окна Immediate в режиме поша­
говой отладки, его следует выделить и нажать клавишу [Del].
В Как уже упоминалось, Visual Basic располагает специальным
объектом, предназначенным для отладочных целей. Объект
Debug, в частности, позволяет выводить информацию из вы­
полняющейся программы в окно Immediate. При этом приме­
няется следующий синтаксис:
D ebug.Print [В ы раж ение]
Под выражением подразумевается любое допустимое в рамках
данной программы выражение. Это может быть строка, перемен­
ная любого типа или любое допустимое сочетание операций над
переменными и константами программы.
Ш Для того чтобы получить значение выражения, следует ввести
в окно Im m ediate выражение, которому предшествует знак во­
проса (в данном случае знак вопроса является краткой формой
записи оператора Debug.Print):
?Выражение
Ш Окно Im m ediate позволяет ввести любой допустимый в рам­
ках данной программы оператор, за исключением объявле­
ния переменной или процедуры/функции. Достаточно ввести
оператор и нажать [Enter]. Можно вызвать объявленную в
коде процедуру, задав ей произвольные параметры
для
этого достаточно просто ввести имя процедуры и параметры.
Если требуется просмотреть возвращенное функцией значе­
ние, то в операторе вызова необходимо предусмотреть пере­
менную, которой присваивается значение функции, а затем
просмотреть значение переменной. Это дает возможность
протестировать процедуру или функцию отдельно от остально­
го кода.
Отладка
188
?в
■'■•-. -:г
15
.
:^ ^ - Й Ш
Result = Calculate(А, В, "+”)
?Result
25
. -
cmdCalc.Move 10,
'
Ш Н Н Н
■
% \ ? !H S B
10
• В этом примере результат сложения значений переменных
А и В (предположим, именно эту операцию выполняет функ­
ция Calculate) помещается в переменную Result, значение
которой затем запрашивается с помощью директивы ?.
Затем вызывается метод, перемещающий кнопку cmdCalc.
| 4.2.6. Другие средства отладки
Visual Basic располагает также и другими средствами, облегчаю­
щими отладку в пошаговом режиме. Это ряд служебных окон, ко­
торые можно открыть командами меню View, используя панель
инструментов Debug или сочетание клавиш.
Обзор. Д ругие средства отладки
Ш Окно Watches (Окно отслеживаемых выражений). В этом окне
можно отслеживать текущее значение переменных или выражений.
ввв
Expression
\Ь6 gDtrecbon
I Context
1гтпМооп/orm Load
Value
ДОМеПад3X3»' т
In teg er
^Integer
*
trmMoonformJLxed
|
A ft A
• Существует несколько способов задать отслеживаемое вы­
ражение (см. процедуру ниже).
й Уже заданное отслеживаемое выражение можно отредакти­
ровать (команда Edit W atch меню Debug, см. также проце­
дуру ниже).
Отладка
189
• Значение отслеживаемого выражения можно принудитель­
но изменить (для этого достаточно ввести требуемое зна­
чение в столбец Value окна W atches).
• Существует также возможность обеспечить прерывание
программы в момент, когда отслеживаемое выражение из­
менит свое значение или примет значение True (см. проце­
дуру ниже). В следующей таблице приведены значки, кото­
рыми обозначаются разные типы отслеживаемых выраже­
ний в окне W atches.
Таблица 4.11. Значки типов отслеживаемых выражений
Тип отслеживаемого выражения
Значки
Этим символом обозначается «нормальное»
отслеживаемое выражение, не оказывающее
никакого влияния на ход выполнения программы.
Значок отслеживаемого выражения, которое
прерывает выполнение программы, когда получает
значение True. ___________ _____________________
Значок отслеживаемого выражения, которое
прерывает выполнение программы, когда изменяет
свое значение.
Project I .frm M ooo.Foi m _load
s i mb
— [_D etaul]
—
Ac&veControi
.
Ш
Н
Ш
М
ІИ
1
-
BackCotor
16777215
-
BorderStyte
2
"Про грамма "ЛунаГ
— Caption
-
CfipConlroIs
False
True
•j+jcm dEdt
-f+1
cmdStart
■■■■
— ControlBox
И
■- Irm M oon/ftm M ocn
<VWong number o f argum enis or Object
Control
Nothing
Appearance
— AutoRedrew
—
И
j
Integer
Boolean
Long
H eger
String
Boolean
CoiT»nan(®uttonACo«Tmand&ilor
CofnmandButton/ComfnanteuOor
True
Boolean
Controls
V
V
Отладка
Назначение окна Locals (Окно локальных переменных) аналогично назначению окна W atches. Однако влиять на набор зна­
чений, отображаемых окном, нельзя. Оно отображает значе­
ния переменных и свойств объектов, относящихся к объекту
Me (текущему модулю). Значения можно изменять.
Окно Call Stack (Просмотр стека) служит для просмотра со­
стояния стека (последовательности вызовов процедур, при­
ведшей к текущему состоянию программы).
CaltStack
^Pro^>todie.Furictipfi
P roiectl .frmVarv.VSguare
Proiectl .fimVary.cmdDoR.CSck
Quick W atch
Context ••
Project 1.frmArray.Cm d^W ^Cfck
Я Proiectl - frmArray (Code) JcmdOnlyS
__ Й Р СВек.....____ _
ВӨП
___________
•о ч и с т и т i. х с ш й л н и р о ы к н о е п с п в
c b o E le m e n ts . C le a r
§ ...
Щ
i
■Q p K c s o ;i7 h s u iia is x э ііо к в н т в к с п и с х а к о и с я о ір о в в к н о г о почл
rot C o u n te r = О т о 9 s e e p 1
cb o E le n e n te A d d Iten _
S t r ( g f h e A r r a y ( C o u n t e r ♦ 1))
N ext Counter
g rid Sub
_
. . . . .
.................................
Private S ub cnd0nly5_click()
'У с і* н о а и т ь р л з к е р к а с с г ів а
R e O ln P r e s e r v e g T he A г г a у ( 1 T o 5 ) A s in t e g e r
Din c o u n t e r
■
хо и б и ки р о х.аи ко о n o no
c b o E le n e n t e . c l e a r
П р и св о и ть £лач«-нил г п е к е к т а к e ra rex а х о м б и н и р о ь л к к о гс хтапя
F o r ЫЛЦИЗ-ЗЧ
o u n to r s 0 т о 4 S te p 1
c b o E le n e n t e . A d d r t o n _
S t r ( a T h e A r r a y (C o u n te r
N e x t c o u n te r
|g T h e A n a y(C o u n te r + 1 ) - 0
«■ 1 ) )
^ ‘
З шкі
sЩ
Отладка
■
______________ _______________ —
При поиске ошибок путем пошаговой отладки очень важно от­
слеживать текущие значения переменных и выражений. Кроме
окон W atches и Locals в Visual Basic предусмотрено еще два
способа решения этой задачи:
• Командой Q uick W atch (Просмотр текущего значения)
меню Debug можно открыть одноименный диалог, позво­
ляющий узнать значение выражения, которое не было ранее
определено как отслеживаемое. Диалог Q uick W atch можно
открыть также сочетанием клавиш (см. табл.4.10), с помо­
щью панели инструментов Debug (см. табл.4.9). Перед этим
следует поместить курсор на интересующее вас выражение
или выделить его.
• Еще более простой и удобный способ — всплывающая под­
сказка Quick Info. Если в режиме пошаговой отладки по­
местить указатель мыши на выражение в окне кода, то через
секунду-две рядом всплывет небольшой прямоугольник, со­
держащий текущее значение выражения.
Процедура. Определение отслеживаемых выражений
1. Существует несколько способов включения выражения в спи­
сок отслеживаемых. В данном случае мы используем диалог
Add Watch. Выберите команду Add W atch в меню Debug.
2. В поле Expression будет уже присутствовать выражение, на
котором находится курсор (или которое выделено) в окне
кода. Измените его или оставьте как есть в соответствии со
своими намерениями.
3. В поле C ontext укажите область видимости выражения.
4. Диалог позволяет также выбрать режим отслеживания (без
влияния на ход выполнения программы, с прерыванием по из­
менению значения или с прерыванием по значению True).
5. Щелкните на ОК, и выражение будет включено в список окна
W atches.
■ Есть и другие способы определить выражение как отслежи­
ваемое. Можно просто выделить выражение в тексте и пере­
нести его с помощью мыши в окно W atches. Можно при про-
Отладка
192
смотре выражения в окне Q uick W atch щелкнуть на кнопке
Add (Добавить), и выражение будет включено в список окна
W atches. Независимо от того, каким способом отслеживае­
мое выражение попало в окно W atches, его можно отредак­
тировать, как описано ниже.
Щ
.
Процедура. Редактирование отслеживаемых выражений
1. Выделите в окне W atches требуемое выражение.
2. Выберите команду Edit W atch в меню Debug (или нажмите
[Ctrl]+[W ]).
I
^
3. В открывшемся окне диалога отредактируйте выражение тре­
буемым образом.
^ -г': А
4. Щелкните на ОК.
Процедура. Очистка окна W atches
1. Выделите все строки в окне W atches.
2. Нажмите клавишу [Del], и все отслеживаемые выражения
будут удалены.
v . v*
. •j ■
1
Техника
программирования
Эта глава — первая из пяти, которые посвящены собственно про­
граммированию на языке Visual Basic. Тема данной главы — фун­
даментальные вопросы программирования, такие, как, например,
обработка событий, доступ к дисковым файлам и создание поль­
зовательского интерфейса.
Большинство разделов снабжены примерами программ, которые
подаются по единой схеме: вначале краткие пояснения относи­
тельно особенностей программы, описание используемых функ­
ций и другие детали. Приводится рисунок, изображающий окно
приложения в период выполнения программы, на котором видно
расположение управляющих элементов на форме. Далее следует
таблица свойств объектов программы, где указаны свойства, ко­
торые необходимо изменить после того, как управляющие эле­
менты будут помещены на форму. Каждая такая таблица состоит
из трех столбцов. В первом указан тип управляющего элемента
(в оригинале, т. е. так, как его идентифицирует всплывающая под­
сказка в окне коллекции инструментов). Второй столбец содер­
жит имена свойств, которые нуждаются в изменении, и третий
значения, которые следует присвоить этим свойствам. Таблица
5.1 в конце данного раздела представляет собой образец табли­
цы свойств. Далее в этой главе приводится обзор наиболее важ­
ных свойств и методов наиболее употребительных управляющих
элементов (см. также главу 10, где приводится обзор свойств,
событий и методов объектов Visual Basic). Более подробные све­
дения можно найти в справочной системе Visual Basic. Кроме
того, пояснения по отдельным управляющим элементам, их свой­
ствам и методам будут даваться по мере их появления в книге.
7 Заказ 3337
10Л
Стандартные управляющ ие элементы
^
^
1
Наконец, завершаться подача каждого примера будет исходным
текстом программы — в совокупности с рисунком, таблицей
свойств и пояснениями это дает достаточно информации читате­
лю, чтобы он смог реализовать пример программы самостоятель­
но.
I ......
Таблица 5.1. Образец таблицы свойств объектов в примере
программы
Объект
Свойство
Значение
Form
Name
frmMain
BackColor
белый
1
1 Бродяга
j
Caption
5.1. Стандартные управляющие элементы
Visual Basic располагает встроенным набором управляющих эле­
ментов, которые называют стандартными. В окне коллекции ин­
струментов они представлены группой General. Этот набор уп­
равляющих элементов удовлетворяет требованиям, предъявляе­
мым пользовательскому интерфейсу среды Windows. Кроме того,
он включает в себя элементы, предназначенные для решения ти­
пичных задач, — такие, как, например, таймер Tim er или графи­
ческий образ Image. Эти элементы нельзя удалить из коллекции
инструментов.
J
^
V'v-W Sei
В этой главе мы кратко рассмотрим большинство стандартных
управляющих элементов. Для каждого из них будут даны поясне­
ния относительно назначения данного элемента, приведен список
его свойств и методов с краткими пояснениями.
Описание каждого элемента начинается с его названия — при
этом вначале приводится оригинальное английское название,
затем в скобках название, принятое в данной книге.
Стандартные управляющие элементы
195
Описание каждого управляющего элемента не будет полным,
речь будет идти только о наиболее важных его свойствах и ме­
тодах, пояснения по элементу будут даны в объеме, достаточном
для осмысленного его применения в последующих примерах про­
грамм. Перед обзором стандартных управляющих элементов
будут рассмотрены свойства, которые являются общими для
большинства элементов.
В последующих главах также будут приводиться описания управ­
ляющих элементов, которые используются в примерах. В разделе
5.3.2 приведен пример программы с использованием некоторых
стандартных элементов. Пример программы в главе 6 демонстри­
рует в действии OLE-элемент, и туда же помещено описание
этого управляющего элемента. Также в главе 6 приведено опи­
сание дополнительных управляющих элементов, поставляемых в
составе пакета Visual Basic. Такие элементы, как Image, Shape,
PictureBox и Line, использованы в примерах программ главы 7.
Управляющий элемент Data освещен в главе 9.
Обзор. Управляющие элементы
■
Управляющие элементы являются объектами. Каждый эле­
мент, помещенный на форму, представляет собой экземпляр
соответствующего класса. Как и любые объекты, управляющие
элементы обладают свойствами, методами и событиями.
■ Каждый управляющий элемент, находящийся на форме, обла­
дает именем, т. е. свойством, благодаря которому один эле­
мент отличают от другого и по которому ссылаются на этот уп­
равляющий элемент в коде программы.
■ При ссылке на свойства и методы управляющего элемента его
имя и имя свойства или метода разделяют точкой.
■ События управляющего элемента должны обрабатывать процедуры-обработчики событий (см. 5.2).
■ Сведения о свойствах и методах конкретного управляющего
элемента можно почерпнуть из каталога объектов (O bject
Browser), окна свойств и справочной системы Visual Basic.
■ Перечисленные ниже свойства имеются у большинства управ­
ляющих элементов. Смысл и назначение этих свойств идентич­
ны у разных элементов.
ig g
Стандартные управляющ ие элементы
• BackColor, ForeColor. Эти свойства определяют цвета, ко­
торыми изображается элемент на экране. ForeColor отве­
чает за цвет переднего плана (например, цвет символов
надписи). BackColor определяет цвет заднего плана (цвет
фона).
* ' :'л1 *
• Caption. Надпись. Многие элементы предусматривают над­
пись на своем изображении, содержание которой и опре­
деляется свойством Caption.
-*
я
• Enabled. Разрешено. Булево значение, содержащееся в
этом свойстве, разрешает или запрещает функционирова­
ние управляющего элемента в плане пользовательского
ввода. При Enabled = False элемент не реагирует на дейст­
вия пользователя.
• Font. Шрифт. За этим свойством скрывается целая система
подсвойств, определяющих вид шрифта, его атрибуты, при­
знаки начертания и кодовую страницу.
• Height, W idth. Ширина и высота. Содержимое этих свойств
определяет геометрические размеры элемента на экране в
единицах измерения, выбранных в свойстве ScaleMode
формы. Этими свойствами не обладают элементы, невиди­
мые в период выполнения программы (например, таймер).
• Index. Индекс. В случае когда на форму помещается второй
элемент с тем же именем, появляется возможность создать
массив управляющих элементов. При этом свойство Index
будет содержать порядковый номер элемента в массиве.
• Left, Тор. Координаты левого верхнего угла элемента в те­
кущих единицах измерения определяют его положение на
форме.
”
• Name. Имя элемента. По содержимому этого свойства к
элементу обращаются в коде программы.
• Tag. Это свойство не выполняет каких-либо полезных функ­
ций. Оно может содержать данные разных типов и сущест­
вует только для удобства программиста— каждый может ис­
пользовать его, как пожелает. Например, его используют
для передачи результата работы формы специального диа­
лога в вызвавшую его форму.
Стандартные управляющие элементы
В
197
• Visible. Видимость. Если присвоить этому свойству значе­
ние False, то в период выполнения программы данный эле­
мент будет невидимым.
Кроме универсальных свойств, имеющихся у большинства уп­
равляющих элементов, существуют также методы, удовлетво­
ряющие этому критерию.
• Drag. Служит для перетаскивания по технологии Drag&Drop.
В качестве параметров используются константы, задающие
вид действия (vbCancel, vbBeginDrag, vbEndDrag — отмена,
начать перетаскивание, закончить перетаскивание). Син­
таксис:
ИмяОбъекта.Огад константа
• Move. С помощью этого метода управляющий элемент
перемещают по форме. Одновременно можно изменить его
размеры. Синтаксис:
ИмяОбъекта.Моуе X, Y, ш ирина, высота
• SetFocus. Действие метода заключается в том, что фокус
клавиатуры передается тому элементу, чей метод SetFocus
был вызван. Параметры отсутствуют.
• Refresh. При вызове этого метода соответствующий объект
приводит свое содержимое в соответствие с текущей си­
туацией, а также перерисовывает свое изображение в со­
ответствии со своим содержимым.
Примечания
■
■
Если вы захотите поближе ознакомиться с внутренней струк­
турой Visual Basic, изучите в каталоге объектов (команда Ob­
je c t Browser меню View) файл VB5.0LB, где определяются
стандартные управляющие элементы.
Вместо термина «управляющий элемент» иногда используют
термины «объект управления», «компонент», «элемент управ­
ления», а также английский термин Control. Все они равно­
значны.
^gg
Стандартные управляющие элементы
Форма не относится к управляющим элементам, но без формы
их невозможно использовать. Форма обладает весьма обширным
набором свойств и методов.
‘
Свойства
ActiveControl
Указывает на тот из управляющих элементов
формы, который в данный момент обладает
сюкусом клавиатуры.
Appearance
Форма и управляющие элементы могут
изображаться либо в стиле Windows 95
(трехмерными), либо в стиле Windows З.хх
(двумерными). В свойстве Appearance
выбирается один из этих вариантов.
AutoRedraw
Если это свойство имеет значение True, то
форма вместе с ее содержимым (включая
результаты работы графических методов)
будет автоматически перерисовываться после
того, как окно формы по каким-либо
причинам перестало быть видимым
(свернутым, например, или заслоненным
другим окном). По умолчанию имеет
значение False.
ш
BorderStyle
Здесь выбирается стиль обрамления формы
это включает не только внешний вид
бордюра, но и его поведение (возможность
для пользователя менять размеры окна).
ControlBox
Задает наличие в титульной строке окна
формы меню управления окном (значок
в левом верхнем углу окна). По умолчанию
имеет значение True.________________ _
CurrentX, CurrentY
Координаты текущей позиции вывода
в рабочей области формы (как для
графических методов, так и для вывода
текста).
Стандартные управляющие элементы
199
Свойства
DrawMode
Управляет режимами вывода в рабочую
область формы. Стандартный режим —
Normal.
ВH i
DrawS tyle
Задает стиль линий, которые выводят
на форму графические методы.
DrawWidth
Задает толщину линий, которые выводят
на форму графические методы.
FillColor
Задает цвет заполнения замкнутых фигур,
которые рисуются на форме с помощью
графических методов._________________
FillStyle
Задает стиль заполнения для фигур,
нарисованных графическими методами.
KeyPreview
Управляет режимом обработки событий
клавиатуры. При KeyPreview = True форма
будет перехватывать и «просматривать»
любые события клавиатуры, прежде чем
передать их управляющему элементу, на
котором находится фокус клавиатуры.
ScaleHeight,
Scale Width
Эти два свойства содержат соответственно
высоту и ширину формы в выбранной
системе координат.
~
ScaleLeft, ScaleTop
Координаты верхнего левого угла формы
в выбранной системе координат.
ScaleMode
Здесь выбирается единица измерения,_
которую используют все методы и свойства,
имеющие дело с размерами и координатами.
По умолчанию выбран твип (1 твип = 1/1440
дюйма).
Методы
Circle
Этот графический метод позволяет рисовать
на поверхности формы круги, эллипсы, дуги
и сектора. Толщина, цвет, стиль линий
и заполнения задаются свойствами формы.
2оо
Стандартные управляющ ие элементы
Очищает поверхность формы от всех следов
работы графических методов или текстового
вывода.
Убирает с экрана изображение формы,
не выгружая ее из памяти.
Графический метод, проводит линию на
поверхности формы.
_ .
PaintPicture
Загружает точечный рисунок из графического
файла и помещает его на поверхность
формы. Поддерживает файлы форматов BMP,
WMF, EMF, ICO и DIB.
Point
Возвращает RGB-значение цвета точки на
поверхности формы в указанных координатах
PopupMenu
Открывает в заданных координатах заданное
меню в режиме контекстного меню.
PrintForm
Выводит на принтер изображение формы
по точкам.
_________________________
Выводит точку заданного цвета в заданных
координатах на поверхности формы.
Refresh
Принудительно перерисовывает изображение
формы и ее содержимого.
Задает систему координат на форме.
ScaleX, ScaleY
Преобразует значения координат из одной
системы в другую.
Show
Выводит изображение формы на экран
(делает видимой, если ранее она была
сделана невидимой или загружает форму,
если она не была загружена ранее)
TextHeight
TextWidth
Возвращают соответственно высоту и ширину
текстовой строки с заданным шрифтом,
каковые она будет иметь при выводе
на поверхность формы.
Стандартные управляющие элементы__________________ _______ 201
Labei (Этикетка)
Этикетка относится к наиболее часто применяемым управляю­
щим элементам. Причина ее популярности, возможно, состоит в
том, что обращаться с этикеткой очень просто. Назначение эти­
кетки — нести на себе надпись. Надпись на этикетке пользователь
не может изменить, но код программы в период выполнения
может с легкостью управлять текстом надписи, это часто исполь­
зуют для динамического вывода текста.
Свойства
Alignment
Задает режим выравнивания текста внутри
этикетки. Доступны режимы выравнивания
по левому краю, по центру и по правому краю.
AutoSize
По умолчанию имеет значение False. Если
изменить его на True, то этикетка будет
автоматически менять свои размеры так,
чтобы соответствовать размерам надписи.
BackStyle
Здесь выбирается режим фона. Он может быть
непрозрачным (по умолчанию) или прозрачным,
в этом случае находящееся под этикеткой
изображение не будет перекрыто задним
планом этикетки. ______ -1-г ________________
BorderStyle
Стиль бордюра. По умолчанию текст этикетки
представляет собой надпись на плоской
поверхности. Можно выбрать трехмерный стиль,
где надпись будет «утоплена».
Caption
Главное свойство этикетки - содержит текст
отображаемой надписи.
WordWrap
Разрешает разбивку и перенос непомещающихся
строк, следует согласовывать значение этого
свойства со свойством AutoSize (которое
увеличивает размер этикетки до размера
непомещающейся строки).
Методы
202
Стандартные управляющие элементы
TextBox (Текстовое поле ввода)
Н Н
.... .... J | элемент обеспечивает возможность ввода
текста пользователем. Возможности текстового поля довольно
широки — его можно использовать в режиме одной строки или в
многострочном, как поле ввода пароля или в режиме «только
вывод». Обращаться с ним несложно, в период выполнения все
ограничивается чтением и записью в его свойство Text.
Свойства
Alignment
Задает режим выравнивания текста в поле.
Доступны режимы выравнивания по левому краю
(режим по умолчанию), по центру и по правому
краю. _________ ■ .
;, ......;
v
Borderstyle
Определяет стиль обрамления. По умолчанию
принят трехмерный бордюр, при котором текст
выглядит утопленным.___________________________
Locked
Булево значение. При Locked = True пользователь
не сможет ввести текст в поле._________ __________
MultiLine
Булево значение. При M ultiline = True поле
может содержать более одной строки.___________
PasswordChar
Если текстовое поле предполагается использовать
для ввода пароля, то в это свойство необходимо
передать замещающий символ, т. е. символ,
который будет отображаться вместо вводимых
пользователем (обычно для этого используют
символ «*»). Если свойство содержит пустую
строку, то текстовое поле работает в обычном,
режиме. Все это справедливо только
в однострочном режиме._____ ________ .
ScrollBars
В случае многострочного режима (MultiLine Ц
True) определяет наличие в поле полос прокрутки
(ни одной, только вертикальная, только
горизонтальная, обе или «любая появляется при
необходимости») ___________
,
Эти свойства относятся к выделенному в
SelLength,
SelStart, SelText текстовом поле тексту (длина, начало, сам текст).
Стандартные управляющие элементы
____________ ___________ 203
Главное свойство текстового^ поля, содержащее
собственно текст (введенный пользователем или
присвоенный ему программой).
ни одного, достойного упоминания
Ғ га тё
Рамка относится к разряду т.н. элементов-контейнеров, способ­
ных содержать в себе другие управляющие элементы. Рамку ис­
пользуют обычно для того, чтобы выделить группу позиции пере­
ключателя OptionButton (при этом они составят отдельный пере­
ключатель, независимый от других переключателей, имеющихся
на форме). Часто рамку используют также для чисто визуального
выделения группы флажков. Вообще говоря, в рамку можно по­
местить любые управляющие элементы, которые необходимо
«изолировать» от формы или просто выделить визуально. Поме­
щенные внутрь рамки элементы переносятся или удаляются при
переносе или удалении рамки-контейнера.
Свойства
BorderStyle
Задается стиль обрамления - просто
рамка или отсутствие видимой рамки
Caption
Содержимое этого свойства определяет
текст надписи в верхней части рамки
(групповое имя).
ClipControls
Определяет режим перерисовывания
управляющих элементов, содержащихся
в рамке (полное или частичное).
Методы
ни одного, достойного упоминания
204
Стандартные управляющие элементы
CommandButton (Командная кнопка)
Кнопки на рабочей поверхности приложения играют такую же роль,
что и кнопки в жизни — нажатием на них инициируется некоторое
действие. В интерфейсе пользователя Windows-приложения есть
несколько кнопок разного назначения (например, позицию пере­
ключателя также называют кнопкой выбора). Стандартная команд­
ная кнопка Visual Basic относится к независимым элементам — ее
можно поместить на любое место формы и пользоваться ее собы­
тием Click (Щелчок), как заблагорассудится. Факт щелчка на ней
кнопка обозначает тем, что изображает «нажатие».
Свойства
Cancel
Только одна из кнопок формы может иметь
значение этого свойства True. Это должна быть
кнопка, выполняющая функции кнопки Cancel
(Отмена). При Cancel = True нажатие клавиши
[Esc] генерирует событие Click для этой кнопки
вне зависимости от того, какому из элементов
формы принадлежит фокус.
Caption
Задает текст надписи на поверхности кнопки.
Default
Аналогично свойству Cancel, только для кнопок
ОК (реагирующих на клавишу [Enter]).
Picture
Определяет рисунок, который должен быть
изображен на поверхности кнопки, при условии,
что графика разрешена значением свойства Style
Style
Здесь выбирается стиль кнопки. Стандартный
стиль в противоположность графическому не
дает возможности разместить на кнопке рисунок.
Value
Свойство содержит логическое значение,
отражающее состояние кнопки (значение True
соответствует нажатой кнопке). Если присвоить
этому свойству значение True в коде, то будет
сгенерировано событие Click.
Методы
ни одного, достойного упоминания
Стандартные управляющие элементы__________________________205
С һескВох (Поле
Поле флажка дает возможность пользователю сделать выбор (ус­
тановить или сбросить флажок), независимый от состояния дру­
гих флажков. Кроме состояния «отключен» (Enabled = False) фла­
жок может находиться в одном из трех состояний: «установлен»,
«сброшен» и «запрещен» (т.е. не реагирует на попытки пользова­
теля сбросить или установить его).
Свойства
Alignment
Задает режим выравнивания текста в поле
справа от собственно флажка. Доступны
обычные режимы выравнивания.
Caption
Надпись справа от флажка, описывающая,
как правило, его назначение.___________ .
DisabledPicture
Определяет рисунок, который будет
отображаться в поле флажка в состоянии
«отключен».
Style
Определяет стиль поля флажка.
Стандартный стиль соответствует обычному
флажку с надписью справа, графический
стиль — кнопке с надписью (кнопка после
щелчка остается утопленной и возвращается
в исходное положение при следующем
щелчке).
Value
Это свойство содержит значение,
отражающее состояние флажка. Значения О,
1, 2 соответствуют состояниям «сброшен»,
«установлен», «запрещен».
Методы
ни одного, достойного упоминания
OptionButton (Позиция переключателя)
Так же, как и поле флажка, позиция переключателя предоставляет
пользователю возможность сделать выбор. Разница между ними
состоит в том, что выбор этот для OptionButton не является не­
зависимым. Все позиции переключателя, помещенные на форму,
206
Стандартные управляющ ие элементы
представляют собой өдиныи пөрөключэтөль (т. ө. окззывәются
связанными' между собой и выбрать можно только одну из них —
выбор любой другой отменяет предыдущий выбор). Чтобы помес­
тить на форму несколько независимых переключателей, соответ­
ствующие группы позиций необходимо помещать внутрь рамок
(см. Frame). Позиции переключателя также называют радиокноп­
ками. Кроме состояния «отключена» (Enabled = False) позиция
переключателя может находиться в одном из двух состояний: «вы­
брана» или «не выбрана».
Свойства
Alignment
Задает режим выравнивания текста в поле
справа от собственно позиции
переключателя. Доступны обычные режимі
выравнивания.
DisabledPicture
Определяет рисунок, который будет
отображаться в позиции переключателя
в состоянии «отключена».____________
Style
Значение этого свойства определяет стиль,
которым изображается позиция на форме.
Графический стиль соответствует кнопке
с надписью (кнопка после щелчка остается
утопленной и возвращается в исходное
положение по щелчку на другой позиции).
Value
Содержит логическое значение,
отражающее состояние позиции
(выбрана/не выбрана).
Методы
ни одного, достойного упоминания
СотЬоВох {Комбинированное поле)
Этот управляющий элемент представляет собой комбинацию
текстового поля и поля списка (отсюда и его название). В исход­
ном состоянии список свернут, но его можно развернуть щелчком
мыши. Значение в него можно ввести, как в обычное текстовое
поле, с клавиатуры или же выбрать из списка (при этом список
снова свернется, а выбранное значение отобразится в текстовом
Стандартные управляющие элементы
207
поле). Комбинированное поле позволяет выбрать один из трех
стилей: DropDown Combo — стандартный стиль (описан выше),
Simple Combo — отличается от стандартного тем, что список не
разворачивается, а просто позволяет перебирать свои значения
в текстовом поле, и, наконец, DropDown List
список развора­
чивается и позволяет выбрать значение, но вводить значения с кла­
виатуры при этом нельзя. Содержимое текстового поля, как и содерггилгка можно изменять в период выполнения программы.
Свойства
Item Data
Позволяет присвоить элементам списка
числовые значения.
ListCount
Содержит число элементов в списке.
Listlndex
Содержит номер элемента списка, который
выбран и помещен в текстовом поле. Если
значение в текстовое поле введено с
клавиатуры, то List Index = -1._____________
Newlndex
Содержит номер последнего включенного
в список элемента.
SelLength,
Эти свойства относятся к выделенному в
юм поле тексту (длина, начало, сг
SelStart, SelText
Sorted
Содержит логическое значение, разрешающее
(True) или запрещающее (False) алфавитную
сортировку элементов списка (сортировка
производится по возрастанию кодов символов)
Style
Определяет стиль комбинированного поля (см.
выше).
Содержит текст, отображающийся в текстовом поле
Text
Методы
Addltem
Служит для добавления элементов в список
Элемент может быть добавлен в указанную
позицию списка или в конец списка
Clear
Удаляет все элементы списка.
Служит для удаления указанного элемента
списка.
208
Стандартные управляющ ие элементы
Поле списка предоставляет пользователю возможность выбрать
один из нескольких элементов списка. Состав списка можно из­
менять в период выполнения. В отличие от комбинированного
поля поле списка не позволяет вводить значение с клавиатуры.
Свойства
Columns
Задает количество столбцов в списке,
1
по умолчанию список будет состоять из одного I
столбца.
• V-
IntegralHeight
Содержит логическое значение. Если
IntegralHeight = True (по умолчанию),
1
развернутый список будет принимать такие
1
размеры, чтобы был виден последний элемент I
списка.
- щ 1 1 И Н Н ^ |||Н
ItemData
Позволяет присвоить элементам списка
числовые значения
5<Д!
1
|
ListCount
Содержит число элементов в списке.
|
List
Возвращает элемент списка с указанным
номером или позволяет присвоить ему
значение.
Щ
|
|
|
Listlndex
Содержит номер выбранного в данный момент 1
элемента списка. Если выделено несколько
элементов списка, поле списка откажется
отдавать фокус. Если никакой элемент
не выбран, то Listlndex = -1.
MultiSelect
Содержит логическое значение, разрешающее
или запрещающее выделение нескольких
|
элементов списка одновременно.
|
Newlndex
Содержит номер последнего включенного
в список элемента.
SelCount
Содержит число выделенных в списке
элементов.
~
1
I
Стандартные управляющие элементы__________________________209
Свойства
Selected
Возвращает логическое значение, отражающее
статус элемента с заданным номером —
выделен он (True) или нет (False).___________
Sorted
Содержит логическое значение, разрешающее
(True) или запрещающее (False) алфавитную
сортировку элементов списка.
Задает стиль поля списка. Кроме стандартного
возможен стиль CheckBox, когда каждый
элемент списка содержит поле флажка.______
Text
Содержит выделенный в списке текст.
Методы
Addltem
Служит для добавления элементов в список
Элемент может быть добавлен в указанную
позицию списка или в конец списка или
Clear
Удаляет все элементы списка.
Remove
Служит для удаления указанного элемента
списка.
Полосы прокрутки позволяют элегантно и без усилий выбрать
числовое значение из заданного диапазона, не вводя при этом
ничего с клавиатуры. Имея дело с полосой прокрутки, пользова­
тель располагает тремя возможностями: можно «взяться» указа­
телем мыши за ползунок и перевести его в нужное место, можно
перемещать ползунок щелчками на кнопках, расположенных в
обоих концах полосы, и, наконец, можно щелчками на собственно
полосе заставить ползунок перемещаться в нужную сторону
более быстро. Важным преимуществом полос прокрутки является
то, что они всегда правильно отображают масштаб
пользова­
телю не нужно задумываться об абсолютных значениях, которые
он выбирает, середина полосы всегда соответствует середине
Стандартные управляющие элементы
210
■
диапазона, каким бы он ни был в абсолютном выражении. Полосы
прокрутки часто используют при работе с текстом и графикой для
отображения текущей позиции или для управления ею. Сущест­
вуют два варианта полосы прокрутки — вертикальная и горизон­
тальная.
-V
Задает величину изменения свойства Value
(т. е., фактически, шаг перемещения
ползунка) при щелчке на полосе прокрутки
между ползунком и кнопкой на конце
Здесь задается максимальное значение,
которое может принять свойство Value,
соответствует крайнему правому (верхнему!
положению ползунка.
Минимальное значение, которое может
принять свойство Value, соответствует
крайнему левому (нижнему) положению
ползунка.
-Задает величину изменения свойства V
при щелчке на одной из кнопок на конце
полосы.
Содержит текущее числовое значение,
соответствующее положению ползунка.
Value
Методы
ни одного, достойного упоминания
аймер)
Таймер предназначен для того, чтобы через заданные интервалы
времени генерировать событие Timer. В обработчик этого собы­
тия программист может поместить код для обслуживания процес­
сов, протяженных во времени (чаще всего таким процессом ока­
зывается анимация). Таймер невидим в период выполнения про­
граммы.
... і*. \
Стандартные управляющие элементы
211
Свойства
Enabled
Содержит булево значение, которое
разрешает (True) или запрещает (False)
работу таймера.
Interval
Задает интервал времени (в миллисекундах),
через который таймер должен генерировать
событие Timer.
Методы
нет
Ш
Этот управляющий элемент представляет собой комбинирован­
ное поле, содержащее список имеющихся в системе дисковых
устройств. Отдельные элементы списка можно сопроводить знач­
ками, чтобы указать тип соответствующего устройства, как это
принято в Windows. Пользователь может выбрать устройство, его
выбор можно использовать затем в коде для управляющего эле­
мента DirListBox.
Свойства
Drive
Содержит имя выбранного дискового
устройства (формат имени зависит от типа
устройства).
_____ ______ _
ListCount
Содержит число элементов в списке устройств.
List
Возвращает элемент списка с указанным
номером.
_______
Listlndex
Содержит номер выбранного в данный
момент элемента списка. Если никакои
элемент не выбран, то Listlndex — -1.
Методы
ни одного, достойного упоминания
212
Стандартные управляющ ие элементы
D IrU stB ox
Этот управляющий элемент показывает древовидный список ка­
талогов диска, имя которого ему задано (диск при этом стано­
вится текущим). Пользователь может выбрать произвольный ка­
талог, этот выбор затем программа может использовать для ра­
боты списка файлов FileListBox. Как правило, управляющий эле­
мент D irListBox используют совместно со списком дисковых
устройств DriveListBox. Однако каждый из них может работать
самостоятельно.
1—■
Свойства
1 ListCount
Содержит число элементов в списке каталогов.
I List
Возвращает элемент списка с указанным
номером.
Listlndex
1 Path
Содержит номер выбранного в данный момент
элемента списка каталогов. Если никакой
элемент не выбран, то Listlndex = -1.
Содержит полное имя выбранного
пользователем каталога и служит для
синхронизации с элементами FileListBox и
DriveListBox.
Методы
ни одного, достойного упоминания
и leLSstВ о х (
С
писок
1
A f X w . . Ч у \<s
Представляет собой список файлов, содержащихся в заданном
каталоге. Пользователь может выбрать один или несколько фай­
лов из списка, которые затем программа сможет использовать в
своих целях. В зависимости от значения ряда свойств может ото­
бражать выделенное тем или иным образом подмножество фай­
лов каталога.
213
Стандартные управляющие элементы
Свойства
Archive, Hidden,
Normal, Readonly,
System
Эти свойства представляют атрибуты файлов,
которые необходимо отображать в списке. Зна­
чение свойства, равное True, соответствует ото­
бражению файлов с одноименным атрибутом.
FileName
Имя файла, соответствующее выделенному
элементу списка.
___________
ListCount
Содержит число элементов в списке каталогов
List
Возвращает элемент списка с заданным
номером.
Listlndex
Содержит номер выбранного в данный
момент элемента списка файлов. Если
никакой файл не выбран, то Listlndex =
MultiSelect
Логическое значение, разрешающее
выделение нескольких элементов списка
одновременно.
_____________
Path
Полное имя текущего каталога. Служит для
синхронизации с элементом DirListBox.
Pattern
Здесь можно задать строковое значение,
которое будет играть роль маски для
отображаемых файлов. Маска задается по
правилам MS DOS. Значение по умолчанию
«*.*» (все файлы).
Selected
Возвращает булево значение: True, если
элемент с заданным номером выделен.
Методы
ни одного, достойного упоминания
ш яддт
Shape ЩФигура)
Универсальный графический элемент Shape способен «превра­
щаться» в различные геометрические фигуры. Кроме вида фигуры
(всего их шесть) можно изменять толщину, стиль и цвет линий, цвет
и стиль заполнения и др. Все это так же, как и вид фигуры, можно
изменять и в редакторе формы, и в период выполнения программы.
214
Стандартные управляющ ие элементы
Свойства
BackStyle
Определяет режим фона фигуры. Значение О
соответствует прозрачному фону,
1 - непрозрачному.
BorderColor
Этим свойством определяется цвет линий,
которым будет изображаться фигура.
BorderStyle
Определяет стиль линий фигуры.
BorderW idth
Значение этого свойства задает толщину линий
фигуры. ............................. .......... - -ЩЩІИ ІЯ
DrawMode
Выбирает режим рисования линий фигуры
По умолчанию принят стандартный режим.
FillColor
Определяет цвет заполнения фигуры.
FillStyle
Позволяет выбрать стиль заполнения
Shape
Это свойство задает вид фигуры, в которую
«превратится» элемент. Всего существует шесть
разных видов фигур, значение по умолчанию —
прямоугольник.
Методы
ни одного, достойного упоминания
Все потребности в геометрических фигурах покрывает элемент
Shape. Не хватает лишь простой линии, которая и представлена
элементом Line. Можно изменять цвет, толщину и координаты
КОНЦОВ ЛИНИИ.
л
1
■ "
Свойства
BorderColor
Этим свойством определяется цвет линии.
BorderStyle
Задает стиль линии.
BorderWidth
Значение этого свойства задает толщину линии
Стандартные управляющие элементы
215
Свойства
DrawMode
Выбирает режим рисования линии. По
умолчанию принят стандартный режим.
X I Y1
Пара свойств, содержащих координаты начала
линии._____
'
Х2, Y2
Аналогично пара свойств, содержащих
координаты конца линии
Методы
ни одного, достойного упоминания
Image (Графический образ.
us®
__ лемент Image позволяет отображать точечный риCWOK загруженный из графического файла (поддерживаются
форматы BMP, WMF, EMF, ICO, JPEG и GIF). Элемент очень прост
в обращении и потребляет мало системных ресурсов, поэтому
ему всегда следует отдавать предпочтение перед управляющим
элементом PictureBox, если нет каких-то особых обстоятельств.
Кроме того, в отличие от всех прочих способов поместить на
форму точечный рисунок, использование элемента Image обла­
дает еще одним преимуществом — он способен автоматически
масштабировать рисунок.
...............
....J
Свойства
Picture
Здесь задается имя файла, точечный рисунок из
которого должен отображать элемент Image.
Stretch
Логическое значение, разрешающее (True) или
запрещающее (False —значение по умолчанию)
автоматическое масштабирование рисунка
к границам элемента Image.
Методы
ни одного, достойного упоминания
216
Стандартные управляющ ие элементы
PictureBox (Картинка)
Это еще один элемент-контейнер. В него можно помещать другие
управляющие элементы, на его поверхности могут работать гра­
фические методы, наконец, в него можно поместить точечный ри­
сунок, загруженный из графического файла.
Свойства
Auto Redraw
Когда это свойство имеет значение True,
результаты работы графических методов на
поверхности картинки будут автоматически
перерисовываться всякий раз, когда она была
по тем или иным причинам невидимой или
изменяла размеры.
н
AutoSize
Если в элемент Picture загружен точечный
рисунок, то при AutoSize = True элемент будет
автоматически менять свои размеры так, чтобы
рисунок полностью в него помещался.
BorderStyle
Задает стиль обрамления. ~
CurrentX, Cur
rentY
Подобно одноименным свойствам формы эти
свойства содержат координаты текущей позиции
вывода.
- ШШШ
DrawMode
Задает режим графического вывода.
DrawStyle
Задает стиль линии для графических методов
элемента PictureBox.
DrawWidth
Задает толщину линии для графических методов.
FillColor
Задает цвет заполнения для фигур, созданных с
помощью графических методов элемента
PictureBox.
FillStyle
Здесь можно выбрать стиль заполнения
вышеупомянутых фигур.
Picture
Имя графического файла, где содержится
точечный рисунок, который должен
отображаться на поверхности элемента
PictureBox.
Свойства
ScaleHeight,
ScaleW idth
Эти два свойства содержат соответственно
высоту и ширину элемента PictureBox
в выбранной системе координат.________
ScaleLeft,
ScaleTop
Координаты верхнего левого угла картинки
PictureBox в выбранной системе координат
ScaleMode
Этим свойством задается единица измерения,
используемая на картинке
Методы
Circle
Графический метод, позволяющий рисовать
окружности и эллипсы на поверхности элемента
PictureBox
CIs
Очищает картинку от следов текстового
и графического вывода.
Line
Рисует линию на поверхности элемента PictureBox
PaintPicture
Загружает точечный рисунок из графического
файла. Поддерживаются форматы BMP, WMF,
EMF, ICO и DIB.
2 _____________ ________
Возвращает RGB-значение цвета точки
с заданными координатами на поверхности
элемента PictureBox.
______ _______
_
Point
PSet
Рисует точку заданного цвета в заданных
координатах на поверхности элемента
PictureBox.
____________
Refresh
Принудительно перерисовывает картинку
PictureBox и ее содержимое.
Scale
С помощью этого метода можно задать систему
координат на поверхности элемента PictureBox.
ScaleX, ScaleY
Пара методов для преобразования значений
координат из одной системы в другую.
TextHeiqht,
TextW idth
Возвращают соответственно высоту и ширину
текстовой строки с заданным шрифтом, которые
она будет иметь при выводе на поверхность
элемента PictureBox.
218
Стандартные управляющ ие элементы
...
И М ...
Data (Данные)
Управляющий элемент Data обеспечивает доступ к базам данных.
В отличие от других способов доступа применение элемента Data
позволяет очень просто и без проблем связать данные в базе с
управляющими элементами на форме. Только управляющие эле­
менты, которые имеют свойство DataSource, можно связать с
базой данных посредством элемента Data. Элемент Data обес­
печивает навигацию по базе данных и предлагает множество
функций, связанных с управлением данными.
Свойства
BOF, EOF
Свойства содержат логические значения,
отражающие состояние указателя текущей записи
в таблице. BOF принимает значение True в
случае, когда указатель пытаются переместить с
первой записи на предыдущую, a EOF - когда с
последней записи
наследующую.
| Щ
Caption
Задает надпись на элементе Data, которая
располагается между навигационными кнопками
элемента.
• г,-
Connect
Возвращает значение, содержащее информацию
о базе данных, к которой подключен элемент
Data.
Database
Это свойство возвращает ссылку на объект типа
Database, который элемент Data создает для
манипуляций с физической базой данных.
DatabaseName
Задает источник данных для элемента Data.
В частности, это может быть имя файла или
каталога, в котором содержится база данных.
DefaultType
Значение этого свойства определяет механизм
доступа к данным, которым должен пользоваться
элемент Data (1 означает ODBCDirect, 2 - Jet).
EditMode
Содержит одну из констант, отражающих
состояние редактирования текущей записи.
Свойства
Exclusive
Options
Разрешает или запрещает режим
исключительного доступа к данным.
набор
Эю свойство содер
параметров объекта Recordset, содержащегося в
одноименном свойстве элемента Data. После
изменения значения этого свойства в период
выполнения программы необходимо вызвать метод
Refresh, чтобы новые параметры возымели действие
Readonly
Разрешает (False) или запрещает (True)
изменение содержимого базы данных,
к которой подключен элемент Data.
RecordSet
Содержит объект типа Recordset, с помощью
которого элемент Data осуществляет доступ
к данным.
Определяет разновидность объекта типа
Recordset, который будет создан элементом Data
(таблица, динамический набор и др.).
RecordsetType
RecordSource
Задает логический источник данных для элемента
Data (это может быть таблица, SQL-выражение
или объект типа QueryDef) . ________ ___________
Методы
Refresh
Открывает или обновляет базу данных
в случае изменения значений свойств
DatabaseName, Readonly, Exclusive или
Connect. Используют также для создания
динамического набора DynaSet в свойстве
Recordset.___________
UpdateControls
Update Record
Содержимое управляющих элементов, связанных
с базой данных с помощью элемента Data,
приводится в соответствие с текущим состоянием
базы.______
Содержимое текущей записи в объекте RecordSet
приводится в соответствие
с содержимым управляющих элементов,
связанных с данными посредством элемента Data.
220
Мышь» клавиатура, события
5.2. Мышь, клавиатура, события
Обзор
8
вреда Windows насыщена событиями, имеющими отношение
к процессу управления приложениями. При любых манипуля­
циях пользователя с клавиатурой или мышью генерируются
события. События представляют собой специального вида со­
общения, создаваемые средой Windows.
Ш Приложения должны реагировать на эти сообщения. Событие,
как и всякое сообщение, имеет отправителя и получателя. От­
правителем (источником события) может быть, к примеру,
клавиатура или мышь (хотя, конечно, список источников со­
бытий в среде Windows этим не исчерпывается). В роли по­
лучателя может выступать окно приложения и соответственно
управляющий элемент в этом окне, который обладает фоку­
сом клавиатуры. Чтобы приложение отреагировало на собы­
тие, программист должен предусмотреть в коде программы
соответствующую процедуру — обработчик данного события.
Если событие останется необработанным (в программе не
предусмотрена процедура для его обработки), то оно безвоз­
вратно канет в пучины Windows и будет потеряно для прило­
жения, которому оно адресовалось.
■ Написать обработчик события для Visual Basic-программы
очень просто. Достаточно развернуть список объектов в окне
кода (слева вверху), выбрать необходимый объект, а затем в
списке справа от него — событие, и в текст будет вставлена
заготовка процедуры-обработчика данного события для дан­
ного объекта. Программисту остается лишь ввести в заготовку
свой код.
■ Два события, которые поддерживают почти все управляющие
элементы — GotFocus (Получил фокус) и LostFocus (Потерял
фокус). Первое генерируется в момент получения элементом
фокуса клавиатуры, второе — когда фокус перемещается на
какой-нибудь другой объект. Пока управляющий элемент об­
ладает фокусом, события клавиатуры адресуются ему (проис­
ходят для него).
- ^
^
Мышь, клавиатура, события
221
Ряд событий формы имеет особенно большое значение и
часто будет фигурировать в последующих главах. Описание
этих событий приведено в таблице 5.2.
Таблица 5.2. Важные события формы
Событие
Описание
Load
Это событие происходит при загрузке формы
в память. Процедуру обработки события Load
обычно используют для инициализации
|p a in t
Происходит, когда форма перерисовывает свое
1 содержимое.
QueryUnload
I
Происходит непосредственно перед событием
Unload, т. е. перед выгрузкой формы из памяти.
В обработчик этого события можно поместить
код, отменяющий выгрузку формы.
Resize
^то соиытие
■иpin j'rvwm ...............
размеров окна (в том числе при первом
появлении формы на экране, свертывании или
развертывании окна формы). Процедуру
обработки события Resize обычно используют
для манипуляций с размерами и положением
элементов на форме.
Terminate
Последнее событие жизненного цикла формы.
Происходит, когда из памяти удаляются все
ссылки на форму и последняя прекращает свое
существование.
Unload
Происходит при выгрузке формы из памяти
(ссылки на нее остаются, и она может оыть
заново загружена).
|
I
1
5.2.1. Мышь
Мышь является весьма усердным поставщиком событий. В таб­
лице 5.3 приведен список событий, источником которых является
мышь, и событий, с мышью связанных.
222
М ышь, клавиатура, события
Таблица 5.3. События мыши
Событие
Описание
Click
Событие «Щелчок» происходит, когда
пользователь нажимает, а затем отпускает
кнопку МЫШИ.
|
DragDrop
Сигнализирует об окончании перетаскивания
объекта с помощью технологии Drag&Drop.
DragOver
Генерируется в процессе перетаскивания
объекта с помощью технологии Drag&Drop.
MouseDown
Происходит, когда пользователь нажимает
кнопку мыши. Параметры процедурыобработчика позволяют определить, какая из
кнопок мыши была нажата и не
сопровождалось ли это нажатием клавиш
[Shift], [Ctrl] или [Alt].
1
f
Генерируется в процессе перемещения мыши.
MouseMove
Mousellp
Примечание
Происходит после события MouseDown, когда
пользователь отпускает ранее нажатую кнопку
мыши.
j
-
Ш Набор параметров, передаваемых в процедуры обработки
всех событий, упомянутых в таблице 5.3, включает координаты
указателя мыши на момент события. Их значение можно ис­
пользовать в коде процедуры.
щ
Н Н rJ Л
Обзор. Пример
Ш Вначале несколько слов о свойствах некоторых управляющих
элементов, используемых в этой программе.
• Свойство Autosize этикетки Label часто оказывается очень
полезным. Если ему присвоить значение True, то этикетка
будет автоматически изменять свои размеры в соответст­
вии с размерами ее содержимого.
Мышь, клавиатура, события
эрое задает
Для выбора
значения свойства Font в окне свойств используите неболь­
шую кнопку с тремя точками, которая появляется в поле
свойства, когда оно становится текущим. С помощью этой
кнопки открывается диалог выбора шрифта. Шрифт можно
изменять и в период выполнения программы (см. 7.3).
Пара свойств BackColor и ForeColor задает цвета фона и
переднего плана (т.е. в данном случае цвет литер). Комби­
нированное поле выбора цвета, имеющееся в окне свойств
во всех полях, определяющих цвет, содержит две вкладки.
Svstem и Palette. Вкладка System позволяет выбрать один
из системных цветов, а вкладка Palette — любой поддерживаемый системой цвет.
Еще два свойства, важных для данного примера: DragM ode
и D raglcon. Первое из них определяет режим перетаскива­
ния объектов мышью с помощью технологии Drag&Drop.
Значение 0 соответствует ручному режиму (т. е. для иници­
ализации процесса перетаскивания необходимо будет вызвать метод Drag), значение 1 - автоматическом» режиму
(Visual Basic все сделает сам). Свойство Огэдісоп опред
ляет значок, которым будет заменено изображение контура
объекта в процессе перетаскивания.
Свойство Tag каждый может использовать по своему усмот­
рению, обычно в нем возвращают результат работы специ
ального диалога. В данном примере свойство Tag исполь­
зуется для передачи имени объекта.
Если вы хотите запретить внесение да льней
зменени „
в управляющий элемент, установите его свойство Locked в
положение True.
^
Важнейшее свойство текстового поля - Text. Оно содержит
текст, который отображается в текстовом поле.
Вернемся, однако, к самому п р и м е р у пр°грагимы. Онпризван
показать вам как обрабатываются события мыши. Каждое со
бытие из таблицы 5.3 в нем использовано по меньшей мере
один раз.
1И П У 1Ш I
ГI VU W
1
r i -------
w
ш
и
^
х
и
224
Мышь, клавиатура, события
щ что делает эта программа? На рисунке видно три этикетки (А,
В, С), текстовое поле и командная кнопка. В нижнем левом
углу находится еще одна этикетка, отображающая текущие ко­
ординаты указателя мыши. Если щелкнуть на этикетке А, то
вместо буквы А на мгновение появится слово «Привет». Эти­
кетки В и С можно перетаскивать по форме с помощью мыши,
при этом строка в текстовом поле сообщает, над каким объ­
ектом в данный момент находится перетаскиваемая этикетка.
■ Теперь вы знаете, что делает программа. Осталось объяснить,
как она это делает.
'
• Вначале этикетка А. Ей посвящены две процедуры —
lblA_MouseDown() и lblA_MouseUp(), обрабатывающие соот­
ветственно нажатие и отпускание кнопки мыши в момент,
когда указатель находится на этикетке. В первом случае
свойство Caption получает значение «Привет», во втором
ему возвращается значение «А».
• Чтобы иметь возможность перетаскивать этикетки В и С,
одновременно отображая в текстовом поле объект, над ко­
торыми одна из них находится, необходимо обрабатывать
события формы DragOver и DragDrop. В процедурах обра­
ботки события DragOver (их три — для формы, кнопки и для
текстового поля) использован параметр Source, что означа­
ет источник события, будь то этикетка В или С. Для того
чтобы определить, которая из этикеток вызвала событие
DragOver, используется свойство Tag. Событие формы
DragDrop используется для того, чтобы завершить процесс
перетаскивания и методом Move переместить этикетку на
новое место (процедура Form_DragDrop).
• Еще одна этикетка в совокупности с событием MouseMove
обеспечивает отображение текущих координат указателя
мыши (процедура Form_MouseMove). Принцип очень
прост— каждый раз, когда происходит событие MouseMove
(мышь перемещается), надпись на этикетке IblCoordinates
меняется. С помощью функции Str() числовые значение пара­
метров X и Y преобразуются в строку и помещаются в свой­
ство Caption этикетки. Обратите внимание, при перетаски-
Мышь, клавиатура, события
___________ _________________
вании этикеток В или С координаты не отслеживаются. Для
этого потребовалось бы выполнять аналогичные манипуля­
ции в процедурах обработки событий DragOver.
• Осталась командная кнопка cm dExit (кнопка Выход). С ней
все просто — при обработке ее события C lick (процедура
cmdExit_Click) вызывается метод Unload формы (Me озна­
чает «текущая форма») и затем с помощью оператора End
выполнение программы завершается. Событие C lick проис­
ходит не только по щелчку мышью — такого же результата
можно достичь, нажав клавишу [Enter], когда фокус клави­
атуры находится на кнопке.
Таблица
Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Мышиная возня
CommandButton | Name
Caption
T
p x tB o x
TextBox
8 Заказ 3337
cmdExit
ыход
Name
txtAction
BackColor
(серый)
Locked
True
Мышь, клавиатура, события
Объект
Свойство
Значение
Name
IblCoordinates
Caption
(пуаая арока)
Name
AutoSize
Caption
MS Sans Serif
18 пунктов
жирный
ForeColor
(белый)
Name
Caption
Drag Mode
1-Automatic
MS Sans Serif
18 пунктов
ForeColor
(синий)
Name
Caption
Font
MS Sans Serif
18 пунктов_______________
Bold____________________ _
ForeColor
(красный)
_________ _
Мышь, клавиатура, события
_____________
227
Исходный текст
Private Sub cmdExit_Click()
Unload Me
End
End Sub
Private Sub cmdExit_DragOver(Source As Control, _
X As Single, У As Single, _
State As Integer)
txtAction.Text = Source.Tag & __
" над командной кнопкой
End Sub
Private Sub Form_DragDrop(Source As Control, _
X As Single, Y As Single)
Source.Move X, Y
txtAction.Text = ""
End Sub
Private Sub Form_DragOver(Source As Control, _
X As Single, Y As Single, _
State As Integer)
txtAction.Text = Source.Tag & " над формой!”
End Sub
Private Sub Form_MouseMove(Button As Integer, _
Shift As Integer, X As Single, _
Y As Single)
lblCoordinates.Caption = Str(X) & ". " & Str(Y)
End Sub
Private Sub lblA_MouseDown(Button As Integer, Shift _
As Integer, X As Single, Y As Single)
1 Ы А . Caption = "Привет"
End Sub
Private Sub lblA__MouseUp(Button As Integer, Shift __
As Integer, X As Single, Y As Single)
lblA.Caption = "A"
End Sub
228
Мышь, клавиатура, события
Private Sub txtAction__DragOver(Source As Control, __
X As Single, Y As Single, State As _
Integer)
txtAction.Text = Source.Tag & " над текстовым _
п о л е м !*
End Sub
Private Sub Form__Load()
lblC.Tag = "Буква С "
lblB.Tag = "Буква В "
End Sub
5.2.2. Клавиатура
Обзор
Клавиатура, как и мышь, является источником различных собы­
тий, на которые программа может реагировать. Есть три вида со­
бытий, которые может генерировать клавиатура. Они различают­
ся как по моменту возникновения, так и по правилам обработки.
Я События KeyDown (Клавиша нажата) и KeyUp (Клавиша от­
пущена) обычно служат для того, чтобы отслеживать состоя­
ние функциональных клавиш, клавиш навигации и других, ис­
пользуемых для управления программой.
Ш Для ввода символов используют событие KeyPress, которое
заключается в том, что нажата и отпущена одна из клавиш,
соответствующих символам кода ASCII. В обработчик события
передается непосредственно код символа, который можно
преобразовать в символ с помощью функции Chr(). При на­
жатиях функциональных и других «несимвольных» клавиш со­
бытие KeyPress не происходит.
■ При обработке событий клавиатуры необходимо учитывать
следующее обстоятельство: эти события происходят только
для того управляющего элемента, который в данный момент
обладает фокусом клавиатуры. И только в случае, когда на
форме нет ни одного элемента или все элементы отключены,
Мышь, клавиатура, события
229
это событие получит форма. Это означает, что для «глобаль­
ных» клавиш, т. е. клавиш, которые должны действовать вне
зависимости от положения фокуса клавиатуры, необходимо
предусматривать обработку у всех возможных элементов«приемников». К счастью, есть более простой выход. Форма
обладает свойством KeyPreview, которое по умолчанию
имеет значение False. Если же присвоить ему значение True,
то каждое событие клавиатуры будет происходить два раза:
сначала для формы, затем для управляющего элемента, на ко­
тором находится фокус. Это позволяет обработчикам клавиа­
турных событий формы перехватывать и просматривать все на­
жатия клавиш.
■ Существуют три исключения из правил, когда нажатие клави­
ши не влечет за собой генерацию событий клавиатуры:
• Если свойство D efault одной из. командных кнопок формы
имеет значение True, то нажатие клавиши [Enter] игнориру­
ется (точнее, оно обрабатывается вне контекста событий
клавиатуры, речь идет о генерации события C lick для этой
командной кнопки, обычно это кнопка ОК).
• Аналогичным образом, если свойство Cancel одной из ко­
мандных кнопок формы имеет значение True, то нажатие
клавиши [Esc] игнорируется — при этом будет задейство­
вана именно эта кнопка вне зависимости от положения фо­
куса. Этот механизм предусмотрен для кнопок Cancel (От­
мена).
• Нажатия клавиши [Tab] игнорируются, поскольку эта клави­
ша служит для перемещения фокуса клавиатуры.
Таблица 5.5. События клавиатуры
I Событие
KeyDown
Описание
Происходит при нажатии клавиши.
Мышь, клавиатура, события
Обзор. П рим ер п р о гр а м м ы
§§ Вначале познакомимся с некоторыми свойствами:
• Свойства M ouselcon и M ousePointer используются со­
вместно. Если вам требуется изменить вид указателя мыши,
то среди значений свойства M ousePointer вы можете вы­
брать один из стандартных для среды Windows указателей.
Если же требуется нечто особенное, то свойству Mouse­
Pointer следует дать значение 99 (определяемый пользо­
вателем тип) и в свойстве M ouselcon задать имя ICOфайла, содержащего нужный значок.
Щ Пример программы демонстрирует обработку событий KeyDown и KeyPress.
Ш МШ ш
Я Программа позволяет управлять буквой на форме с помощью
клавиатуры. При нажатиях клавиш навигации буква переме­
щается в заданном направлении. Первоначально это буква А,
но если нажать клавишу с другой буквой, то она заменит букву
А на форме.
Ш Краткие пояснения по исходному коду:
• Первой процедурой, которая будет вызвана при старте про­
граммы, является процедура FormJ-oad — она выполняется
по событию Load (Загрузка) формы. Код этой процедуры
вычислит координаты центра формы и поместит туда эти­
кетку, которая содержит букву А. Для вычислений исполь­
зованы свойства W idth и Height этикетки, а также свойства
ScaleWidth и ScaleHeight формы. Последние содержат вы­
соту и ширину рабочей области формы. Наконец, для пере­
мещения этикетки вызван метод Move.
• Наиболее сложные действия выполняются кодом процеду­
ры, обрабатывающей событие KeyDown. С помощью кон­
струкции Select Case здесь анализируется значение пара­
метра KeyCode, и если он содержит код одной из клавиш
навигации, то предпринимаются необходимые действия.
Координаты этикетки с буквой вычисляются заново с уче­
том необходимого перемещения. При этом в каждом из
четырех Саэе-операторов выполняется проверка
не до-
231
Мышь, клавиатура, события
стигла ли буква границы формы (если да, то координаты
этикетки меняются так, что этикетка перемещается к про­
тивоположной границе формы). В операторах Case ис­
пользованы клавиатурные константы (это предопределен­
ные константы Visual Basic, об их назначении нетрудно до­
гадаться по названию). Полный список клавиатурных кон­
стант Visual Basic можно найти в каталоге объектов
(библиотека VBRUN, рубрика KeyCodeConstants). Прямо
оттуда, посредством буфера обмена их можно перенести
в окно кода. Второй параметр процедуры — Shift. Он несет
информацию о состоянии клавиш [Shift], [Ctrl] и [Alt] в мо­
мент нажатия той клавиши, которая вызвала событие KeyDown. Чтобы отфильтровать из параметра Shift состояние
одной из этих трех клавиш, используют константы-маски
(см. табл.5.6). Например, это можно сделать с помощью
следующих операторов:
ShiftDown = (Shift And vbShiftMask) > О
CtrlDown = (Shift And vbCtrlMask) > 0
AltDown = (Shift And vbAltMask) > 0
If ShiftDown And CtrlDown Then ...
• Осталось рассмотреть код процедуры Form_KeyPress.
Она занимается нажатиями на клавиши с символами. Код
символа нажатой клавиши берется из параметра KeyAscii,
преобразуется в символ с помощью функции Chr() и по­
мещается в свойство Caption нашей «блуждающей» эти­
кетки.
Таблица 5.6. Константы м аски для параметра S hift
Константа
Значение
vbShiftMask
1 (первый бит значения Shift)
vbCtrlMask
2 (второй бит значения Shift)
vbAltMask
4 (третий бит значения Shift)
Мышь, клавиатура, события
Примечание
в Пакет Visual Basic включает в себя множество ресурсов, кото­
___________________ ^ —
—
—
—
рые вы можете использовать в своих программах. Это указа­
тели мыши, значки, точечные рисунки и др. Все это можно
найти в каталоге ....\DEVSTUDIO\VB\GRAPHICS.
А
Таблица 5.7. Управляющие элементы и их свойства
в примере программы
Значение
frmMain
Мышь, клавиатура, события
И сход ны й текст
Option Explicit
Dim iXPos As Integer
Dim iYPos As integer
Const iStep As Integer = 100
Private Sub Form_KeyDown(KeyCode As Integer, Shift
As Integer)
Select Case KeyCode
Case vbKeyLeft
iXPos = iXPos - iStep
If iXPos <= 0 Then
iXPos = frmMain.Width - _
lblWalkerChar.Width
End If
Case vbKeyUp
iYPos = iYPos - iStep
If iYPos <= 0 Then
iYPos = frmMain.Height 5 __
lblWalkerChar.Height
End If
Case vbKeyRight
iXPos = iXPos + iStep
If iXPos >= frmMain.Width Then
iXPos m 0
End I f
Case vbKeyDown
iYPos = iYPos + iStep
If iYPos >= frmMain.Height Then
iYPos = 0
End If
233
М еню и диалоги
234
End Select
lblWalkerChar.Move iXPos,
iYPos
End Sub
Private Sub FormKeyPress(KeyAscii As Integer)
lblWalkerChar. Caption = Chr(KeyAscii)
End Sub
Private Sub Form_Load()
iXPos = 0.5 * (frmMain.ScaleWidth - .
lblWa1kerChar.Width)
iYPos = 0.5 * (frmMain.ScaleHeight
lblWalkerChar.Height)
End Sub
5.3. Меню и диалоги
Важнейший элемент любой программы -
п ^ оаательсшй^ин-
P
C »»"»
? Гпрактически
£ " S всеми
3
ность
программы
с т а н д а р т н ы м и а л ^ .^ ...,
характерными для Windows-приложения. При этом
гму гложных элементов (таких, как меню и диалоги) существенн
облегчается. В этом разделе мы познакомимся с созданием
темы меню и с диалогами Visual Basic.
Меню и диалоги
235
5.3.1. Меню
Menu Editor
Caj^on:
Надо
Index:-;
Шама
OK
Cancel
rm uFnJts
ш
Shortcut:
zi
{(None)
л:
HelpContextID; Г о
____
Г
®
ІФР>КТЫ
'~ Щ
К Я т Ы
P" Enabled
R e e fe d
« ■ М
Ne^oUatePostion:
* М
.■
1
№*
& :
P tfsfcle
In se rt
TX
p £ in d o w U s t
*•*—
**** л
w
л»..•М»-*•»*,
*•*••••«••
1
jo - None
|
Delete
j
И
-ЧДитр^оеые
—
~-ГЬ*Ю
№
1
—~Апельо*ы
•••Яблоки
•••
Ғруш
Овощи
•-О гмзцы
-■Картофель
•■-Понидоры
ч |»#ыЯ|
__________________
d
S3©
Мало найдется Windows-программ, которые бы обходились без
системы меню. Создание меню (в том числе контекстных) в Visual
Basic-программах существенно облегчается благодаря редактору
меню Menu Editor. Прежде чем перейти к примеру программы,
демонстрирующему технику работы с меню, давайте поближе
рассмотрим Menu Editor.
Обзор. Menu Editor
■
■
Menu Editor можно запустить сочетанием клавиш [Ctrl]+[E] или
одноименной командой меню Tools, или посредством кнопки
панели инструментов (во всех трех случаях текущим должно
быть окно формы).
На рисунке изображено окно Menu Editor в процессе создания
меню для примера программы, которым мы вскоре займемся.
Как видите, окно состоит из двух основных областей:
• В верхней части окна расположены поля свойств Caption и
Name текущего элемента меню. Первое из них определяет
надпись в меню, второе — имя элемента меню в исходном
коде программы.
Меню и диалоги
________________________________ _____ _
236
•
в нижней части окна отображает струюуру меню.
Кнопки над ним позволяют эту структуру редактировать.
С л е д у е т обратить внимание на следующие элемента, окна Menu
п о п р
Ed,* ° Важнейшим элементом меню является поле N a m e ° “ ° 6" '
гги т, одпппнрно для всех элементов из
списков нижней части окна, иначе редактор меню не сможет
гпела^ь свое дело-присоединить меню к форме. Значение
свойства Name определяет имя ?леме^та ^ НЮ_ Внашись°в
граммы, тогда как значение свойства C aption
адп
меню.
л „
Если вы планируете создать массив элементов меню, то
следует заполнить поле Index.
Установите флажок в поле Checked, и пункт меню будет по­
мечен галочкой уже при старте программы.
• Свойство Enabled позволяет отключить пункт меню, для
этого в поле Enabled следует сбросить флажок, что соот­
ветствует Enabled = False. При этом пункт меню будет не­
доступен для пользователя. Изображение пункта в меню потускнеет.
Ян ■
9Ш
с помощью свойства V isible (Visible = ^
пункт ме^ю
можно сделать невидимым, при ^ Р С ^ н ы е г ^ ы
этого меню сдвинутся так, чтобы заполнить опустевшее
место.
структуру
меню.8 РедаТировать ее можно с помощью набора кнопок,
расположенных чуть выше:
• Кнопки со стрелками позволяют перемещаться по структуре
и изменять уровень подчиненности
" ^ І^ е н мер, щелчок на кнопке «стрелка вправо». СДО^ает вьщ ^е н
ный элемент меню в более подчиненное положение (он ста
новится пунктом подменю по отношению к
и левее расположенному) пункту. И наоборо , щ
кнопке «стрелка влево» перемещает элемент в р
рархии меню.
4 * 1; ‘
Меню и диалоги
■
237
• Кнопка N ext включает в систему меню еще один пункт, если
текущий пункт—- последний (в противном случае следующий
пункт меню становится текущим), кнопка In se rt вставляет
новый пункт меню перед текущим, кнопка D elete удаляет
текущий элемент меню.
Иерархия системы меню отображается в текстовом поле
внизу. При этом элементы, занимающие более высокий уро­
вень, сдвинуты влево относительно «подчиненных» элементов.
Таким образом, элемент может быть одновременно пунктом
меню, представленного элементом, расположенным выше и
левее, и заглавием подменю, содержащего элементы, распо­
ложенные ниже и правее.
Обзор. Пример
Теперь мы перейдем к рассмотрению процедур программы-примера, но вначале остановимся на двух важных свойствах:
• A lignm ent (Выравнивание). Это свойство отвечает за режим
выравнивания текста, отображаемого управляющим эле­
ментом. В данном примере речь идет о выравнивании текс­
та в этикетках.
• B orderS tyle (Стиль обрамления). Значение этого свойства
определяет внешний вид границ управляющего элемента на
форме.
Учебная программа, которую вам предлагается реализовать,
снабжена системой меню. Элементы главного меню представля­
ют собой виды продуктов питания (фрукты, овощи, орехи); их
пункты являются либо названиями конкретных продуктов, либо
заглавиями подменю. При выборе одного из пунктов программа
выводит сообщение, которое случайным образом комментирует
выбранный продукт. Исходный текст программы приведен ниже,
при этом несколько моментов нуждаются в пояснениях:
• Form_MouseDown. Код этой процедуры обеспечивает по­
явление контекстного меню по щелчку правой кнопки мыши
на поверхности формы. Нажатие именно правой кнопки рас­
познается благодаря значению параметра Button. Затем,
вызовом метода PopupM enu объекта Form меню m nuFruits
М еню и диалоги
отбывается в режиме контекстного меню. Если в юнтекстиом меню требуется исключить некоторые пункты, то перед
вы аоГм » £ S > PopupM enu их СВОЙСТВ, Vls.b.e следует
присвоить значение False.
В исходном тексте вы увидите ряд однотипных nP0L*eWP»
обрабатывающих событие C lick каждого из пунктов меню.
Й ГониТ ы зы ваю т процедуру Аппаипсе, а затем отключают
соответствующий пункт меню (продукт «съеден»).
Пооиедура Аппаипсе() использует случайное число для вы­
бора одного из вариантов сообщения. При этом используется функция (W O .
псевдослучайное) число в диапазоне от и д
вида
Int ((КонеиДиапазона | НачалоДиапазона +
НачалоДиапазона)
* Rnd() +
_
позволяет получить случайное целое число в заданном диа­
пазоне (функция Int возвращает целую часть числа). Затем,
с tomouS o конструкции Select Case делается с л у ч а е н
выбор элементов фразы о продукте и законченная фраза
доводится до сведения пользователя.
Здоровая пища
Фрукты
Овощи
Орехи
Цитрусовые
Лимоны
Яблоки
Алеяьсмиы
А пельсины - э то о че н ь в ку с н о
Меню и диалоги
239
Таблица 5.8. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Здоровая пища
I
.ф
Label
Menu(H)
Menu(U)
1 Menu(l)
Menu(l)
Menu(l)
Menu(l)
Menu(U)
Name
IbiDisplay
Alignment
2-Center
I
BorderStyle
1-Fixed Single
|
Caption
Хотите кушать?
|
Font
MS Sans Serif
|
10 пунктов
I
Bold
I
Name
mnu Fruits
I
Caption
Фрукты
j
Name
mnuZitrus
I
Caption
Цитрусовые
j
Name
mnuLemon
|
Caption
Лимоны
I
Name
mnuOrange
Caption
Апельсины
Name
mnuApple
Caption
Яблоки
Name
mnuPear
Caption
Груши
Name
mnuVegetable
Caption
Овощи
|
Меню и диалоги
______________ ________________ ______"
240
Свойство
Объект
Name
Menu(l)
Caption
Name
Menu(l)
Caption
Name
Menu(l)
Огурцы
mnuPotato
Картофель
mnuTomato
Caption
Name
mnuNuts
Caption_______
Орехи_____________
Caption_______
| Menu(l) _____
mnuCucumber
Томаты
1 Name________ _
1 Menu(l)
Значение
1 Name________
Caption_____
1 mnuWalnut_____
Грецкий орех______
[mnuHazelnut_______
Лесной орех
Примечание
■ і» д а г а х п я * г Е « 5 к
тора меню M enu E dito r (см. также рисунок).
Menu(H) означает заглавие меню
M enu(U) означает элемент меню, являющийся заглавием
подменю
• M enu(l) означает элемент меню
И сходны й текст
Private Sub Form_MouseDown(Button As 1 nteger ,' f i f t As Integer, X As Single, Y As Single)
If Button = 2 Then
frmMain.PopupMenu mnuFruits
End I f
End Sub
241
Меню и диалоги
Private Sub mnuApple^ClIск {)
Аппаипсе mnuApple.Caption
mnuApple.Enabled • False
м М Sub
Private Sub mnuPotato_Click()
Annaunce mnuPotato.Caption
mnuPotato.Enabled - False
End ШЙ р
Private Sub mnuPear Click О
Annaunce mnuPear.Caption
mnuPear*Enabled • False
Щ р sub ж
-itti ч
Private Sub ranuCucumbet _C1Lck()
Annaunce mnuCucumber.Caption
mnuCucumber.Enabled * False
End Sub
Private Sub mnuHazelnut_Click()
Annaunce mnuHaielnut.Caption
mnuHaielnut.Enabled • False
End Sub
Private Sub mnuOrange_Click()
Annaunce mnuOrange.Caption
mnuOrange.Enabled - False
End Sub
Private Sub tnnuTomato_Click ()
Annaunce mnuTomato.Caption
mnuTomato.Enabled * False
End Sub
Private Sub mnuWalnut_Click()
Annaunce mnuWalnut.Caption
mnuWalnut.Enabled = False
End Sub
Private Sub mnuLemon_Click()
Annaunce mnuLemon.Caption
mnuLemon.Enabled == False
End Sub
Public Sub Annaunce(Food As String)
Dim iNum As Integer
Randomize
1)
iNum = Int(5 * Rnd()
Ш
ш
ш
ш
ш
ш
я ш
ш
ш
ш
я ш
ш
ш
ш
ш
я я л
М еню и диалоги
242
Select Case iNum
^'
Case 1
.
^Г
lblDisplay.Caption = Food | _
•
" - это очень вкусно."
Case 2
- .'V'A .
lblDisplay.Caption = Food & Щ
" - это неплохо. " ;Case 3
4
#***■*•♦'
l b l D i s p l a y . C a p t i o n =* Food If|
" - видеть их не могу!"
Case 4
- 1 *'і
lblDisplay.Caption = Food & y|J
I - три раза в день -"
Case 5
.
^^
lblDisplay.Caption = Food & j
" - хотите еще?"
End Select
End'Sub
4
"ЫЗ I
,
5.3.2. Другие элементы интерфейса пользователя
Графическая среда Windows взаимодействует с пользователем
посредством неких стандартных элементов (большинство из них
можно найти в окне коллекции инструментов Visual Basic). Сюда
относятся, к примеру, переключатели, флажки, комбинированные
поля, списки и др. В обращении с ними нет ничего сложного.
Особую роль играют управляющие элементы -контейнеры . Элемент-контейнер способен содержать в себе другие элементы; в
этом смысле первейшим контейнером является сама форма. Дру­
гой пример контейнера — элемент P ictureB ox. На него можно по­
мещать другие управляющие элементы так же, как и на форму,
при этом они будут в некотором смысле изолированы от формы
и других элементов. Ссылка на контейнер, в котором находится
конкретный управляющий элемент, содержится в свойстве Con­
ta in e r этого элемента.
Обзор. Пример
В данной программе будет использован целый ряд управляющих
элементов, относящихся к интерфейсу пользователя. С их помо­
щью пользователь сможет построить одну длинную строку из не­
скольких коротких, причем каждая из составных частей выбира­
ется посредством управляющих элементов разных типов.
■ Вот, на что следует обратить внимание в исходном тексте.
• Первой выполняется процедура Form_Load(), где инициали­
зируются поле списка IstAnim als и комбинированное поле
cboPlace. Для этого использованы оператор With и метод
Addltem . Для элементов списка IstAnimals использован
также метод Item Data, устанавливающий нумерацию эле­
ментов списка. В данном случае нумерация в списке должна
соответствовать нумерации в массиве строк strGer, по­
скольку обращение к ним производится по одной индексной
переменной. Наконец, значением свойства Listlndex опре­
деляется элемент списка, который будет выбран в исходном
состоянии.
И последнее, что делает процедура Form_Load(), — инициализи­
рует этикетку IblHsbValue стартовым значением свойства Value
полосы прокрутки (количество животных).
• Далее следует исходный код процедуры AIIDisplay, которая,
собственно, и выполняет всю работу, т. е. конструирует
фразу исходя из состояния различных управляющих эле­
ментов. Вначале производится «сборка» строки strAttr из
значений выбранных атрибутов — поскольку каждый флажок
chkAttr может быть установлен независимо от других, цикл
For может добавить в первоначально пустую строку strAttr
до трех слов-атрибутов. Затем добавляется слово, характе­
ризующее размер животных — обязательно должен присут­
ствовать один (и только один) из вариантов, поскольку вы­
бирается он с помощью переключателя optSize. Обратите
внимание на то, что речь идет о массивах полей флажков и
позиций переключателя (задано значение свойства Index),
это позволяет организовать циклическую обработку.
244
і
Меню и диалоги
Наконец, конструируется строка strOut, при этом в качестве дета­
лей используются выделенные элементы поля списка IstAnimals и
комбинированного поля cboPlace. Номер выделенного элемента
списка в обоих случаях содержится в свойстве Listlndex, получить
этот элемент можно в свойстве List, обратившись к нему по номеру
Listl ndex. Для обращения к элементу строкового массива strGer (со­
держащему глагол, заданный для выбранного в списке существи­
тельного) использована конструкция IstAnim als.ltem Data(lstAnim als.Listlndex), которая возвращает номер выбранного элемента
(помещенный туда процедурой Form_Load).
• Далее следует ряд C lick-процедур — все они вызывают про­
цедуру AIIDisplay, таким образом при любых изменениях в
состоянии элементов интерфейса пользователя «конструк­
ция» фразы в текстовом поле соответственно меняется.
• Для получения числового значения используется событие
Change полосы прокрутки hsbNumber, при этом опять же
выполняется процедура AIIDisplay, а также обновляется над­
пись на этикетке IblHsbValue. Событие Change происходит,
когда положение ползунка на полосе прокрутки уже изме­
нилось. В отличие от него событие S croll генерируется не­
прерывно в процессе перемещения ползунка и в процедуре
его обработки обновляется только этикетка IblHsbValue.
Ребятам о зверятах
«{собак
кошек
лошадей
мышей
куриц
уток
_
П ІХ
на крыше
| А т ^ в н т ы = ^ р ? Ж - Резне
і
-
Ғ
•иэящніЛ ;-4 Л Я Р ^ больших
;шт
-•■ ** и »
I Р ш умных
С/1 •
лЬ Д Я Д а Ю Я п К д
I Р быстрых
'
*
. -
ш тв ш тт
йш <•
•SV
"<>'Л
..
Количество: Ц
НЕ
'
—
39 изящных, быстрых маленьких кошек мяукают на
крыше.
|Ш н И В № |
'
• IV
Нв/ІвМЬКИХ; f
etasa
ml Ш ж
'
Меню и диалоги
Таблица
Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Ребятам о зверятах
ListBox
Name
IstAnimals
ComboBox
Name
cboPlace
2-DropDownList
Frame
CheckBox
CheckBox
CheckBox
Frame
OptionButton
Name
fraA ttr
Caption
Атрибуты
Name
chkAttr
Caption
шумных
Name
chkAttr
Caption
изящных
Name
chkAttr
Caption
быстрых
Name
fraSize
Caption
Размер
Name
optSize
Caption
больших
Index
Value
Меню и диалоги
Объект
Свойство
Значение
OptionButton
Name
optSize
Caption
маленьких
Index
Name
HScrollBar
Caption
(пустая строка)
Name
hsbNumber
LargeChange
Max
Value
TextBox
Name
txt Display
Locked
True
Исходный текст
Option Explicit
Dim strGer(l To 6 ) As String
Private Sub cboPlace__Click ()
AllDisplay
End Sub
Private Sub chkAttr_Click(Index As Integer)
AllDisplay
End Sub
~
f
Private Sub Form_Load()
With IstAnimals
.Addltem ("собак” )
.Addltem ("кошек")
tnA ■
247
Меню и диалоги
.Addltem ("лошадей")
.AddItem ("мышей")
.Addltem ("куриц")
.Addltem ("уток")
.ItemData(O)
.ItemData(l)
.ItemData(2)
.ItemData(3)
.ItemData(4)
.ItemData(5)
.Listlndex =
End With
With cboPlace
=
=
=
=
1
2
3
4
Щ 5
= 6
2
.Addltem ("во дворе")
.Addltem ("в автомобиле”)
.Addltem ("на крыше")
.Addltem ("на лужайке")
.Addltem ("на базаре")
.Listlndex = О
End With
strGer(1)
strGer(2)
strGer(3)
strGer(4)
strGer(5)
strGer(6 )
=
=
=
=
=
=
"лают"
"мяукают"
"ржут"
"пищат"
"кудахчут"
"крякают"
lblHsbValue.Caption = "Количество: " &
Str(hsbNumber.Value)
End Sub
Private
Dim
Dim
Dim
Sub AllDisplayO
strOut As String
strAttr As String
I As Long
strAttr = ""
For I = 0 To 2
If chkAttr(I).Value = 1 Then
If strAttr = "" Then
strAttr = chkAttr(I).Caption
Else
Меню и диалоги
248
if
И
strAttr = strAttr &
chkAttr(I).Caption
End If
End If
Next I
If optSize(0).Value Then
If strAttr = "" Then
strAttr = "больших"
Else
strAttr
End If
strAttr & ", " 4
"больших"
Else
If strAttr *
strAttr
f t ft
Then
M
tv
маленьких
Else
strAttr - strAttr & ", " & "маленьких"
End I f
'
End If
ft
W
strOut - Str(hsbNumber.Value) &
strOut * strOut & strAttr & " "
strOut * strOut & _
IstAnimals.List (IstAnimals.Listlndex)
ft
9«
strOut * strOut & _
strGer (IstAnimals.ItemData (IstAnimals.Listlndex)) _
strOut * strOut & cboPlace.List{cboPlace.ListIndex) _
txtDisplay.Text - strOut
End Sub
Private Sub hsbNumber_Change()
IblHsbValue.Caption * "Количество: " & _
Str(hsbNumber.Value)
A U D I splay
End Sub
« * rg,
КШ
Меню и диалоги
249
Private Sub hsbNumber_Scroll()
lblHsbValue.Caption = "Количество: " & _
Str(hsbNumber.Value)
End Sub
Private Sub lstAnimals__Click ()
AllDisplay
End Sub
Private Sub optSize__Click (Index As Integer)
AllDisplay
End Sub
Private Sub chkAttr_Click(Index As Integer)
AllDisplay
End Sub
5.3.3. Текстовое поле
Текстовое поле является, наверное, одним из наиболее часто ис­
пользуемых управляющих элементов. Причина такой популярнос­
ти кроется в его универсальности — текстовое поле можно при­
менять как для ввода, так и для отображения текста и чисел, для
маскированного (форматированного) ввода дат, паролей; нако­
нец, в многострочном режиме оно представляет собой простей­
ший текстовой редактор. Первый пример данного раздела демон­
стрирует технику работы с обычным текстовым полем TextBox,
а второй посвящен полю маскированного ввода M askedEdit, об­
ладающему рядом специфических возможностей.
Обзор. Пример
Упомянем вначале два свойства:
• M ulti Line. Разрешает (True) или запрещает (False — по
умолчанию) многострочный режим текстового поля.
• ScrollBars. Определяет наличие полос прокрутки в поле (ни
одной, только вертикальная, только горизонтальная, обе,
автоматический режим).
■ В этом примере текстовое поле будет использовано как для
ввода текста, так и для его вывода (отображения).
М еню и диалоги
250
Как видно из рисунка ниже, окно приложения содержит два
т р к с т о в ы х поля, командную кнопку и переключатель на две по
зииии Текст введенный в верхнее поле, переносится в нижнее
поле по щелчю/ на командной кнопке. Один из двух возможных
пежимов^ переноса выбирается переключателем (Перепи­
сать - новый т е к с т замещ ает старый, Дополнить новый текст
присоединяется к старому).
Итак мы выяснили, что именно делает программа. Теперь настал
чередвопроса «как?». Программа состоит из двух процедур:
Собственно операцию переноса текста выполняет процеду­
ра cmdTransfer Click. В зависимости от состояния переклю­
чателя optM odi содержимое свойства T ext поля tx tln p u t
либо присоединяется к содержимому того же свойства поля
txtO u tp u t, либо заменяет его.
Вторая процедура обрабатывает событие G otFoc w перво­
го текстового поля. Она выполняется каждый раз, когда
поле по л за е т фокус клавиатуры. При этом его свойство
Text получает в качестве значения пустую строку.
Примечание
Если текстовое поле предполагается использовать Для ввода
пароля то его свойство PasswordChar должно содержать
символ (обычно это «*»), который будет отобРа* ™ я в поле
вместо вводимых символов. Эта возможность до ту
в однострочном режиме (MultiLine — False).
% Текстовое none
№ D
тнаЗбжЯш
Меню и диалоги
251
Таблица 5.10. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Текстовое поле
OptionButton
Name
Caption
Переписать
Index
OptionButton
TextBox
Name
optMode
Caption
Дополнить
Name
txtOutput
Locked
CommandButton
TextBox
ScrollBars
2-Vertical
Name
cmdTransfer
Caption
Передать
Name
txtlnput
Исходный текст
Option Explicit
Private Sub cmdTransfer C l i c k ()
If optMode(0) Then
txtOutput.Text = txtOutput.Text + _
txtlnput.Text
Else
txtOutput.Text = txtlnput.Text
Меню и диалоги
__ ______ ____ ____________ ______ ___________
252
End I f
txt Input. Text = ,M
End Sub
Private Sub txtInput__GotFocus ()
txtInput.Text = ""
End Sub
Обзор. Пример
данный пример продемонстрирует а
nnvroro типа. Управляющий элемент M askedEdit да
ность наложить маску на вводимые символы, т. е. разрешить ввод
“ S o символов определенного типа и только в определенные
позиции.
Роль текстового курсора при вводе в маскированное поле иг­
рает символ, заданный значением свойства PromptChar (по
умолчанию это символ подчеркивания «_»).
В примере программы для маскированного ввода исп ° ^ У ются две разные маски: маска ввода даты и маска ввода не
коего абстрактного «номера заказа», состоящего из цифр и
букв.
В исходном тексте примера программы следует обратить вни­
мание на следующие моменты:
• В процедуре Form_Load переключатель вида маски устанав­
ливается в положение Дата (для этого свойству Value по­
зиции переключателя optDate присваивается значение
True). Это влечет выполнение процедуры обработки щелчка
на данной позиции.
• Обе процедуры обработки события C lick для позиций пере­
ключателя задают значение свойству Мазк элемента
MaskedEdit. Маска может содержать заданные символы (их
нельзя изменить) и фильтры (они позволяют вводить в дан­
ную позицию только символы определенного вида). Фильтр
«#» разрешает ввод цифр, а фильтр «?» — букв.
253
Меню и диалоги
шшашвшшяяяшшь
• Процедура msklnput_Change выполняется каждый раз, когда
содержимое поля изменяется, при этом новое значение
дублируется в этикетке.
• Остается процедура msklnput_ValidationError. Ее вызов авто­
матически производится при каждой ошибке, т. е. попытке
пользователя ввести непредусмотренный маской символ. В
данном случае реакция программы на ошибки сводится к
появлению надписи «Ошибка!».
Примечание
■
Управляющий элемент MaskedEdit не входит в число стан­
дартных. Его необходимо поместить в коллекцию инструмен­
тов с помощью диалога Components (пункт M icrosoft Masked
Edit Control 5.0).
Маскированный ввод
ЯП
ШОТ .04 97|
••
|* Лете
Г Нонер эоказб
01.04.97
■
.
■
Таблица 5.11. Управляющие элементы и их свойства
в примере программы
I Объект
I Form
I OptionButton
OptionButton
Свойство
Значение
Name
frmMain
Caption
Маскированный ввод |
Name
optOrdNum
Caption
Номер заказа
Name
optDate
I
j
М еню и диалоги
254
Объект
W
W
W
MaskedEdit
1f Iv U l\W
•
Свойство______
Значение
Caption
Дата
Name__________
msklnput
Font
MS Sans Serif
10 пунктов
PromptChar
| Label
_________
—“ 1
Name_________
I lblOutput________
Caption________
I ждем-съ...
| Font________ __
|M S Sans Serif
I 12 пунктов
1
жирный
Исходный текст
Option Explicit
Private Sub Form__Load ()
optDate.Value = True
End Sub
Private Sub mskInput_Change()
lblOutput.Caption = msklnput.Text
End Sub
,ToYf
Private Sub msklnputJValidationError(InvalidText
As String, StartPosition As Integer)
lblOutput.Caption Ш "Ошибка!"
End Sub
Private Sub optDate__Click ()
msklnput.Mask = "##.##.##"
End Sub
Private Sub optOrdNum Click()
msklnput.Mask = "##-X-?-####"
End Sub
~ •
Меню и диалоги
255
5.3.4. Диалоги
Некоторые вопросы приложение и пользователь могут выяснить
только в диалоге. В данном разделе мы займемся так называе­
мыми специальными диалогами Visual Basic. Специальный диалог
представляет собой форму, которая загружается или делается
видимой в нужный момент, а по завершении диалога убирается
с экрана. Результат диалога форма возвращает обычно через
свойство Tag.
Обзор. Пример
Программа, которой мы теперь займемся, служит двум целям.
С одной стороны, она продемонстрирует технологию созда­
ния специальных диалогов, а с другой — познакомит вас с
тремя управляющими элементами, облегчающими доступ к
файлам.
Задача программы заключается в открытии окна диалога, ко­
торое позволяет выбрать файл в произвольном каталоге на
произвольном диске.
Чтобы снабдить программу диалогом, необходимо включить
в состав проекта дополнительную форму, разместить на ней
все необходимые управляющие элементы и ввести соответ­
ствующий код. Затем, в нужный момент форма диалога дела­
ется видимой с помощью метода Show. Результат диалога
форма помещает в свое свойство Tag, откуда его может про­
честь открывшая диалог программа.
Основная форма содержит две процедуры. Процедура
Form_Load используется для инициализации этикетки.
Процедура cmdShowFilDiaLCIick открывает собственно диалог и
извлекает результат из свойства Tag формы диалога. Форма диа­
лога делается видимой с помощью оператора frmFilDial.Show 1, где
параметр 1 задает уровень модальности окна диалога (1 соот­
ветствует модальности уровня приложения, т. е. пользователь
сможет переключиться на другое приложение Windows, но не
сможет вернуться в открывшее окно диалога приложения, не
завершив диалог надлежащим образом).
256
■
М еню и диалоги
_________________ ____ _____ ______ ___________
Теперь перейдем к собственно диалогу:
• В коде процедуры Form_Load выполняется инициализация
комбинированного поля cboFilFilter, которое должно со­
держать маски типов файлов.
• На процедуру PathLblAct возложена задача обновлять над­
пись на этикетке в нижней части окна диалога в соответст­
вии с полным именем выбранного в данный момент файла
каталога. При этом производится проверка последнего сим­
вола имени каталога (функция Right(crpo/ca,1) возвращает
последний символ строки) - если это не «\». то добавляется
символ «\». Затем к «нормализованному» имени каталога
добавляется имя файла, выделенного в списке файлов.
Управляющий элемент DirListBox отображает структуру катало­
гов на текущем диске. Элемент FileListBox отображает список
файлов каталога, отобранных в соответствии с определенными
критериями. Один из критериев — маска имени файла, которая
содержится в свойстве Pattern, куда она попадает из свойства
Text комбинированного поля cboFilFilter.
• Следующая процедура обрабатывает событие C lick комби­
нированного поля
этом передается в свойство P attern списка файлов filFile.
• Процедура cmdCancel_Click выполняется по щелчку на кноп­
ке Отмена, при этом в свойство Tag формы загружается
пустая строка (чтобы вызвавшая диалог процедура могла
узнать, что никакой файл не выбран), затем форма диалога
убирается с экрана методом Hide.
v
• По щелчку на кнопке О К выполняется процедура
cmdOK_Click. В первую очередь ей необходимо проанали­
зировать состояние свойства L istln d e x списка файлов f il­
File — если оно содержит -1, то делается вывод о том, что
никакой файл не выбран, пользователь получает сообще­
ние, а выполнение процедуры досрочно завершается опе­
ратором Exit Sub. В противном случае надпись на этикетке
IblPath (т. е. полное имя выбранного файла) записывается
в свойство Tag формы, а диалог закрывается.
Ш
Меню и диалоги
257
• Процедура dirDir__Change выполняется при изменении теку­
щего каталога, т. е. когда в списке каталогов dirD ir оказы­
вается выбранным другой элемент. При этом обновляется
значение свойства Path списка файлов filF ile и соответст­
венно список отображаемых им файлов.
• Если пользователь выберет другой диск в списке дисковых уст­
ройств drvDrive, то выполнится процедура drvDrive__Change,
при этом имя диска попадет в свойство Path списка ката­
логов dirD ir, изменив соответственно список отображаемых
им каталогов.
• Наконец, щелчки на элементах списка файлов обрабатывают
процедуры filFile_Click и filFile_DblClick. При щелчке обновля­
ется этикетка с полным именем файла, при двойном щелчке
диалог закрывается вызовом процедуры cmdOK_Click (как ви­
дите, возможность вызвать в коде процедуру обработки со­
бытия представляет собой немалое удобство).
fc. Выбор файла
; |£ J e :[G D f]
SHbmm
Tj
«'МША
MMMM1
Ш
I t
seroptes
Г ~1disvT
кш. ■
I
мм
SAMPLES CNT
SAMPLES FTS
SAMPLES HLP
■
iT lC om oT ool
QPGuide
f^QVisdetB
(a^VB5\semptes\SAMPl£S.HLP
OK
9 Заказ 3337
Отмена
Меню и диалоги
Таблица 5.12. Управляющ ие элем енты формы frm M ain
--^--- —"—'-----'---- ■“ '
Form
I CommandButton
J
HLabel
Свойство
Значение_______
Name
frmMain
Сведения о файле
I Name
cmdShowFilDial
Caption
Выбрать файл
Name_______
IblFileDescr______
Caption
Выбранный файл:
Name
IblFileName_____
BorderStile
1-FixedSingle____
Caption
(пустая строка)
Таблица 5.13. Управляющие элементы формы frmFilDial
Form
CommandButton
CommandButton
Свойство
Значение
Name
frmFilDial
Caption
Выбор файла
Name
cmdCancel
Cancel
1-True______
Caption
Отмена
Name
cmdOK
Default
Caption
FileListBox
ComboBox
Name
filFile
Name
cboFilFilter
Меню и диалоги
Объект
Свойство
Значение
2-DropDownList
DriveListBox
Name
drvDrive
DirListBox
Name
dirDir
Label
Name
IblPath
BorderStile
1-FixedSingle
Caption
(пустая строка)
Исходный текст для формы frm M ain
Option Explicit
Private Sub cmdShowFilDial_Click()
frmFilDial.Show 1
If frmFilDial.Tag = "" Then
lblFileName.Caption jj "Файл не выбран!
Else
lblFileName.Caption = frmFilDial.Tag
End If
End Sub
Исходный текст для формы frmFilDial
Option Explicit
Private Sub PathLblActO
If Right(dirDir.Path, 1) <> "\" Then
IblPath.Caption =_dirDir.Path & "\"
& filFile.FileName
IblPath.Caption = dirDir.Path _
& filFile.FileName
End I f
End Sub
Private Sub cboFilFilter_Click()
filFile.Pattern Щ cboFilFilter.Text
PathLblAct
~
End Sub
.
Private Sub cmdCancel_Click()
fritiFilDial .Tag =
frmFilDial.Hide
~
. •; ' 5
-r^ K :0
End Sub
Private Sub cmdOK_C l i c k ()
. 4 .*-' *
<
If filFile.Listlndex = -1 Then
MsgBox "Файл не выбран!", vbOKOnly * Щ
vbExclamation, "Сообщение"
Exit Sub
" ‘
End If
./ v v
_• -v.,s? -
frmFilDial.Tag = IblPath.Caption
frmFilDial.Hide
Л<
End Sub
^
T
•> , £■
Private Sub dirDir_Change()
filFile.Path = dirDir.Path
PathLblAct
End Sub
.
f ;/ \] -> м ц с ф Щ
•
Private Sub drvDrive_Change()
- dirDir.Path = drvDrive.Drive
End Sub
Private Sub filFile_C l i c k ()
PathLblAct
End Sub
- r
'
Доступ к файлам
261
Private Sub filFile_DblClick()
PathLblAct
cmdOK_Click
End Sub
Private Sub Form_Load()
With cboFilFilter
.Addltem "*.TXT"
.AddItem "*.DLL"
.Addltem "*.DOC”
.Addltem "*.BMP"
.Addltem
.Listlndex = 0
End With
End Sub
5.4. Доступ к файлам
Доступ к данным почти всегда означает доступ к дисковым фай­
лам, поэтому невозможно пройти мимо такой темы, как работа с
файлами. Различают три разновидности доступа к файлам, им и
посвящены три последующих раздела.
5.4.1. Последовательный доступ
Под последовательным доступом к файлам понимают абстрак­
цию файла, как последовательности строк произвольной длины,
разделенных специальными символами. Чтение из файла и за­
пись в файл при этом производятся построчно.
Обзор. Пример
Вначале следует упомянуть одно из свойств формы, которое ис­
пользовано в данной программе. Свойство C ontrolBox отвечает
262
Доступ к файлам
„ я налИчие кнопок управления окном в правом верхнем углу окна
формы. Значение False влечет за собой отсутствие этих кнопок.
также
доступе к файлу. Прежде всего файл должен оыть открыт в одном
и Г р м о в ( в данном случае - в режиме последовательного до­
ступа) затем могут выполняться операции записи и чтения, а
после всех манипуляций с файлом его необходимо закрыть.
Пример программы реализует простейший текстовой редактор,
в который можно загрузить некоторый существующий текстовой
файл имя которого определено в коде программы. Текст, содер­
жащийся в файле, отображается в текстовом поле и доступен для
Редактирования. Отредактированный файл можно записать на
диск. Бросим беглый взгляд на исходный текст программы:
Глобальная логическая переменная bChanged должна быть
доступной для всех процедур формы, поскольку ее значение
указывает на факт изменения или неизменность файла.
Процедура cmdExit_Click, выполняющаяся по щелчку на
кнопке Выход, проверяет содержимое переменной
bChanged. Если текст подвергался редактированию, то
пользователю предлагается принять решение о сохранении
файла (при выборе пользователем кнопки Да в окне сооб­
щения выполняется процедура cmdSave_Chck, речь о которой впереди).
.г
Mt&oqp
Следующая процедура, cmdOpen_Click, выполняется по
щелчку на кнопке О ткры ть и служит для открытия файла
E \VB 5\ODBC\README.TXT (конечно, он должен при этом
существовать). Вначале процедура должна получить номер
для файла, никаким другим файлом не занятый—эту задачу
решает функция FreeFile. Затем файл открывается с помо­
щью оператора следующего вида:
Open И м яФ айла For Input As Н ом ерФ айла
В результате файл с именем Имя ф айла будет открыт для ввода
в режиме последовательного доступа и для всех дальнейших опе­
раций с файлом он будет идентифицироваться номером Номер
Ф айла. Далее следует вызов функции Input, с помощью которо
Доступ к файлам
263
содержащиеся в файле строки загружаются в текстовое поле
txtFile. Поскольку выражение LOF(Н ом ерФ айла) возвращает
длину файла, то весь файл будет полностью загружен в текстовое
поле.
• Следующая процедура вызывается по щелчку на кнопке Со­
хранить. Ее задача — записать в дисковый файл содержи­
мое текстового поля. Для этого файл открывается для вы вода с помощью оператора следующего вида:
Open И м яФ айла For O utput As Н ом ерФ айла
Затем содержимое текстового поля выводится в файл, после чего
он закрывается оператором Close.
fc- Содержимое файла README TXT (изменено)
ODBC Directory
Открыть
T he \VB\ODBC directory can b e used to redistribute ODBC t
B a sic 5.0 with your арріісагюп^Д
Я ИVisual
Ш ЕДBг5§Д
-Ш «И
T he
a s icііівГ
5 0 Setu
and distribution ODBC or the ODBC drivers
on your CO
to assist you in distributing and property installing all of the ct
ODBC with your application.
Сохранит
• Наконец, процедура txtFile_Change устанавливает флажок
bChanged в случае изменения содержимого текстового
поля и вносит соответствующую поправку в титульную стро­
ку формы.
Таблица 5.14. Управляющие элементы и их свойства
в примере програм м ы
I Объект
Свойство
Значение
I Form
Name
frmMain
Caption
Редактор текста
Control Box
False
Name
cmdExit
CommandButton
Доступ к файлам
CommandButton
CommandButton
TextBox
Свойство
Значение
Caption
Выход
Name
cmdSave
Caption
Сохранить
Name
cmdOpen
Caption
Открыть
Name
txtFile
MultiLine
True
Scroll Bars
Исходный текст
Option Explicit
;■
Dim bChanged As Boolean
Private Sub cmdExit_Click()
If bChanged Then
If M s g B o x ("Файл изменен. Сохранить?'/
vbYesNo, "Сохранение изменений* )= _
vbYes Then
cmdSave_Click
End If
End if
Unload Me
End
End Sub
,
4 #-
i
-.
Щ
Private Sub cmdOpen_Click()
Dim strFileName As String
Dim iFileNum As Integer
;
I
Доступ к файлам
265
iFileNum — FreeFile
strFileName = " Е :\VB5\ODBC\README.TXT"
Open strFileName For Input As iFileNum
txtFile.Text = Input(LOF(iFileNum), iFileNum)
Close iFileNum
bChanged Ш False
frmMain.Caption = "Содержимое файла README.TXT"
&” (без изменений)"
End Sub
Private Sub cmdSave_Click()
Dim strFileName As String
Dim iFileNum As Integer
iFileNum = FreeFile
StrFileName = "E:\VB5\0DBC\README.TXT"
Open strFileName For Output As iFileNum
Print #iFileNum, txtFile.Text
Close iFileNum
bChanged = True
frmMain.Caption —: "Содержимое файла"
&" README.TXT (записано)"
End Sub
Private Sub txtFile_Change()
bChanged = True
frmMain.Caption = "Содержимое файла" _
&" README.TXT (изменено)"
End Sub
Доступ к файлам
----- I------ В-----------------
_______________________ 1
266
---- -
доступа
■
ппг-п/п
к
сЬайлу
предполагает,
что
файл
состоит
из
Произвольный до ту
Ф^
его
ытии размер записи
S
S
S
S
S
S
становится ЗОЗМОЖ НЫМ позиционип о е н и е на произвольную запись в файле по ее номеру (позиция
рование на прои
у
умножением номера записи на ее
записи ‘
в Файлы произвольного доступа и чтения из
используют переменные определяемых пользователем типов.
Обзор. Пример
— —
»Г£Х
£
£
£
£
гкд
а
й
Е
.
“
Г а ZZфэилапроиз
г _рдений 0 дне рождения и состоят из
ЩЬЮ
списка И|т^еланий
списка
пожела
Х о а Г с ;“
даты рождения
Элементы ’ пользовательского интерфейсу
перемещаться от записи к записи, редак-
ю і в Т с с і а т ь нозые записи. Р а с с а м
теперь устройство программы.
• R отдельном программном модуле определяется тип Birth• В
отдельном
ими
м
т
т
а
Л
ж
е
л
в
модуле
формы,
□ а Х Г к о т о р ы Й затем потребуется в модуле формы,
чтобы объявить переменную этого типа.
• Код модуля формы начинается с ряда объявлении перемен_____ шг+ҺПа\іі принадлежащей к
ных и среди них
задавать структуру
Г п и с и вфайле и использоваться как для чтения из файла,
так и для записи в него.
_
• Процедура ShowRecord предназначена для чтения^ Фаила
содержимого текущей записи в текстовые> поля формь^ К
моменту первого вызова этой процедуры файл уже откр
и идентифицируется номером hFileNum. С помощью опера­
тора Get в переменную BirthDay прочитывается текущая за­
пись т е запись, номер которой на данный момент сод р
житс’я в переменной ICurrentRecord (она играет у нас роль
^ а т е а Г Ц Іщ с й записи). Затем поля переменной копируются в текстовые поля формы.
Доступ к файлам
267
• Противоположную задачу решает процедура SaveRecord,
она записывает содержимое текстовых полей формы в те­
кущую запись файла с помощью оператора Put, опять же,
посредством полей переменной BirthDay.
• Кнопка > служит для перевода указателя текущей записи на
одну запись вперед, что и выполняет процедура
cmdNext_Click, предварительно проверив указатель теку­
щей на совпадение с указателем последней записи (ее роль
в программе играет переменная ILastRecord). Аналогичным
образом устроена процедура cmdPrevious_Click, обрабаты­
вающая щелчки на кнопке <, только при этом указатель те­
кущей записи проверяется на совпадение с 1.
• Чтобы наполнить файл записями, необходима кнопка Новая
запись и процедура cmdNew_Click. Сохранив текущую за­
пись, эта процедура выполняет инкремент указателя пос­
ледней записи и позиционируется на конец файла. Затем
предварительно очищенная переменная BirthDay записыва­
ется в файл (при этом длина файла увеличивается на одну
запись) и после этого остается лишь сделать только что со­
зданную последнюю запись текущей.
• Наконец, процедуры Form_Load и FormJJnload, которые вы­
полняются соответственно при старте и завершении про­
граммы. При старте файл необходимо открыть, а при за­
вершении — закрыть. Как уже упоминалось, для открытия
файла в режиме произвольного доступа необходимо ука­
зать длину записи. В нашем случае это должен быть размер
в байтах переменной BirthDay, который можно вычислить с
помощью функции Len(). Оператор
Open "BIRTHDAY.DAT " For Random As hFileN um Len =
IR ecordLen
открывает файл BIRTHDAY.DAT в режиме произвольного до­
ступа с длиной записи, равной IRecordLen.
Доступ к файлам
268
.........
^Іеньрож дения: Петров Петр Петрович В И Д
Фамилия
Петр Петрович
Л а га рождения
(^ и с о к пожеланий
Крепкого здоровья
Новая запись
Таблица 5.15. Управляющие элементы и
в примере программы
I Объект
| Свойство
IlForm
j Name
J
~
TextBox
j TextBox
CommandButton
I
~
Г
их свойства
I Значение
| frmMain
j Caption
| ^Цень рождения
Name
txtBirthDay
~Name
txtWishList
Name
I cmdNew
Caption___________
j Новая запись
I CommandButton
Name
I cmdNext___
I
Caption______
I>
CommandButton
Name
j cmdPrevious
I Caption
j TextBox
Name
TextBox
Name
I яҺрі
Name
J
-
I <
1 txtName__
1 txtSurName
I
I IblWishList
Доступ к файлам
Label
Label
Label
Свойство
Значение
Caption
Список пожеланий
Name
IblDay
Caption
Дата рождения
Name
IblSurName
Caption
Фамилия
Name
Caption
Исходный текст для ф ормы frm M ain
Option Explicit
Dim hFileNum As Integer
Dim
Dim
Dim
Dim
Dim
Dim
BirthDay As BirthDayType
lFileLen As Long
IRecordLen As Long
IRecordNum As Long
lCurrentRecord As Long
lLastRecord As Long
Public Sub ShowRecordO
Get #hFileNum, lCurrentRecord, BirthDay
txtName.Text = Trim(BirthDay.strName)
txtSurname.Text = Trim(BirthDay.strSurname)
txtBirthDay.Text = Trim(BirthDay.strBirthDay)
txtWishList.Text = Trim(BirthDay.strWishList)
frmMain.Caption = "День рождения: " _
& txtSurname.Text & " " & txtName.Text
End Sub
Д оступ к
Файлам
Public Sub SaveRecordO
BirthDay.strName = txtName.Text
BirthDay.strSurname = txtSurname.Text
BirthDay.strBirthDay Ң txtBirthDay.Text
BirthDay.strWishList = txtWishList.Text
Put hFileNum,
lCurrentRecord,
End Sub
.. "
BirthDay
-vifttO i -
Private Sub cmdNext_Click()
If lCurrentRecord = lLastRecord Then
MsgBox "Это последняя запись!", vblnformation
Else
'
SaveRecord
;
A
lCurrentRecord = lCurrentRecord + 1
ShowRecord
End If
.
— IL 4
й
=::
txtName.Set Focus
End Sub
і
;.
_ .
u ^
:i .^rr.3; ^
^
&& -ЛІ ■-
Private Sub cmdNew_Click()
SaveRecord
*.-..
lLastRecord = lLastRecord + 1
BirthDay.strName = " "
\ Г'.
BirthDay.strSurname M ""
> »
BirthDay.strBirthDay - ""
. --BirthDay.strWishList = ""
Put #hFileNum,
lLastRecord,
BirthDay
^ i
*
Доступ к файлам
271
lCurrentRecord = lLastRecord
txtName.SetFocus
End Sub
Private Sub cmdPrevious__Click ()
If lCurrentRecord = 1 Then
MsgBox "Это первая запись!", vblnformation
Else
SaveRecord
lCurrentRecord
lCurrentRecord - 1
ShowRecord
End If
txtName.SetFocus
End Sub
Private Sub Form_Load()
IRecordLen = Len(BirthDay)
hFileNum = FreeFile
Open "BIRTHDAY.DAT" For Random As hFileNum Len
IRecordLen
lCurrentRecord = 1
lLastRecord = FileLen("BIRTHDAY.DAT") /_
IRecordLen
If lLastRecord = 0 Then
lLastRecord = 1
End I f
ShowRecord
End Sub
Private Sub Form Unload(Cancel As Integer)
Доступ к файлам
SaveRecord
Close #hFileNum
End Sub
И с хо д н ы й те кс т для м о д ул я
BirthDayType
Option Explicit
Type BirthDayType
s t rN ame
strSurname
strBirthDay
strWishList
End Type
As
As
As
As
String ★ 30
30
String
★
8
String
150
String
доступ
Третий режим доступа к файлам представляет собой, в сущности,
частный случай произвольного доступа. В этом режиме размер
ЗІШ СИ всегда равен 1 байту и программа позиционируется на
произвольный байт по его порядковому номеру в файле.
Обзор. Двоичный доступ
ЧтобьГоткрыть файл "c:\test.dat" в режиме двоичного доступа,
следует:
^
'Получить свободный номер
iFileNum = FreeFile
|
'Подготовить переменную с именем файла
strFileName = "c:\test.dat"
'Открыть файл
Open strFileName For Binary As iFileNum
Ш После того как файл открыт в режиме двоичного доступа, опе­
раторы Get и Put позволят поместить позицию ввода или вы­
вода на произвольный байт в файле и прочитать (записать)
произвольное число байт:
'Подготовить, строку из 36 символов
strTemp = S t r i n g (36,
")
'Прочитать из позиции 2 в строку strTemp
Get HFileNum, 2, strTemp
Печать
273
При этом число байт, которые будут прочитаны, определяется
размером переменной strTemp — поэтому ей и потребовалось
присвоить вначале некоторое значение. Аналогично для операто­
ра Put:
strTemp = "Привет!**
'Записать содержимое строки strTemp в файл, начи­
ная с позиции 79
Put #iFileNum, 79/ strTemp
■
Когда все необходимые манипуляции с файлом завершены,
его необходимо закрыть:
Close iFileNum
5.5. Печать
Часто возникает потребность снабдить программу средствами
вывода текста или графики на принтер. Visual Basic располагает
для этого рядом возможностей, которые различаются как по про­
стоте использования, так и по качеству полученного в результате
документа. Ниже кратко рассмотрим некоторые из них.
5.5.1. Самый простой способ печати
Простейший способ вывести форму на печать состоит в вызове
метода PrintForm , которым располагает каждая экранная форма.
В результате форма, как она выглядит на экране, будет выведена
на принтер по точкам , т. е. каждому пикселу экрана будет соот­
ветствовать точка на бумаге. Качество полученного документа
при этом будет крайне низким, поскольку разрешающая способ­
ность монитора (число точек на дюйм) существенно ниже разре­
шающей способности даже самого дешевого матричного прин­
тера. Иногда, впрочем, этого достаточно для практических целей
(например, для документирования проекта). Синтаксис вызова
метода PrintForm:
И м яФ орм ы . PrintForm
Печать
5.5.2. Объект Printer
Другая возможность заключается в использовании свойств и ме­
тодов объекта Printer, который представляет собой механизм до­
ступа к одному из принтеров, установленных в конкретной сис­
теме (если принтеров несколько, каждому соответствует собст­
венный объект типа Printer). С помощью свойств и методов объ­
екта Printer можно выводить на печать текст и графику, управлять
_____
ломмм пппм ртом печати, а также многое другое.
Таблица 5.16. Свойства объекта Printer
Свойства
Описание
ColorMode
Только для цветных принтеров. Позволяет
перевести принтер в режим цветной печати
и соответственно по его значению можно
распознать текущий режим принтера.
Copies
Задает количество копий документа,
выводимого на печать.________
.
CurrentX, CurrentY
Координаты текущей позиции вывода
на принтер (как для графических методов,
так и для вывода текста). _______ . ,
DeviceName
Содержит список имен принтеров, которые
поддерживает текущий драйвер.
DriverName
Содержит имя текущего драйвера.
Duplex
Доступно только в том случае, если текущі/
драйвер принтера поддерживает
двухстороннюю печать (т.е. печать с обеих
сторон листа). И наоборот, по значению
этого свойства можно распознать текущий
режим.
г 5 *‘ "
Orientation
Задает ориентацию относительно листа
бумаги (vbPRORLandscape - «ландшафт»,
или vbPRORPortrait - «портрет»).
Page
Возвращает номер текущей страницы
Печать
275
Свойства
Описание
РарегВіп
Задает источник бумаги для принтера
PaperSize
Задает формат бумаги.
Возвращает системное имя порта принтера,
через который производится вывод на печать
PrintQuality
Содержит значение текущего разрешения
(в DPI, положительные числа) или константу
качества печати (отрицательные числа),
с которым производится вывод на принтер.
TrackDefault
Разрешает (True, по умолчанию) или
запрещает (False) смену принтера,
на который указывает объект Printer
в случае, если в панели управления Windows
будет выбран другой принтер. ___________
Zoom
Задает коэффициент
увеличения/уменьшения при выводе
на печать. Доступно только для
поддерживающих эту функцию принтеров.
Таблица 5.17. М етоды объ ектаР гітег
Методы
Описание
Circle
Аналогично одноименному свойству формы
позволяет рисовать окружности.________
EndDoc
Завершает вывод на печать и пересылает
данные в принтер.___________________
KillDoc
Прерывает вывод документа на печать
Line
Служит для рисования линий
и прямоугольников.
NewPage
Служит для перехода на следующую
страницу.
PaintPicture
Выводит на принтер точечный рисунок
Печать
Методы
Описание
Pset
Выводит точку заданного цвета в заданных
координатах.
Scale
Задает систему координат на выводимом
документе. *
: 1
ScaleX, ScaleY
Преобразует значения координат из одной
системы в другую.
TextHeight,
TextWidrth
Возвращают соответственно высоту и ширину
текстовой строки с заданным шрифтом,
какие она будет иметь при выводе на печать.
Пример
Данная программа призвана продемонстрировать приемы рабо­
ты с принтером, по крайней мере, основные из них. Как вы убе­
дитесь, это сложнее, чем простой вызов метода PrintForm, од­
нако и ф а стоит свеч — качество полученного документа будет со­
ответствовать возможностям используемого принтера. В приме­
ре программы реализован вывод на печать прямоугольника
размером со стандартный лист бумаги. В центр прямоугольника
помещается строка текста, а вся площадь прямоугольника запол­
няется случайно расположенными точками.
Примечания
s'
Ш Чтобы ввести исходный текст программы, создайте проект
типа Standard.EXE, поместите на форму командную кнопку,
пусть ее имя будет cm dP rint и пусть надпись на ней будет гла­
сить: Печать. Затем откройте окно редактора кода и введите
текст программы.
~
^ ү1
■ Данный пример позволяет заодно продемонстрировать взаи­
моотношения функции Rnd() с оператором Randomize. Чтобы
уяснить, какую роль играет предустановка генератора псев­
дослучайных чисел, проведите небольшой эксперимент. Вы­
полните программу два раза и сравните полученные докумен-
Печать
277
ты. Затем вынесите оператор Randomize за пределы цикла и
снова выполните программу два раза. Наконец, закомменти­
руйте оператор Randomize и еще два раза выполните про­
грамму. Сравните расположение «случайных» точек на всех
трех парах документов — это должно дать вам пищу для раз­
мышлений.
Исходный текст
Option Explicit
Private Sub cmdPrint_Click()
Const iCurPunct As Integer = 200
Dim XPos As Single
Dim YPos As Single
Dim strPrintText As String
Dim XI As Single
Dim Y1 As Single
Dim X2 As Single
Dim Y2 As Single
Dim sngStart__X As Single
Dim sngStart_Y As Single
Dim sngEnd_X As Single
Dim sngEnd_Y As Single
strPrintText = "Случайная точка!"
'Установить ориентацию бумаги — ландшафт
Printer.Orientation = vbPRORLandscape
9Установить масштаб
Printer.Scale (0, 0) - (1000, 1000)
'Вычисляем координаты вершин прямоугольника
XI = Printer.ScaleWidth * 0.1
Ү1 = Printer.ScaleHeight * 0.1
X2 = Printer.ScaleWidth * 0.9
Y2 = Printer.ScaleHeight * 0.9
Печать
278
Printer.DrawWidth = 5
Printer.Line (XI, Y1)-(X2, Y2), , В
sngStart_X
sngStart__Y
sngEnd_X =
sngEnd Y =
= Printer.ScaleWidth * 0 . 2
= Printer.ScaleHeight * 0.2
Printer.ScaleWidth f 0.8
Printer.ScaleHeight | 0.8
Printer.DrawWidth = 4
Dim I As In-teger
For I = 1 To iCurPunct
r Лл'.
'Вычисляем случайные координаты
9 в заданной области
Randomize
tд
Й р р = (sngEnd__X - sngStart__X + 1) * Rnd _
+sngStart_X
Ypos = (sngEnd_Y - sngStart_Y + 1) * Rnd _
+sngStart_Y
9 Вывести
точку на принтер
Printer.PSet
Next I
(XPos, YPos)
•• ь.
'Вывести текст
гВ т И И я
Printer.FontName = "MS Sans Serif"
Printer.FontSize = 24
Printer.FontBold = True
Printer.CurrentX = (Printer.ScaleWidth - _
Printer .TextWidth (strPrintText)) / 2
Printer.CurrentY = (Printer.ScaleHeight - _
Printer.TextHeight(strPrintText)) / 2
Printer.Print strPrintText
'Конец документа
Printer.EndDoc
'Отключить командную кнопку
cmdPrint.Enabled = False
End Sub
Обработка ошибок
279
5.6. Обработка ошибок
Nobody is perfect! Иными словами, человеку свойственно оши­
баться. Поскольку и разработчики программного обеспечения, и
пользователи оного являются людьми, от программных и челове­
ческих ошибок невозможно избавиться совсем. Источники оши­
бок многообразны, как сами ошибки. Даже программа, не содер­
жащая сама по себе абсолютно никаких ошибок (фантастическое
допущение), может столкнуться с ошибками пользователя, со
сбоями аппаратуры или ошибками, которые вызваны взаимодей­
ствием с другими приложениями или с операционной системой.
Если оставить в стороне такие источники ошибок, как, скажем,
землетрясение или внезапное отключение электроэнергии, то ос­
тавшихся вполне хватит для того, чтобы отнестись к вопросу об­
работки ошибок со всей серьезностью.
Visual Basic располагает специальным механизмом обработки
ошибок, который мы попытаемся изучить в этом разделе.
Предположим, программа должна открыть файл. Что если файл
с заданным именем не существует? Что если файл находится на
дискете, которая вставлена в дисковод «А», но шторка при этом
не закрыта и дискета недоступна? Что произойдет с программой,
обратившейся к недоступному файлу? Операционная система
сгенерирует соответствующую ошибку периода выполнения (run­
tim e error), и выполнение программы будет прервано в аварийном
режиме — если, конечно, программист не предусмотрел в своей
программе обработку ошибки такого рода.
Обзор. Обработка ош ибок в языке Visual Basic
Главным действующим лицом в обработке ошибок является опе­
ратор OnError — чтобы он мог сделать свое дело и перехватить
обработку ошибки на себя, переключатель Error Trapping (вклад­
ка General диалога Options) должен находиться в позиции Break
on Unhandled Errors. Синтаксис оператора OnError:
On Error Goto Метка
Этот оператор должен находиться в начале процедуры, и если в
процессе ее выполнения возникнет ошибка, то выполнение проце-
280
Обработка ошибок
дуры (и самой программы) не будет прервано— управление полу­
чит оператор, определенный меткой М е тка . Синтаксис метки:
[операторы]
М е тка :
а
[операторы]
.. ^
• Метка должна при этом существовать, и она должна нахо­
диться в коде той же процедуры, что и оператор On Error.
Если ошибку можно проигнорировать, следует поместить в
начало кода процедуры оператор:
On Error Resume Next
В этом случае ошибка периода выполнения не возникнет, а уп­
равление получит следующий оператор.
• Наконец, если необходимо отключить всякую обработку
ошибок в программе (любая ошибка должна привести к пре­
рыванию программы), следует использовать оператор:
On E rror GoTo О
В С оператором Resume вы уже вкратце познакомились. Он оп­
ределяет путь, по которому пойдет выполнение программы в
случае возникновения ошибки. Его синтаксис существует в
трех вариантах:
/.
Resume
• Если ошибка возникла при выполнении некоторого опера­
тора, то программа вновь попытается выполнить этот же
оператор. Если ошибка возникла при вызове процедуры, то
вызов будет повторен.
..
Resume Next
• В этом случае выполнение программы будет продолжено со
следую щ его оператора. В случае возникновения ошибки в
вызванной процедуре управление будет передано на сле­
дующий после вызова оператор.
Resume М е тка
• При возникновении ошибки управление будет передано на
метку М е тка (которая должна находиться в коде той же про­
цедуры).
Обработка ошибок
281
Объект Err аккумулирует в себе информацию о всех возник­
ших ошибках. Его методы позволяют, к примеру, удалить ин­
формацию об ошибках (Clear) или, наоборот, сгенерировать
ошибку (Raise). Err относится к категории глобальных объек­
тов Visual Basic, и нет нужды создавать его экземпляр специ­
ально. Наиболее полезно его свойство Number, где содер­
жится номер возникшей ошибки. Номера и описание ошибок
можно найти в справочной системе Visual Basic.
■ Обработка ошибок в Visual Basic-программе следует некото­
рой иерархии. Если ошибка возникла при выполнении опре­
деленной процедуры, то в первую очередь программа будет
искать обработчик ошибок (т.е. точку, определенную меткой
в операторе On Error) в текущей процедуре. Если искомое не
обнаружится, то поиск метки перехода по ошибке будет про­
должен в коде процедуры, откуда была вызвана текущая — и
так далее, вплоть до самого верхнего уровня. И только если
обработчик ошибки не найдется и там, произойдет ошибка пе­
риода выполнения. Первый же найденный обработчик ошибки
получит управление.
Все это следует учитывать при использовании оператора Re­
sume — необдуманное его применение может привести к беско­
нечному поиску обработчика ошибки.
■ С помощью оператора On Error GoTo 0 можно отключить об­
работку ошибок. В этом случае при возникновении ошибки вы­
полнение программы будет прервано.
■ Метод Raise объекта Err позволяет сгенерировать ошибку с
заданным номером (это может потребоваться, например, для
проверки обработчика ошибок):
Err.Raise N um ber:- Н ом ерО ш ибки
• Н ом ерО ш ибки представляет собой номер ошибки, кото­
рую необходимо сгенерировать. Кроме свойства Number
при генерации ошибки можно воспользоваться и другими
свойствами объекта Err.
■
Обработка ошибок
282
* Пример:
v
^
Err. Source = "Демон ошибок
E r r .Description = "Демон ошибок был здесь!"
Err. Raise Number = 58 ' файл уже существует
щ Обработчик ошибок состоит из двух или трех частей. Объяв­
ляется он оператором On Error в начале процедуры (или перед
оператором, выполнение которого способно вызвать ошибку).
Собственно обработчик ошибки следует за меткой перехода
по ошибке. Наконец (необязательная третья часть), в какой-то
точке процедуры обработка ошибок может быть отключена,
как это сделано в примере:
,
Sub Hello ()
[операторы]
On Error GoTo ErrorLabell
[операторы]
[On Error GoTo 0]
[операторы]
Exit Sub
[операторы]
ErrorLabell:
[операторы]
End Sub
••■
оч Ч~;
I
' i:
'’••'4
-Ж
I jvjj>
‘
J "* ^
‘n - 4r ' '*: .
^
^
-■
J :Г' \ \ ^
.
Ш В обработчике ошибок можно использовать условные кон­
струкции для распознавания типа ошибки и даже запрашивать
решение у пользователя с помощью функции MsgBox (для
этого следует проанализировать содержимое свойства Num­
b e r объекта Err).
8 Другую возможность обработки ошибок предоставляет oneратор On Error Resume Next. В случае возникновения ошибки
при выполнении текущего оператора управление получит опе­
ратор, следующий за текущим. Это может быть первый опе­
ратор обработчика ошибки (конечно, при этом следует ис­
пользовать условные конструкции):
Обработка ошибок
283
Sub Hello()
[операторы]
On Error Resume Next
[операторы]
If Err.Number = 58 Then
Dim strMsg As String
strMsg = "Ошибка: ". & E r r .Description & Chr(13)
strMsg = strMsg & " Источник: " & Err.Source
MsgBox strMsg
End If
Exit Sub
[операторы]
End Sub
■
Еще одна возможность заключается в вызове метода Raise
одновременно с анализом содержимого свойства Number
объекта Err. При этом оказывается возможным перехватить,
проанализировать и обработать ошибку, а затем передать ее
дальше, чтобы еще один обработчик ошибок смог «внести
свой вклад», или же выделить среди ошибок те, которые
можно обработать, а остальные передать дальше:
Sub H e l l o ()
On Error GoTo ErrorLabel2
[операторы]
Exit Sub
ErrorLabel2:
Select Case Err.Number
Case 55 'Файл уже открыт
[операторы]
Case 58 'Файл уже существует
[операторы]
Case Else
Err.Raise Number := Err.Number
End Select
End Sub
2 g4
___________________________ Обработка ошибок
Зачастую бывает удобным объединить и унифицировать обра­
ботку ошибок во всех процедурах программы. С этой целью
можно создать универсальную процедуру обработки ошибок,
которая будет иметь дело сош ибками, возникающими в разных
процедурах. Собственно, это должна быть функция, возвра­
щающая значение. Каждая из локальных процедур обработки
ошибок должна вызывать эту функцию и анализировать возвращаемое ею значение.
^ ^
Sub Hello ()
Dim intResult As Integer
[операторы]
On Error GoTo ErrorLabel3
[операторы]
On Error GoTo 0
[операторы]
Exit Sub
ErrorLabel3:
intResult = ErrorCenter
Select Case intResult
Case 0
Resume
Case 1
Resume Next
Case 2
*
->%.'
|
'^ чv ?%
*:
‘
.
J'
"
^ :
^
^ >
?
Exit Sub
^
Case Else
:4-'-v'
Err.Raise Number := Err.Number
End Select
~
л -\
End Sub
;.
Function ErrorCenter() As Integer
Select Case intResult
Case 71 'устройство не готово
ErrorCenter = 0
Case 58
Case 55
ШЩ-
Обработка ош ибок
285
ErrorCenter = 1
Case 57 'Ошибка диска
ErrorCenter = 2
Case Else
ErrorCenter = 3
End Select
End Function
Примечание
Ш Приведенные в этом разделе примеры не являются готовыми к ис­
пользованию программным кодом. Скорее, это иллюстрация
структуры, которую должны иметь реальные обработчики ошибок.
Таблица 5.18. Свойства и методы объекта Err
I Свойства
I Description
Строка описания ошибки для ошибок периода
выполнения. Может быть задана для
определяемых пользователем ошибок.
|
I
|
9HelpContext
Идентификатор контекста справки (Help ID),
соответствующий номеру ошибки.
|
I HelpFile
Полное имя файла справки, где находится
справка, заданная значением HelpContext.
I
|
I LastDLLError
Только для чтения, возвращает системный код
ошибки, возникшей при последнем обращении
к DLL-функции. '
|
I
I
Number
Содержит номер ошибки, заданный
параметром оператора Error.
Source
Содержит имя объекта-источника ошибки.
Методы
Clear
Удаляет информацию о последней ошибке
периода выполнения из свойств объекта.
Raise
Генерирует ошибку периода выполнения. _
В параметрах можно задать значения свойств
объекта Err, в противном случае будут
использованы имеющиеся значения свойств.
I
286_______________________________________________________ DLL и API
5.7. DLL и API
Как и всякая уважающая себя система программирования для
среды Windows, Visual Basic позволяет обращаться к АР1-функциям, содержащимся в DLL-библиотеках. Точно так же, конечно
можно обращаться и к любым другим DLL-функциям — механизм
обращения при этом не меняется.
5.7.1. Синтаксис объявления АРІ-ф ункции
Прежде чем можно будет обратиться к функции из DLL-библиотеки, ее необходимо объявить. Это делается с помощью опера­
тора Declare, два варианта синтаксиса которого будут приведены
ниже. Первый вариант относится к объявлению процедуры (DLLфункция не возвращает значения), второй — к объявлению DLLфункции, которая возвращает значение. При объявлении DLLфункций следует учитывать ряд обстоятельств:
• Если DLL-функция объявляется с помощью оператора De­
clare в модуле формы, то она должна объявляться как Pri­
vate. В программном модуле, напротив, DLL-функция долж­
на объявляться, как Public.
• Чтобы избежать конфликта имен (когда имя DLL-функции
совпадает с одним из зарезервированных слов), следует ис­
пользовать зарезервированное слово Alias в объявлении
функции — таким образом можно задать псевдоним для
DLL-функции.
jjpgj----• API-функции используют типы данных языка С, поэтому
параметры при вызове API функций следует задавать с уче­
том совместимости типов С и Visual Basic (см. табл.5.19).
Итак, вот обещанный синтаксис:
[Private/Public] Declare Sub И м яФ ункции Lib " ИмяйИфайла"
[A lias " П се в д о н и м "][([С п и со кП а р а м е тр о в ])]
[P riva te /P u b lic] Declare Function И м яФ ункции Ub
" И м я О ііф а й л а "
[A lia s " П се вд о н и м ” Ш С п и со кП а р а м е тр о в ])] As ИмяТипа
DLL и API
287
• И м яФ ункции. Имя функции или процедуры, под которым
она будет доступна в коде Visual Basic-программы. Исполь­
зуют настоящие имена функций (как они определены в DLLбиблиотеке) или псевдонимы, которые должны быть опре­
делены с помощью зарезервированного слова Alias.
• И м яВ И ф айла. Имя DLL-файла библиотеки, где содержит­
ся объявляемая функция.
• С писокП арам етров Параметры функции или процедуры.
Типы параметров должны быть совместимыми с С-типами,
используемыми в АРІ-функциях.
• ИмяТипа. Определяет тип возвращаемого функцией значе­
ния.
Таблица 5.19. Совместимые ти пы С и Visual Basic
Тип языка С
Совместимый тип языка Visual
Basic
Boolean
Boolean с ключом ByVal
Указатель на String
String с ключом ByVal
Указатель на Integer
Integer
Указатель на Long
Long
Указатель на структуру
Определяемый пользователем
тип, все составляющие которого
упомянуты в данной таблице.
Integer (INT, UINT, WORD, BOOL)
Integer с ключом ByVal
Handle
Long с ключом ByVal
v ^
Long
Long с ключом ByVal
Указатель на массив Integer
Integer
Указатель на Void
Any
Возвращаемое значение Void
Any или String
Char
String
288
DLL и API
5.7.2. Каталог API
Может возникнуть вопрос — как объявлять ту или иную функцию?
Каково ее имя, какие параметры ей следует передать? Краткий
справочник по API-функциям можно просмотреть посредством
программы API Text View (файл APILOAD.EXE), находящейся в
подкаталоге WIN API.
A Text API Viewer - Е aVBSVWinapftwin32api txt
AbortOoc
AbortPath
Aboi(Printer
AbortSystem5hutdo*wi
iy, ByVal ObJectTypeName As String, ByVal ObjedName As
curityDescriptor As SEOJRITY.DESCRIPTOR, ByVal Desiree
•nericMappng As GENERIC.MAPPING, ByVal ObjectCreaba
antedAccess As Long, ByVal AccessStatus A* Long, ByVal с
; Long) As Long
Д»
'J
Обзор. Программа API T ext V ie w
■
Программа API Text View позволяет присматривать список
API-функций и копировать текст их объявления в буфер обме­
на Windows, откуда их можно затем вставить в окно кода.
■
Запустить программу можно с помощью главного меню Win­
dows (пункт API T ext View папки M icris o ft Visual Basic 5.0
меню П рограм м ы ).
После старта программы необходимо загрузить текстовый
файл WIN32API.TXT.
Окно программы состоит из двух областей. В верхней поло­
вине окна можно выбрать элементы списка, в нижней части
отображаются выбранные элементы.
■
■
DLL и API
289
В Командные кнопки окна программы:
• Search открывает окно диалога, позволяющее найти тре­
буемую функцию.
• Add добавляет выделенный элемент в список отобранных в
нижней части окна.
• Delete удаляет выделенный элемент из списка.
• Сору копирует отобранные элементы в буфер обмена Windows.
■в
Процедура. Объявление API-ф ун кц и и GetSystemTime
1. Запустите программу API Text View.
2. Откройте файл WIN32API.TXT.
3. В появившемс^юкне сообщения (запрос — следует ли создать
базу данных) выберите Нет.
4. Щелкните на кнопке Search.
5. Введите строку поиска: GetSystemTime и нажмите клавишу
[Enter]. В верхнем списке будет найдена функция GetSys­
temTime.
6. Щелкните на кнопке Add. Текст объявления функции GetSys­
temTime будет помещен в нижнее поле.
7. Щелкните на кнопке Сору. Текст объявления функции будет
скопирован в буфер.
8. Вернитесь в Visual Basic и перейдите в окно кода.
9. Позиционируйте курсор в нужное место и выполните вставку
из буфера.
10. Объявление функции теперь присутствует в вашем тексте.
Примечание
В
При открытии текстового файла в программе API Text View по­
является запрос на создание базы данных. Если ответить ут­
вердительно, то будет создан файл базы данных, это позволит
существенно ускорить работу в окне программы. Однако со­
здание базы данных может отнять значительное время и если
частое обращение к API-функциям не входит в ваши планы,
лучше ответить отрицательно.
10 Заказ 3337
DLL и API
290
5.7.3. Пример
Обзор
4
~
7
~> ;
В примере демонстрируется техника вызова API-функций Win­
dows. Использованы три функции, возвращающие разного рода
системную информацию.
•
Полученную от API-ф ункций информацию программа отображает
в элементах формы.
.
• В начале исходного текста помещено объявление трех APIфункций: GetSystemTime (возвращает системное время),
GetComputerName (возвращает имя системы) и GetWindowsDirectory (возвращает имя каталога Windows).
• Далее следует объявление пользовательского типа SYS­
TEMTIME— переменная этого типа потребуется, чтобы при­
нять возвращаемое функцией GetSystemTime значение. Тип
объявлен с областью видимости Private (объявить его как
Public можно только в программном модуле).
• Вызов API-функций производится в коде процедуры
cmdCurrent_Click по щелчку на кнопке Обновить. При этом
возвращенные значения приводятся к стандартному виду и
отображаются на форме.
• Первый вызов процедуры cmdCurrent_Click производится
при загрузке формы (процедура Form_Load).
Системная информация
З а п р о с с и с те м н о й и н ш о р м а ди и ж
Обновить
Последний запрос 9.03.45
Системная дата: • ; ^ Ж
11Ө.12.і 397^^^н 4 К
Имя компьютера:
Каталог Windows
р ш ю ш /э ш
DLL и API
291
Таблица 5.20. Управляющ ие элем енты и и х свойства
в прим ере пр о гр а м м ы
—
=—
=
—
-
=
=
=
=
=
=
=
=
=
я
в
Е
=
=
=
=
=
=
а
=
=
=
=
=
г
=
г
=
=
*
=
=
я
и
в
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
(Объект
Свойство________ Значение____________
I Form
Name___________ frmMain_____________
Г
Caption
I CommandButton
Name___________ cmdCurrent___________
I
Caption
I Label
Name____________ IblDescrWinDir________
I
Caption
Каталог Windows:
I Label
Name
IblDescCompName
I
Caption
Имя компьютера:
I Label
Name
Label
Label
Системная информация
Обновить____________
ГIblDescDate
Caption
Системная дата
Name
lbllnfo3_______
BorderStyle
1-FixedSingle
Name
lbllnfo2_______
BorderStyle
1-FixedSingle
Name
Ibllnfol________
BorderStyle
1-FixedSingle
Name
IblTitle
Caption
Запрос системной информации
Font
MS Sans Serif_______
10 пунктов__________________
жирный____________________
Label
Name
IblLastRequest___________ ___
Caption
Последний запрос:
DLL и API
292
И с х о д н ы й те кс т
Option Explicit
Declare Sub GetSystemTime Lib "kernel32"
(IpSystemTime As SYSTEMTIME)
Declare Function GetComputerName Lib _
"kernel32" Alias "GetComputerNameA" _
(ByVal lpBuffer As String, nSize As _
Long) As Long
Private Declare Function GetWindowsDirectory Lib
"kernel32" Alias "GetWindowsDirectoryA"
(ByVal lpBuffer As String, ByVal nSize
As Long) As Long
Private Type SYSTEMTIME
As Integer
wYear
As Integer
wMonth
As Integer
wDayOfWeek
As Integer
wDay
As Integer
wHour
As Integer
wMinute
As Integer
wSecond
wMillisecond As Integer
End Type
Dim
Dim
Dim
Dim
strDate As String
strTime As String
strCompName As String
strWinDir As String
Dim typSysTime As SYSTEMTIME
Private Sub cmdCurrent__Click ()
Dim 1Dummy As Long
GetSystemTime typSysTime
If И
strTime = Str(typSysTime.wHour) |
If typSysTime.wMinute < Ю Then
strTime = strTime | " 0 " _
& T r im ( S tr ( ty p S y s T im e .w M in u te ) )
If H
DLL и API
293
Else
strTime = strTime & Trim(Str_
(typSysTime.wMinute)) &
End IС
If typSysTime.wSecond < 10 Then
strTime - strTime & ”0" _
&Trim(Str(typSysTime.wSecond))
Else
strTime - strTime & Trim(Str(typSys­
Time •wSecond) )
End If
strDate - Str(typSysTime.wDay) & "." _
& Trim(Str(typSysTime.wMonth)) &
_
& Trim(Str(typSysTime.wYear))
strCompName - String(30# " H)
If GetComputerName(strCompName# 30) Then
strCompName « Trim(strCompName)
Else
strCompName = "He найдено"
End If
strWinDir - String(256# " ")
1Dummy = GetWindowsDirectory(strWinDir# 256)
strWinDir = Trim(strWinDir)
lblLastRequest.Caption = "Последний запрос: " _
& strTime
lbllnfol.Caption = strDate
lblInfo2.Caption = strCompName
lblInfo3.Caption = strWinDir
End Sub
Private Sub Form__Load()
cmdCurrent_Clic)c
End Sub
Технология A ctiveX
Современный программист, работающий в среде Visual Basic, не­
избежно столкнется с технологией ActiveX, которая и является
темой данной главы. Управляющие элементы для работы в In­
ternet или внешние утилиты (Add-Ins) для расширения возмож­
ностей IDE — все это ActiveX. Более того, значение технологии
ActiveX выходит далеко за рамки Visual Basic — это стратегическое
направление, которое избрала корпорация Microsoft в вопросах
развития современных технологий программирования. Почти все
программные продукты Microsoft располагают в той или иной
мере способностью предоставлять свои функциональные воз­
можности другим приложениям или пользоваться функциональ­
ными возможностями других приложений (так называемая объ­
ектная модель). В этом плане выдвижение на передний план тех­
нологии ActiveX является, с одной стороны, развитием объектной
модели, а с другой — ответом корпорации Microsoft на появление
языка Java, который продвигает компания Sun Microsystems и ко­
торый претендует на роль макроязыка среды Internet.
Чтобы понять истоки технологии ActiveX, необходимо проанализиро­
вать путь, по которому развивалась сама идея объектной модели.
СОМ
Задолго до появления терминов OLE (и, уж тем более, ActiveX)
разработчикам из Microsoft пришла в голову мысль о программ­
ном объекте , независимом от языка, на котором пишется про­
грамма. Так родилась технология COM (Com ponent O bject
M odel — компонент, основанный на объектной модели). Специ­
фикация СОМ определяла правила, которых должен был придер­
живаться программный объект, находящийся в оперативной па­
мяти компьютера. При этом не имело значения, с помощью какого
Технология ActiveX
______ _____ ______
языка программирования создан данный объект, спецификация
СОМ задавала правила поведения для программного объекта во­
обще (это включало в себя формат размещения объекта в памяти,
а также протокол взаимодействия объекта с окружающей про­
граммной средой).
С появлением спецификации СОМ был заложен фундамент
многократно используемых компонентов , которые могли участ­
вовать во многих проектах, не изменяя своего кода.
OLE
Вскоре после СОМ на свет появилась технология OLE (Object
Linking and Embedding — связывание и внедрение объектов).
Первоначальной целью Microsoft была документная ориентация
среды Windows. Но по прошествии времени технология OLE стала
фактическим стандартом для многократно используемого кода.
Практически речь шла о развитии спецификации СОМ — при этом
технология OLE позволяла на правах «многократно используемого
кода» создавать управляющие элементы, организовывать управ­
ление версиями объектов, а также осуществлять связывание и
внедрение объектов.
ActiveX
';
щ
'
к
v
.
С помощью технологии ActiveX корпорация Microsoft намерева­
ется завоевать Internet. Корни ActiveX лежат в технологии OLE,
которую разработчики из Microsoft распространили на Internetприложения. В результате управляющие элементы, созданные в
соответствии с требованиями технологии ActiveX должны выпол­
няться в среде Internet, что способно необычайно расширить
функциональные возможности Visual Ваэіс-программ, использу­
ющих ActiveX-элементы.
DCOM
DCOM (Distributed COM ) представляет собой расширение стан­
дарта СОМ. В отличие от первоисточника (стандарт СОМ опре­
делял «правила поведения» программного объекта в памяти)
DCOM специфицирует интерфейс между программными объек­
тами, средой взаимодействия которых является Internet.
296
Технология ActiveX
Таблица 6.1. Терминология OLE/ActiveX в языке Visual Basic 5
I Термин OLE
Термин ActiveX
Описание
OLE-объект
аналогично
Связываемый или
внедряемый объект,
содержащийся в OLEэлементе (OLE-контейнере).
Объект OLEAutomation
ActiveX-объект
Доступный для
программирования объект,
разрешающий доступ к своим
свойствам и методам извне.
OLE-сервер
(визуальный)
аналогично
Приложение, располагающее
связываемым или
внедряемым объектом.
OLE-сервер
ActiveX.EXE
(программируе­
мый)
Приложение,
предоставляющее другим
приложениям связываемый
или внедряемый объект.
OLE DLL
ActiveX.DLL
DLL-библиотека, содержащая
доступный для
программирования объект.
I Custom Control
ActiveX Control
Управляющий элемент,
который может
функционировать в составе
приложения независимо от
языков программирования,
на которых написано
приложение и сам элемент.
нет
соответствия
ActiveX
Document.EXE
Приложение, которое
Microsoft Internet Explorer
может интерпретировать
в качестве Web-страницы.
I нет
I соответствия
ActiveX
Document.DLL
Компонент, который может
быть интерпретирован
в качестве Web-страницы.
6.1. Дополнительные управляющие
элементы
Технология ActiveX играет важную роль в среде Visual Basic еще
и потому, что дополнительные управляющие элементы включа­
ются в состав программы в форме ActiveX-элементов. При этом
обращаться с ними в процессе визуального программирования
можно так же, как и со стандартными элементами.
Обзор. Дополнительные управляющие элементы
■
Прежде чем дополнительный управляющий элемент можно
будет использовать, его необходимо включить в состав кол­
лекции инструментов для данного проекта. Однако элемент
при этом должен быть предварительно зарегистрирован в
системе. Регистрация большинства элементов выполняется
автоматически при их установке, явным образом это можно
сделать с помощью системной утилиты regsvr32.exe.
■ Зарегистрированный элемент можно включить в состав кол­
лекции инструментов посредством диалога Components
(одноименная команда меню Project). Вкладка Controls этого
диалога содержит список зарегистрированных элементов
достаточно поставить пометку (галочку) напротив имени эле­
мента и щелкнуть на ОК, и значок элемента появится в окне
коллекции инструментов, откуда его можно поместить на
форму обычным способом.
■ Как и стандартные, дополнительные управляющие элементы
обладают свойствами, методами и событиями. Кроме обыч­
ного способа доступа к свойствам на этапе визуального про­
граммирования многие из дополнительных управляющих эле­
ментов дают возможность открыть диалог Property Pages
(одноименная команда меню View или [Shift]+[F4]), где обес­
печивается более удобный доступ к некоторым свойствам.
■ Как только дополнительный элемент включен в состав проек­
та, информация о его свойствах, методах, событиях и констан­
тах становится доступной в каталоге объектов ([F2] или ко­
манда Object Browser меню View).
298
Дополнительные управляющие элементы
6.1.1. Дополнительные управляющие элементы
Visual Basic
Точный состав набора дополнительных элементов, поставляе­
мых в составе пакета Visual Basic, зависит от варианта (изда­
ния) пакета. В частности, MAPI-элементы и элемент Internet*
Transfer имеются только в профессиональных вариантах Vis­
ual Basic.
’
Объем книги не позволяет дать подробное описание дополни­
тельных управляющих элементов Visual Basic, поэтому приведем
лишь краткую сводку по ним, где будет описано только назначе­
ние элемента, т. е. круг задач, которые он способен решать. Это
даст возможность определить, какой именно дополнительный
элемент требуется в каждом конкретном случае. А более по­
дробные сведения о применении этого элемента содержатся в
справочной системе Visual Basic. Обычно в справке по дополни­
тельному элементу приводится также пример его использова­
ния.
" - jggl
ЙЙН
Примечание
■ I - ■ — I I !■
■
■
■
Ш В следующей таблице столбец «Элемент» содержит ориги­
нальное английское название дополнительного управляющего
элемента, т. е. строка, которой его идентифицирует всплы­
вающая подсказка в окне коллекции инструментов. Далее (в
скобках) в большинстве случаев приводится русский вариант
названия элемента. Не для всех управляющих элементов Vis­
ual Basic существует устоявшийся русский термин, поэтому
некоторые названия в скобках представляют собой лишь один
из возможных вариантов.
299
Дополнительные управляющие элементы
Таблица 6.2. Дополнительные упр авляющ ие элементы
пакета Visual Basic ь
Элемент
Описание
Animation
Предназначен для анимации кнопок.
Способен воспроизводить AVI-файлы без
звука и без компрессии (исключение RLE-компрессия)^_____________________
CommonDialog
(Общий диалог)
Содержит пять стандартных диалогов^
(Открытие файла, Сохранение файла,
Цвет, Шрифты, Печать). Диалоги просты
в обращении, привычны для пользователя и
автоматически учитывают все особенности
конкретной системы.
DBGrid
(Сетка данных)
С помощью этого элемента можно обеспечить
доступ к базе данных в форме таблицы
(сетки). Источником данных является объект
типа Recordset. Связь с базой данных
осуществляется посредством элемента Data,
при этом возможны как просмотр,
так и модификация данных.
DBCombo
(Комбинированное
поле данных)
Комбинация текстового поля и поля списка,
предназначенная для связи с базой данным
через элемент Data. Текстовое поле
іеспечивает доступ к одному из полей
текущей записи объекта Recordset. Значение
в текстовое поле можно ввести с клавиатуры
или выбрать в поле списка, которое при этом
может отображать другой объект Recordset,
принадлежащий другому элементу Data.|
DBList
(Поле списка
данных)
Данный элемент также предназначен для
доступа к базе данных через элемент Data.
Позволяет выбрать из списка значение и
ввести его в поле текущей записи.
ImageList
(Набор точечных
рисунков)
Представляет собой набор элементов типа
Listimage, к которым можно обращаться
по индексу. Предназначен для совместного
_______________ _________________
.
ражать
рисунки
300
Дополнительные управляющие элементы
Элемент
Описание
ListView
(Просмотр списка)
Управляющий элемент, позволяющий
просматривать список одним из четырех
способов (крупные значки, мелкие значки,
список, таблица). Именно такой просмотр
используется в Проводнике Windows.
MAPIMessages
(Консоль систем­
ных сообщений) и
MAPISession
(Сеанс системных
сообщений)
MAPI (Messaging Application Program
Interface) —интерфейс обмена сообщениями,
посредством которого приложения Windows
могут общаться друг с другом. Используя
элемент MAPISession, приложение открывает
и закрывает сеанс обмена сообщениями,
элемент MAPIMessages предназначен для
выполнения разнообразных функций в плане
приема, отправки и обработки сообщений.
MaskedEdit
(Поле маскирован­
ного ввода)
Этот управляющий элемент расширяет
возможности обычного текстового поля. Он
позволяет маскировать вводимые символы
в зависимости от их позиции. Символ, не
соответствующий маске данной позиции, не
удастся ввести. MaskeEdit обычно используют
для форматирования ввода дат, номеров и
т.д.
Microsoft Internet
Transfer
Этот управляющий элемент предназначен для
работы в Internet и поддерживает протоколы
HyperText Transfer Protocol (HTTP) и File
Transfer Protocol (FTP), которые позволяют
подключаться к WWW-серверам, получать
HTML-страницы и файлы. В сочетании с
другими элементами позволяет строить
приложения-клиенты для этих двух
протоколов.
•
MSChart
(Диаграмма)
Предназначен для отображения данных
в форме диаграмм. Поддерживает все
общепринятые разновидности диаграмм.
В качестве источника данных должен
выступать элемент типа DataGrid.
Дополнительные управляющие элементы
301
Элемент
Описание
MSComm
(Администратор
СОМ-порта)
Обеспечивает доступ к последовательном
СОМ-порту и позволяет выполнять с ним
низкоуровневые операции.
MSFIexGrid
(Сетка)
Универсальная сетка для представления
и редактирования данных в табличных
форматах. Речь может идти о текстовых или
графических данных. Позволяет сортировать,
группировать и форматировать данные,
источником данных может выступать элемент
Data.____________ _______ _______________
Multimedia-MCI
(Мультимедийный
элемент)
Предназначен для записи и воспроизведения
мультимедийных файлов с помощью
МС1-устройств (MIDI-секвенсоры, звуковые
адаптеры, CD-приводы, видеомагнитофоны
и др.). Поддерживает также воспроизведение
видеофайлов Windows (АУІ-файлы).________
PictureClip
(Графический
массив)
Это невидимый в период выполнения
элемент предназначен для того, чтобы
передавать в элементы типа PictureBox (или
выводить на форму) точечные рисунки,
«вырезанные» из точечного рисунка, который
содержится в элементе PictureClip. Это
позволяет хранить в одном большом рисунке
все значки и рисунки, используемые
программой, и извлекать из него вырезки
по мере надобности.
ProgressBar
(Индикатор
процесса)
Элементы этого типа используют для
индикации продолжительных процессов,
чтобы у пользователя не создалось
впечатления, будто программа «зависла».
RemoteData
(Элемент
удаленного доступа
к данным)
Подобно элементу Data этот управляющий
элемент способен связать имеющие свойство
DataSource элементы с удаленным
источником данных по протоколу ODBC.
При этом должен быть создан объект типа
RemoteDataObject (RDO-объект)
302_______
Дополнительные управляющие элементы
Элемент
Описание
RichTextBox
(Текстовое поле
в формате RTF)
Текстовое поле с расширенными
возможностями. Позволяет загружать
текстовые файлы в формате RTr,
обеспечивает множество функций
редактирования и форматирования текста
Slider (Ползунок)
Подобно полосе прокрутки, ползунок
позволяет выбирать числовое значение
с помощью мыши. Кроме того, используя
ползунок Slider, можно выбрать диапазон
значений.
SSTab
(Набор вкладок)
Представляет собой набор страниц
с ярлычками (вкладок), каждая из которых
является элементом-контейнером и способна
содержать в себе другие управляющие
элементы. В каждый момент времени
активной может быть только одна из вкладок
StatusBar
(Панель состояния)
Элемент-контейнер, предназначенный для
размещения элементов, отображающих
текущее состояние программы. Может
делиться на панели (числом до 16), обычно
располагается в нижней части окна
приложения.
Svslnfo
онитор систем­
ной информации)
Этот управляющий элемент позволяет
просматривать сообщения, которые
операционная система рассылает всем
приложениям, а также реагировать
на события, которые генерирует
операционная система.
TabStrip
(Вкладка)
Позволяет организовать многостраничный
режим для некоторой области окна
приложения. В отличие от SSTab элемент
TabStrip сам по себе не является
контейнером, чтобы разместить на каждой
из «страниц» другие управляющие элементы,
необходимо вначале поместить туда рамку
Frame.
Дополнительные управляющие элементы__________________
303
Элемент
Описание
Toolbar
Панель инструментов предназначена для
облегчения пользователю доступа к наиболее
часто используемым командам меню. На нее
обычно помещают командные кнопки, хотя
возможно использование и других элементов.
Чтобы снабдить кнопки панели точечными
рисунками, необходим элемент типа
(Панель
инструментов)
ImageList.______ ___________________ ___
TreeView
(Дерево данных)
UpDown
(Счетчик)
Позволяет представлять набор некоторых
элементов в виде древовидной структуры
(Проводник Windows использует такую
структуру для представления каталогов
и файлов). Каждый элемент структуры мс
снабдить значком.
Предназначен для ввода числовых значений
с помощью мыши. Позволяет перебирать
числовые значения в другом управляющем
элементе (текстовом поле или этикетке)
щелчками на двух кнопках («стрелка
вверх»/«стрелка вниз»).
Winsock
Позволяет устанавливать соединение
с удаленным компьютером по протоколам
TCP и UDP. Это дает возможность
приложению выступать в роли клиента иль
сервера и обмениваться данными в обоих
направлениях.
___
6.1.2. Применение дополнительного управляющего
элемента
В следующем примере будет продемонстрировано применение
двух наборов дополнительных управляющих элементов, которые
часто встречаются в пользовательском интерфейсе Windows-приложений. '
304
Дополнительные управляющие элементы
Пример
Ш Прежде чем станет возможным поместить дополнительные
элементы на форму, их необходимо включить в состав кол­
лекции инструментов. Для этого необходимо выбрать в диа­
логе Components следующие пункты:
t
• Microsoft Windows Common Controls 5.0
• Microsoft Windows Common Controls-2 5.0
Ш В примере программы будут использованы панель инструмен­
тов, панель состояния, индикатор процесса и счетчик (эле­
мент UpDown). Для нанесения рисунков на поверхность кно­
пок панели инструментов будет использован набор точечных
рисунков Im ageList. В результате щелчков на кнопках панели
инструментов должны появляться сообщения. Щелчком на
кнопке Пуск запускается индикатор процесса, при этом дли­
тельность его работы можно выбрать с помощью счетчика,
связанного с обычным текстовым полем, где щелчками на
кнопках счетчика перебираются числовые значения в задан­
ном диапазоне. На панели состояния должны появляться со­
общения, описывающие все, что происходит с программой.
Ш Несколько слов о счетчике и панели состояния. Среди свойств
счетчика UpDown следует обратить внимание на следующие:
• BuddyControl должно содержать имя управляющего эле­
мента, с которым будет связан счетчик и в котором будут
отображаться перебираемые счетчиком числовые значения.
• Мах задает верхнюю границу диапазона, в котором может
меняться значение свойства Value.
• Min задает нижнюю границу.
• Sync Buddy разрешает (True) синхронизацию значения
свойства Value со свойством управляющего элемента, с ко­
торым связан счетчик UpDown.
• BuddyProperty задает то свойство связанного элемента,
которое будет синхронизироваться по свойству Value счет­
чика.
Дополнительные управляющие элементы____________ _________ 125
■
• Среди свойств панели состояния стоит упомянуть лишь
одно:
• Style. В примере его значение равно 1, что соответствует
«простой» панели состояния. В случае Style = 0 панель со­
стояния будет состоять из нескольких панелей.
При старте программы свойство Value элемента spnTime по­
лучает значение 5. Одновременно вызовом процедуры Toolbarlnit инициализируется панель инструментов tbrPanel. Па­
нель включает в себя четыре кнопки, здесь мы опишем процесс
инициализации одной из них. Для загрузки и присоединения
точечного рисунка использовано следующее выражение:
Set imgTemp = imlPicture.Listlmages.A d d (, "club", _
LoadPicture(App.Path + "\club.ico"))
• imgTemp — переменная типа Listlmage, представляющая
собой ссылку на объект типа Listlmage. Объект Listlm age
создается методом Add коллекции Listlmages, а возвра­
щенная методом ссылка на объект помещается в перемен­
ную imgTemp (она нужна только затем, чтобы принять воз­
вращенное методом значение). Параметр «club» стал при
этом ключевым словом, по которому в дальнейшем будет
производиться обращение к Listlmage-объекту (фактически
точечному рисунку из файла club.ico), который содержится
в управляющем элементе типа ImageList. После того как в
элементе im lPicture созданы четыре рисунка, похожим об­
разом в панели инструментов создаются четыре кнопки с
теми же именами с помощью метода Add коллекции But­
tons. Опять использована временная переменная, необхо­
димая лишь для того, чтобы принять возвращаемую мето­
дом Add ссылку. Оператором
tbrPanel.ImageList = imlPicture
набор точечных рисунков im lPicture связывается с панелью
инструментов tbrPanel, а кнопки "club", "diamond , heart
и "spade” — с одноименными рисунками элемента im lPic­
ture. Наконец, посредством свойств ToolTipText и Descrip­
tion временной переменной btnTemp кнопки панели инстру­
ментов снабжаются всплывающими подсказками.
3Q6___________ ____ ______Дополнительные управляющие элементы
Рассмотрим далее процедуру cmdControLCIick. В ней прове­
ряется состояние таймера, которое затем меняется на проти­
воположное с соответствующим изменением надписи на ко­
мандной кнопке cm dC ontrol. При этом, если таймер включен,
инициализируется индикатор процесса (для инициализации
свойства М ах используется значение, выбранное счетчиков
spnTim e). Кроме того, на панель состояния выводится над­
пись, описывающая состояние процесса (свойство Sim pleText). J4 ’ ■•
/ ‘У
i/
Процедура tbrPanel_ButtonClick выполняется по щелчку на
одной из кнопок панели инструментов. С помощью конструк­
ции Select Case здесь анализируется ключевое слово, содер­
жащееся в свойстве Key объекта Button, что позволяет вы­
вести на панель состояния надпись с указанием выбранной
КНОПКИ. •
•-
\
Если таймер включен (активизирован щелчком на кнопке
Пуск), через каждые 250 миллисекунд выполняется процеду­
ра tm rTim erJIm er, благодаря чему индикатор процесса вы­
полняет очередной шаг, а надпись на панели инструментов
корректируется в соответствии с количеством секунд, остав­
шихся до «завершения процесса». Чтобы определить, достиг­
нут ли «финиш» или процесс еще продолжается, анализиру­
ется значение свойства Value индикатора prgP rogress — не
достигло ли оно значения свойства Мах? Благодаря условию
Value Mod 4 = 0 такая проверка выполняется раз в секунду, а
не при каждом событии таймеэа.
is. Дополнительные управляющие элементы
Файл
П ики
Бремя :
І10
I
IL g y
Ш)
►
Осталось 7 секунл В
ч
- V .v
MB' •
%
307
Дополнительные управляющие элементы
Таблица 6.3. Управляющие элементы и их свойства
в примере программы
Form
Toolbar
Свойство
Значение
Name
frmMain
Caption
Дополнительные
управляющие
элементы_______
Name
tbrPanei______ _
1-vbAlignTop
CommandButton
Name
cmdControl
Caption
TextBox
UpDown
Name
txtTime
Locked
True
Name
spnTime
BuddyControl
txtTime
SyncBuddy
BuddyProperty
ProgressBar
Name
prg Progress
Timer
Name
tmrTimer
Enabled
Interval
StatusBar
Name
sbrStatus_______
2-vbAlign Bottom
1-sbrSimple
____________________ Дополнительные управляющие элементы
Свойство
Значение
Label
Name
IblTBRText
ImageList
Name
imlPicture
Label
Name
IblDisplayTime
Caption
Время:
Name
mnuFile
Menu (H)
Caption
Menu (I)
Name
m nutxit
Исходный текст
Option Explicit
Dim iTime As Integer
Dim iRestTime As Integer
Sub Toolbarlnit()
Dim imgTemp As ListImage
Set imgTemp = imlPicture.ListImages.Add_
(, "club”, LoadPicture(A p p .Path +
"\club.ico"))
Set imgTemp «= imlPicture.Listlmages.Add
(, "diamond”, LoadPicture(App.Path +
I\diamond.ico”))
Set imgTemp = imlPicture.Listlmages.Add_
(/ "heart", LoadPicture(App.Path +
"\heart.ico”))
Set imgTemp « imlPicture.Listlmages .Add_
(, "spade”, LoadPicture(App.Path +
”\spade.ico”))
tbrPanel.ImageList = imlPicture
Дополнительные управляющие элементы
309
Dim btnTemp As Button
Set btnTemp = tbrPanel.Buttons.Add(, "club”, , _
tbrDefault, "club”)
btnTemp.ToolTipText = "Трефы"
btnTemp.Description = btnTemp.ToolTipText
Set btnTemp = tbrPanel .Buttons .Add__
(, "diamond”, , tbrDefault, _
"diamond")
btnTemp.ToolTipText - "Бубны"
btnTemp.Desctiption = btnTemp.ToolTipText
Set btnTemp = tbrPanel.Buttons.Add(, "heart , , __
tbrDefault, "heart")
btnTemp.ToolTipText = "Черви"
btnTemp.Description = btnTemp.ToolTipText
Set btnTemp = tbrPanel.Buttons.Add(, "spade , , _
tbrDefault, "spade")
btnTemp.ToolTipText | "Пики"
btnTemp.Description = btnTemp.ToolTipText
End Sub
Private Sub cmdControl_Click ()
If tmrTimer.Enabled Then
tmrTimer.Enabled Ц False
cmdControl.Caption | "Пуск"
Else
iTime = spnTime.Value
iRestTime = iTime
tmrTimer.Enabled = True
prgProgress.Max = 4 * iTime
prgProgress.Value = 0
cmdControl.Caption = "Стоп"
310
________________ Дополнительные управляющие элементы
sbrStatus.SimpleText = "Осталось "
& Str(iRestTime) + " секунд"
tmrTimeг.Enabled = True
End If
End Sub
Private Sub Form__Load()
spnTime.Value = 5
Toolbarlnit
End Sub
*
Private Sub mnuExit_Click()
Unload Me
End
End Sub
Private Sub tbrPanel_ButtonClick(ByVal Button As
ComctlLib.Button)
lblTBRText.Caption == Button.Description
Select Case Button.Key
Case Is = "club"
sbrStatus.SimpleText §j I
"Вы щелкнули на первой"
& " кнопке панели инструментов!"
Case Is = "diamond"
sbrStatus. SimpleText = __
& "Вы щелкнули на второй"
& " кнопке панели инструментов!"
Case Is =' "heart"
sbrStatus.SimpleText = Я
& "Вы щелкнули на третьей"
& " кнопке панели инструментов!"
Case Is = "spade"
sbrStatus.SimpleText = _
& "Вы щелкнули на четвертой" _
& 4 кнопке панели инструментов!
End Select
End Sub
Private Sub tmrTimer T i m e r ()
rgProgress.Value = prgProgress.Value + 1
P
If prgProgress.Value Mod 4 = 0 Then
iRestTime = iRestTime - 1
sbrStatus.SimpleText = "Осталось
& _
Str(iRestTime) + " секунд"
End If
If prgProgress.Value = prgProgress.Max Then
tmrTimer.Enabled = False
cmdControl.Caption = "Пуск"
sbrStatus.SimpleText = "Готово!"
End If
End Sub
6.1.3. Создание собственных управляющих элементов
Visual Basic предоставляет возможность создавать дополнитель­
ные управляющие элементы — это одна из новаций версии 5 (точ­
нее, ее профессиональных вариантов). Раньше создание управ­
ляющего элемента, который можно было бы использовать в Visual
Basic-программах, требовало привлечения других систем про­
граммирования, например, Visual C++. Собственные управляю­
щие элементы — очень простой и удобный путь создания много­
кратно используемых компонентов. Это открывает также новые
312________ __ ___________ Дополнительные управляющие элементы
возможности в плане структурирования программы. Можно пред­
ставить себе приложение, состоящее из управляющих элементов,
каждый из которых реализует одну из функциональных возмож­
ностей. Собственно программа будет представлять собой в этом
случае «скелет», связывающий все управляющие элементы во­
едино и координирующий их работу. Большую часть кода такой
программы можно использовать в других проектах.
Обзор
*
Ш Создание управляющего элемента состоит из ряда этапов, ко­
торые мы вкратце опишем:
• Первое, что следует сделать, — уяснить себе, что создавае­
мый элемент должен делать (звучит банально, конечно, но
это необходимый этап).
• На втором этапе производится визуальное программирова­
ние элемента — это аналогично помещению на форму уп­
равляющих элементов.
• Далее необходимо составить список свойств, методов и со­
бытий, которыми должен обладать создаваемый элемент,
т. е. продумать интерфейс законченного элемента с внеш­
ним миром.
• Чтобы разрабатывать управляющий элемент, необходимо
иметь возможность его тестировать и отлаживать. Для
этого необходимо создать второй проект, который будет
играть роль тестовой программы, и объединить оба про­
екта в группу.
• Наконец, настает пора засучить рукава и реализовать в коде
все необходимые функциональные возможностин элемента.
• Следующий шаг состоит в том, чтобы написать код, реали­
зующий свойства, методы и события элемента, благодаря
которым программы, в состав которых он может быть вклю­
чен, могли бы с ним взаимодействовать.
• Теперь можно испытать управляющий элемент в действии.
Его следует поместить на форму тестовой программы и на­
писать код, который будет обращаться ко всем свойствам
Дополнительные управляющие элементы____________ _________ 313
и методам элемента. Необходимо также предусмотреть ис­
пытание его событий. Конечно, расширять испытания сле­
дует постепенно, на каждом шаге запуская тестовую про­
грамму и устраняя обнаруженные в элементе ошибки.
• Чтобы облегчить жизнь будущему пользователю, следует
снабдить свой элемент страницами свойств.
• Наконец, отлаженный элемент следует создать в форме
OCX-файла и испытать его уже в полностью реальных условиях— как обычный дополнительный управляющий элемент.
■ При отладке и тестировании управляющего элемента следует
иметь в виду некоторые особенности:
• Как уже упоминалось, для тестирования элемента необхо­
дим дополнительный проект типа Standard.EXE, поскольку
сам элемент запустить или выполнить в обычном понимании
невозможно. Проект управляющего элемента и проект тес­
товой программы необходимо объединить в группу.
• Некоторые части кода управляющего элемента выполняют­
ся даже тогда, когда тестовая программа еще не запуще­
на — это касается обработки событий, таких, как Resize или
Paint. Обрабатывается также изменение значений свойств.
Необходимо при этом, чтобы окно управляющего элемента
было закрыто.
• Иногда необходимо обновить экземпляр элемента, поме­
щенный на форму тестовой программы (в случаях, когда в
проект управляющего элемента внесены изменения).
Можно удалить элемент, а затем снова поместить его на
форму или же можно воспользоваться контекстным меню
формы тестовой программы.
■ Если созданный вами управляющий элемент предназначен
для распространения, то необходимо создать программу ус­
тановки (для этого следует воспользоваться соответствую­
щим мастером). Программа установки даст пользователю
возможность зарегистрировать управляющий элемент в сис­
теме, без чего она не сможет им воспользоваться.
314
Дополнительные управляющие элементы
Пример
■
Элемент типа U serC ontrol, который занимает место формы в
таблице элементов проекта, представляет собой контейнер,
в который можно поместить другие управляющие элементы,
и снабдить все это программным кодом.
■ В примере реализован управляющий элемент «Часы», пред­
назначенный для отображения системного времени. Его
можно поместить на форму, можно изменить его размеры
(при этом автоматически изменится размер шрифта, посред­
ством которого отображается системное время).
■ Опишем вкратце шаги по созданию управляющего элемента:
• Функции элемента достаточно просты. Он должен показы­
вать время и позволять менять свои размеры.
• Его визуальные компоненты также не отличаются сложнос­
тью. Всю площадь элемента должна занимать этикетка, ото­
бражающая время.
• Методов для управляющего элемента «Часы» не предусмот­
рено, но он должен обладать свойством Enabled, чтобы
можно было включать и выключать его, а также двумя со­
бытиями — C lick (позволяющее тестовой программе обна­
руживать и подсчитывать щелчки на управляющем элемен­
те) и Resize (обеспечивающее изменение размеров этикет­
ки и шрифта при изменении размеров элемента как на этапе
визуального программирования, так и при выполнении про­
граммы).
• Поместив на элемент этикетку и таймер, следует ввести
программный код.
• Затем следует создать тестовую программу и испытать эле­
мент. .
■ДО р .. | V • -*^м Н 1*1
PJ Г*. ' Г
• Последние шаги в данном примере не детализируются.
■ В коде управляющего элемента остановимся на нескольких
моментах:
Дополнительные управляющие элементы_________ _____________H r
Основную задачу элемента, т. е. отображение системного
времени решает процедура обработки события таймера,
которая раз в секунду передает в этикетку строку, получен­
ную преобразованием значения системного времени:
IblTim e.C aption = Str(Tim e). Весь остальной код элемента
обеспечивает функционирование его свойства Enabled и
событий C lick и Resize.
Чтобы реализовать событие, его необходимо объявить в
общем разделе модуля. С помощью оператора Event в при­
мере объявлено событие Click. Это событие обязательно
должно быть объявлено с использованием зарезервирован­
ного слова Public, поскольку коду внешней программы не­
обходимо его «видеть». По «внутреннему» событию элемен­
та C lock — щелчку на этикетке IblTime — генерируется со­
бытие C lick для «внешнего мира», эту задачу решает опе­
ратор RaiseEvent. Событие Resize не имеет значения для
внешнего мира и используется управляющим элементом
для собственных потребностей, поэтому нет нужды его объ­
являть. При изменении размеров элемента (в том числе,
когда он находится на форме в режиме визуального про­
граммирования) будет выполняться процедура UserControl_Resize, при этом ряд свойств этикетки будет соответст­
венным образом скорректирован. Размеры этикетки будут
приведены к новым размерам управляющего элемента, а
размер шрифта этикетки станет равным 92% ее высоты.
Если использовать в качестве единицы измерения пункты
(SacaleMode = 2), то никакой пересчет не потребуется, по­
скольку размер этикетки будет выражаться непосредствен­
но в пунктах.
Свойство Enabled. Чтобы реализовать его, необходимо не­
сколько процедур. Заготовки процедур проще всего со­
здать, используя команду Add Procedure меню Tools. Вы­
берите тип процедуры Property, и в окно кода будет встав­
лена пара процедур - P roperty G et и P roperty Let. Первая
из них выполнится в случае, если программа попытается
прочитать значение свойства, вторая — если свойству будет
присвоено значение. В данном случае это приведет к вклю-
316
Дополнительные управляющие элементы
чению или выключению таймера. Другая пара процедур,
U serC ontroLW riteP roperty и U serC ontrol_R eadProperty,
отвечает за сохранение и восстановление значения свойст­
ва при записи и чтении экземпляра объекта (например, при
сохранении и открытии проекта, содержащего элемент).
Обе процедуры используют объект P ropertyBag. Синтаксис
процедур:
v
W rite P ro p e rty (И м я, Значение[, СтандартноеЗначение])
• И м я— имя, под которым в записи экземпляра объекта будет
храниться значение свойства.
• Значение — значение свойства.
• СтандартноеЗначение — значение свойства, которое
будет записано в случае, если свойству на момент записи
не было присвоено никакого значения.
R eadP roperty (И м я[, СтандартноеЗначение])
• Имя — имя, под которым в записи экземпляра объекта
ранее записано значение свойства.
• СтандартноеЗначение — см. выше.
■ Остается событие InitP roperties. Оно происходит при созда­
нии экземпляра объекта, и процедура его обработки позво­
ляет присвоить начальные значения свойствам.
Ш Последний ш аг— компиляция проекта и создание файла ОСХCLOCK.OCX (см. меню File), который можно включить в состав
тестовой программы.
Процедура. Создание тестовой программы
1. Вы уже поняли, что запустить созданный вами управляющий
элемент непосредственно нельзя. Чтобы иметь возможность
тестировать и отлаживать элемент, необходимо иметь на ра­
бочей поверхности Visual Basic два проекта одновременно —
проект управляющего элемента и проект тестовой програм­
мы. Для удобства их следует объединить в группу. Начнем
сначала: запустите Visual Basic.
2. Создайте проект тип Standard.EXE.
Дополнительные управляющие элементы______________________ 317
3. С помощью диалога Components (меню Project) найдите и
включите в состав коллекции инструментов созданный вами
управляющий элемент OCXCLock (Visual Basic зарегистриро­
вал его в системе при компиляции).
4. Поместите на форму управляющие элементы и введите код.
5. Сохраните проект.
6. Откройте проект управляющего элемента.
7. Чтобы сделать это, не закрывая проект тестовой программы,
воспользуйтесь командой Add Project меню File.
8. Оба проекта открыты. Если вы взглянете на окно проекта, то
заметите там пункт Project Group.
9. Сохраните группу проектов.
10. Теперь можно работать над обоими проектами одновременно.
Можно вносить изменения в управляющий элемент, помещать
его на форму тестовой программы и запускать тестовую про­
грамму. Переключаясь на окно формы тестовой программы,
необходимо закрывать окно управляющего элемента.
OCXCtock - Microsoft Visual Basic Idesiqnl - (Clock (UserControl)]
318
Дополнительные управляющие элементы
Таблица 6.4. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
I
UserControl
Name
Clock
I
ScaleMode
2-Point
Name
tmrTimer
Enabled
False
Interval
1000
Name
lblTime
Alignment
2-Center
BorderStyle
1-FixedSingle
Font
Arial
Timer
Label
30
жирный
Исходный текст
Option Explicit
Public Event C l i c k ()
Private Sub lblTime__Click ()
RaiseEvent Click
End Sub
Private Sub tmrTimer_Timer()
lblTime.Caption = Str(Time)
End Sub
Private Sub UserControl_InitProperties()
Enabled = True
End Sub
J
|
Private Sub UserControl_ReadProperties(PropBag As _
PropertyBag)
Enabled = PropBag.ReadProperty("Enabled", True)
End Sub
Private Sub UserControl__Resize ()
With lblTime
VTop « 0
.Left = 0
.Width = UserControl.ScaleWidth
.Height = UserControl.ScaleHeight
.FontSize = UserControl.ScaleHeight * 0.92
End With
End Sub
i x:yo
v t
‘
Public Property Get Enabled() As Boolean
Enabled = tmrTimer.Enabled
End Property
Public Property Let Enabled(ByVal vNewValue As _
Boolean)
tmrTimer.Enabled = vNewValue
End Property
Private Sub UserControl_WriteProperties(PropBag _
As PropertyBag)
P r o p B a g .WriteProperty "Enabled", Enabled, True
End Sub
Обзор. Тестовая программа
I
Этот проект необходим для испытания управляющего элемен­
та в действии. На форму этого проекта помещается испытуе­
мый элемент, код этой программы обращается к его свойст­
вам и обрабатывает его события.
320
Дополнительные управляющие элементы
Чтобы проверить событие Resize, достаточно изменить раз­
меры элемента на форме в режиме визуального программи­
рования — размер этикетки должен соответственно изменить­
ся. Шрифт надписи на этикетке должен меняться только при
изменении высоты элемента, поскольку изменение ширины в
коде элемента не обрабатывается.
Для проверки события Click предназначена процедура обра*
ботки этого события. При вводе кода этой процедуры должны
действовать общие правила окна кода — окно кода должно от­
крываться на обработчике события C lick по щелчку на управля­
ющем элементе, процедура должна быть также доступной с по­
мощью комбинированных полей в верхней части окна кода.
Функционирование свойства Enabled проверяется процеду­
рой обработки щелчка на командной кнопке cm dControl (над­
пись на кнопке меняется, а «часы» останавливаются или во­
зобновляют свой ход).
«ь. Тест OCXd o ck
Таблица 6.5. Управляющие элементы и их свойства
в примере программы
1 Объект
Свойство
Значение
1 Form
Name
frmMain
Caption
Tea OCXCIock
Name
cmdControl
Caption
(не имеет значения)
1 Comma ndButt on
Свойство
Значение
OCXClock
Name
Clockl
Label
Name
IblClickCount
Alignment
2-Center
AutoSize
жирныи
Исходный текст
Option Explicit
Dim iClickCount As Integer
Private Sub cmdControl__Click ()
If Clockl.Enabled Then
Clockl.Enabled = False
cmdControl.Caption = "Пуск"
Else
Clockl.Enabled = True
cmdControl.Caption = "Стоп"
End If
End Sub
Private Sub Form__Load()
iClickCount - 0
cmdControl.Caption J "Стоп"
End Sub
Private Sub Clockl_Click()
iClickCount = iClickCount + 1
IblClickCount.Caption = _
"На управляющем элементе ""Часы""" __ .
& " было выполнено " & Str(iClickCount) _
& " щелчков"
End Sub
11 Заказ 3337
Дополнительные управляющие элементы
322
6.1.4. Диалоги
Пользовательский интерфейс — дорога с двусторонним движе­
нием. Программе иногда требуется выдать сообщение или задать
вопрос пользователю, который должен принять решение и сооб­
щить о нем программе. Эта задача решается встроенными диа­
логами Visual Basic, которые и станут темой данного раздела, fe
предыдущей главе (см. 5.3) мы рассмотрели технику создания
специального диалога. Теперь же речь пойдет о встроенных диа­
логах Visual Basic, т. е. диалогах, которые можно использовать
без всякой подготовки.
Две функции языка Visual Basic — M sgBox и InputB ox — предна­
значены для вывода на экран окна сообщения, которое также дает
возможность вернуть в программу сигнал о сделанном пользова­
телем выборе. Наконец, дополнительный управляющий элемент
Com m onDialog содержит пять стандартных диалогов, служащих
для выбора цвета, открытия файла и др.
Обзор. Встроенные диалоги
■
Функция M sgBox открывает окно сообщения, содержащее за­
данный набор кнопок и значков (а также, конечно, само сооб­
щение), и возвращает в программу значение, позволяющее
сделать вывод о выбранной пользователем кнопке. Есть два
варианта использования этой функции — ее можно вызвать
как процедуру (и тогда не может быть речи о возвращаемом
значении) или можно присвоить возвращаемое функцией зна­
чение переменной и затем его проанализировать. Синтаксис
функции:
М здВ ох{С ообщ ение, [К н о п ки И З н а чо к], [З а гл а в и е ],
[Ф а й л С п р а в ки ], [К о н те кс т])
• С ообщ ение. Собственно текст сообщения (строковое зна­
чение длиной до 1024 знаков).
• КнопкиИ З начок. Сумма констант, определяющих наличие
разных кнопок и значков (а также уровень модальности) в
окне сообщения (см. табл.6.6).
• Заглавие. Определяет текст титульной строки окна сооб­
щения.
к
:
^
*" '
.. .
w
• ФайлСправки. Имя файла справки.
• Контекст. Определяет конкретную тему в файле справки.
• Возвращаемое функцией значение принадлежит к типу In­
teger. Константы, которые может возвращать функция, при­
ведены в таблице 6.6.
Второй встроенный диалог Visual Basic открывается функцией
InputBox. В отличие от функции M sgBox она возвращает в
качестве значения текстовую строку, введенную пользовате­
лем. Синтаксис функции:
\приіВох(Сообщение,[Заглавие],[ЗаготовкаСтроки],[Х],
[Y], [ФайлСправки], [Контекст]) As String
• Сообщение. Текст сообщения в окне диалога (строковое
значение длиной до 1024 знаков).
• Заглавие. Текст титульной строки окна диалога — если он
не задан, в качестве заглавия будет использовано имя приложения.
• ЗаготовкаСтроки. Строка, которая будет помещена в текс­
товое поле ввода при открытии окна диалога. Пользователь
может отредактировать или заменить ее.
• X. Отступ в твипах левого края окна сообщения от левого
края экрана. При отсутствии этого параметра окно диалога
будет центрировано по горизонтали.
• Y. Отступ в твипах верхнего края окна сообщения от верх­
него края экрана. При отсутствии этого параметра отступ
будет равен трети высоты экрана.
• ФайлСправки. Имя файла справки.
• Контекст. Определяет конкретную тему в файле справки.
• Возвращаемое функцией значение относится к типу String.
Это строка, введенная пользователем в текстовое поле.
324
Дополнительные управляющие элементы
Таблица 6.6. Важные константы ф ункции MsgBox
| Константа
Значение
Описание
2
В окне сообщения
присутствуют кнопки
Стоп, Повтор
и Пропустить.
| Кнопки в окне сообщения
1 vbAbortRetrylgnore
vbOKCancel
1
Кнопки ОК и Отмена.
]
vbOKOnly
0
Кнопка ОК.
1
vbRetryCancel
5
Кнопки Повтор
и Отмена.
4
Кнопки Да и Нет.
vbYesNoCancel
3
Кнопки Да, Нет
и Отмена.
vbDefaultButtonl
0
Первая из кнопок окна
сообщения должна быть
кнопкой по умолчанию
(т. е. она должна
реагировать на клавишу
[Enter]).
vbDefaultButton2
256
Кнопка по умолчанию вторая.
vbDefaultButton3
512
Кнопка по умолчанию третья.
vbDefaultButton4
768
Кнопка по умолчанию —
четвертая.
vbCritical
16
В окне сообщения
должен присутствовать
значок критического
сообщения.
vbExdamation
48
Значок предупреждения.
1 vbYesNo
Значки в окне сообщения
к
1
I
1
| Константа
vblnformation
vbQuestion
Значение
Описание
I Значок информации.
32_________ I Значок запроса.
64
Уровень модальности
окна сообщения
vbApplicationModal
О
Модальность уровня
приложения
(пользователь не сможет
вернуться в окно
программы, пока
не закроет диалог
надлежащим образом —
но сможет при этом
перейти в окно другого
приложения).
vbSystemModal
4096
Модальность системного
уровня (пользователь не
сможет вообще ничего
сделать, пока не закроет
диалог надлежащим
образом).
Возвращаемое значение
Тз
Была нажата кнопка
Стоп. _______
vbCasncel
|2
Была нажата кнопка
Отмена.
vblgnore
|5
Была нажата кнопка
Пропустить.
vbNo
17
Была нажата кнопка Нет.
vbOK
j 1
Была нажата кнопка ОК.
I vbRetry
|4
Была нажата кнопка
Повтор.
vbAbort
I vbYes
6
Была нажата кнопка Да.
j
326
Дополнительные управляющие элементы
Пример
■
■
■
В данном примере будет продемонстрировано применение
функций MsgBox и InputBox.
Экранная форма программы содержит шесть командных кно­
пок. С помощью первой кнопки открывается диалог InputBofc,
позволяющий задать строку сообщения для остальных диало­
гов, которые относятся к разновидностям MsgBox и открыва­
ются следующими четырьмя кнопками. Возвращаемое функ­
цией MsgBox значение в этих случаях не анализируется, это
делается лишь в диалоге выхода из программы, который от­
крывается шестой кнопкой.
Теперь взглянем собственно на код:
• В процедуре Form_Load задается строка сообщения, кото­
рую используют диалоги MsgBox, пока она не будет изме­
нена с помощью диалога InputBox.
• Это может быть сделано кнопкой Изменить текст сообщ е­
ния. Процедура обработки события Click этой кнопки от­
крывает диалог InputBox, где текущее значение строки
strMessage может быть изменено (это делается посредст­
вом вызова функции InputBox и посредством локальной
переменной strNewMessage).
• Процедуры следующих четырех кнопок практически иден­
тичны. Они различаются только набором кнопок и значком
в окне сообщения. В качестве текста сообщения везде ис­
пользуется значение строковой переменной strMessage.
• По щелчку на кнопке Выход выполняется процедура
cmdExit_Click и соответственно метод формы Unload. Это
влечет за собой событие формы QueryUnload, и выполня­
ется процедура Form_QueryUnload. То же самое произойдет,
если закрыть окно не кнопкой Выход, а кнопкой [X] (кнопка
закрытия окна) в правом верхнем углу. Таким образом поль­
зователь не сможет избежать диалога, предоставляющего
ему шанс отказаться от своего намерения завершить про­
грамму.
~
• Для анализа решения пользователя в процедуре Form_QueryUnload использована конструкция Select Case. Трем кнопкам в
окне сообщения, Да, Нет и Отмена, соответствуют три
ветви конструкции Select Case, причем в одном из случаев
пользователь получает дополнительное сообщение.
Изменить текст сообщения
Первый припер MsgBox
Второй пример MsgBox
Третий пример MsgBox
|
Четвертый пример MsgBox
Четвертый пример
Сообщение просто ток. для примера!
П оатор
Пропустить
Таблица 6.7. Управляющие элементы и их свойства
в примере программы
Свойство
Значение
Form
Name
frmMain
CommandButton
Name
cmdExit
Caption
Выход
Name
cmdMsgBox4
Caption
Четвертый пример
MsgBox
CommandButton
328
Дополнительные управляющие элементы
1 Объект
Свойство
Значение
1 CommandButton
Name
cmdMsgBox3
Caption
Третий пример MsgBox
Name
cmdMsgBox2
Caption
Второй пример MsgBox
Name
cmdMsgBox!
Caption
Первый пример MsgBox
Name
cmdlnputBox
Caption
Изменить текст
сообщения
CommandButton
CommandButton
CommandButton
Исходный текст
Option Explicit
Dim strMessage As String
Private Sub cmdExit__Click ()
Unload Me
End Sub
Private Sub cmdInputBox_Click
Dim strNewMessage As String
strNewMessage =
InputBox("Введйте новый текст: ", _
"Новый текст", strMessage)
If strNewMessage О "" Then
strMessage — strNewMessage
End If
End Sub
Private Sub cmdMsgBoxl__Click ()
MsgBox strMessage, , "Первый пример!"
End Sub
Private Sub cmdMsgBox2_Click()
MsgBox strMessage,vbYesNo + vbExclamation __
"Второй пример!"
End Sub
Private Sub cmdMsgBox3_Click()
McrtRnv
c-t- г М р « ч я а р .vhYesNoCancel + vblnformation
"Третий пример!t «
End Sub
Private Sub cmdMsgBox4__Click ()
MsgBox strMessage,vbAbortRetrylgnore + _
vbCritical + vbDefaultButton3,
"Четвертый пример!"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, __
UnloadMode As Integer)
Dim iAsk As Integer
iAsk = MsgBox("Вы уверены, что хотите выйти?", _
vbYesNoCancel + vbQuestion + _
vbDefaultButton2, "Конец работы")
Select Case iAsk
Case vbYes
End
Case vbNo
Cancel = True
MsgBox "Очень мило с вашей стороны!",
,"Спасибо"
Case vbCancel
Cancel = True
cmdMsgBoxl.SetFocus
End Select
E n d Sub
330_______
Дополнительные управляющие элементы
Обзор. Общий диалог
■
Существует ряд разновидностей диалога, которые, с одной
стороны, достаточно сложны в реализации, а с другой —
встречаются весьма часто. Такие стандартные диалоги объ­
единены в дополнительном управляющем элементе CommonDialog (Общий диалог).
г
■
Чтобы воспользоваться этим элементом, необходимо включить
его в состав коллекции инструментов (диалог Components
меню Project, пункт M icrosoft Common Dialog Control 5.0).
■
Этот элемент, как и некоторые другие, обозначает свое при­
сутствие значком. Он не имеет видимых в период выполнения
программы компонентов и для того, чтобы задействовать его,
необходимо обратиться к его методам в коде программы.
■
Изменить конфигурацию диалогов перед их открытием можно
с помощью свойства Flags — делается это с использованием
набора констант.
■
Многие свойства элемента CommonDialog доступны для из­
менения на этапе визуального программирования. Он обла­
дает страницами свойств, облегчающими эту задачу.
■
В приведенной ниже таблице описаны виды общего диалога,
которые можно открыть посредством управляющего элемента
CommonDialog. Описание их свойств, а также констант для
свойства Flags вы найдете в последующих таблицах.
Примечание
■
Все виды общего диалога доступны при наличии на форме
одного элемента типа CommonDialog.
Примечание редактора перевода
■
Поскольку для создания окна диалога (это касается как общих
диалогов, так и рассмотренных ранее встроенных диалогов Vis­
ual Basic) программа пользуется системными функциями Win­
dows, то язык некоторых надписей в окне диалога будет зави­
сеть от версии Windows. Одна и та же программа в локализо­
ванной русской версии Windows и в стандартной Windows будет
выводить на экран разные надписи. В данной книге этот факт
обозначается конструкцией вида:
А нглийская над пись/Р усская надпись
Таблица 6.8. Виды общего диалога
1Диалог
I Open/
I Открытие
1 файла
1 Save A s /
I Сохранение
1 Метод
ShowOpen
1
ShowSave
файла
1 Описание
Диалог позволяет выбрать диск,
каталог и файл. Результат диалога
возвращается в свойстве FileName.
Позволяет сохранить файл
1 на диске, при этом выбранное _
пользователем полное имя файла Я
| возвращается в свойстве FileName.
I
ShowColor
Диалог выбора цвета, результат
возвращается в свойстве Color.
1 Font/Ш риф ты
ShowFont
Диалог выбора шрифта, результат I
возвращается в свойстве Font.
1
I
ShowPrinter
Color/Цвет
Print/Печать
1
Этот диалог служит для выбора
1
принтера и параметров вывода
1на печать.
____ 1
О ткры тие ф айла /С охранение ф айла
Как следует из их названий, эти диалоги предназначены для откры­
тия и сохранения файла. Вид диалогов ничем не отличается от тех,
которыми пользуются популярные Windows-приложения. Они позво­
ляют выбрать не только файл или каталог, но и диск, включая сетевые
устройства. Необходимо помнить—эти диалоги не открывают файл
и не записывают его на диск, а лишь возвращают требуемые для
этого данные. Чтобы открыть окно диалога Открытие файла, кото­
рое отображало бы только файлы с расширением TXT из каталога
C:\TEXT, следует воспользоваться примерно таким кодом:
With cdlFileOpen
.InitDir - "C:\TEXT”
.Filter = "*.TXT (текстовые) I* .TXT
.ShowOpen
End
Дополнительные управляющие элементы
Таблица 6.9. Свойства диалогов Ореп/Открытие файла
и Save As/Сохранение файла
Свойство
Описание
CancelError
Разрешает (True) генерацию ошибки периода
выполнения в случае, когда пользователь
прерывает диалог с помощью кнопки
СапсеІ/Отмена. Это позволяет распознать
такую ситуацию, используя обычные приемы
обработки ошибок.
’;
‘
Default Ext
Позволяет задать «стандартное» расширение
имени файлов (сохраняемые файлы будут
снабжаться им по умолчанию).
DialogTitle
Задает титульную строку окна диалога.
FileName
Содержит полное имя выбранного или
сохраненного файла.
FileTitle
Содержит имя выбранного или сохраненного
файла без имени каталога.
Filter
Список масок файлов, отображаемых
в комбинированном поле.
Filterlndex
Номер текущего элемента списка Filter.
Flags
Значение этого свойства определяет параметры
диалога. Конкретный набор параметров
задается суммой констант (см табл.ниже).
HelpCommand
доступа
HelpContext
Задает ссылку на контекст справки по диалогу
HelpFile
Задает имя файла справки.
HelpKey
Сюда помещается ключевое слово, которое
будет использовано при вызове справки.
InitDir
Определяет стартовый каталог диалога (он
будет текущим в момент открытия диалога).
MaxFileSize
Ш
ъ:
Дополнительные управляющие элементы______________________333
Примечание
Свойства HelpCommand, HelpContext, HelpFile и HelpKey
имеются во всех вариантах общего диалога. Свойство Falgs
также доступно во всех диалогах, однако набор констант, с
ним связанных, различен.
для свойства Flag
файла и Save As Л
Константа
cdlOFNAIIowMultiselect
Описание
Разрешает групповое выделение имен
файлов. Свойство FileName в этом
случае будет содержать имена всех
выделенных файлов, разделенные
символами пробела._______________
cdlOFNCreatePrompt
Разрешает ввод имен несуществующих
файлов, пользователь получает
возможность создать файл.
cdlOFNExplorer
Диалог Открытие файла будет
реализован в стиле Explorer
(наподобие Проводника Windows).
cdlOFNExtensionDifferent
Если задано значение свойства
DefaultExt, то данный флаг будет
сигнализировать о том, что
расширение имени файла, которое
возвращает диалог, не соответствует
стандартному j
cdlOFNFileMustExist
Разрешает ввод с клавиатуры имен
только существующих файлов (иначе
будет выдано предупреждение).
cdlOFNHelpButton
Задает присутствие кнопки справки
в окне диалога.
1
cdlOFNHideReadOnly
В окне диалога будет отсутствовать
поле флажка Read Only/Только для
чтения
Разрешает использование длинных
имен файлов.
'__Т~ЯШЯ^Я
cdlOFNLongNames
334
___________________ Дополнительные управляющие элементы
Константа
Описание
cdlOFNNoChangeDir
Запрещает изменение текущего
каталога в процессе диалога.
cdlOFNNoLongNames
Запрещает использование длинных
имен файлов.
cdlOFNNoReadOnlyReturn
Запрещает диалогу возвращать имена
файлов с атрибутом Readonly,
а также файлов, находящихся
в защищенных от записи каталогах.
cdlOFNNoValidate
Разрешает диалогу возвращать имена
файлов, содержащие запрещенные
символы.
cdlOFNPathMustExist
Подавляет предупреждение о том, |
сохраняемый файл уже существует.
cdlOFN Readonly
Предустанавливает флажок ReadOnl
при открытии диалога, а также
возвращает состояние флажка после
закрытия диалога.
cdlOFNShareAware
Заставляет диалог игнорировать
ошибки доступа к разделяемым
файлам.
вы &
Часто необходимо предоставить пользователю возможность вы
брать цвет. Общий диалог C olor/Ц вет решает эту задачу.
Таблица 6.11. Свойства диалога Color/Ц ве т
Свойство
Описание
В этом свойстве диалог возвращает
выбранный пользователем цвет и оно
же позволяет предустановить цвет,
который будет выбран при открытии
диалога.
Дополнительные управляющие элементы
Таблица 6.12. Константы для свойства Flags диалога Color/Ц вет
=
------------
Константа
Описание
I
cdlCCFullOpen
Задает расширенный вариант диалога,
позволяющий определить
пользовательские цвета (кнопка Custom
Colors/О пределить цвет).
1
jcdlCCHelp Button
cdlCCPreventFullOpen
1 cdlCCRGBInit
В
-■ ■
1
-
=
Определяет наличие кнопки справки
в окне диалога.
|
Отключает кнопку Custom
Colors/О пределить цвет, в результате
пользовательские цвета не могут быть
определены.
1
Задает значение первоначального цвета
в диалоге, равное цвету, выбранному при
предыдущем открытии диалога.
1
|
^яй
Вы бор ш риф та
Задача выбора шрифта также относится к широко распростра­
ненным и поэтому представлена общим диалогом Font/Ш риф ты .
Он позволяет выбрать не только шрифт и его размеры, но также
атрибуты и признаки начертания. Чтобы при открытии диалога в
нем был выбран текущий шрифт того объекта, на шрифт которого
будет направлен диалог, необходимо открыть диалог примерно
таким образом (имя общего диалога — cdlFontSelect, шрифт вы­
бирается для этикетки IblM yLabel):
W ith c d lF o n tS e le c t
.FontN am e = Ib lM y L a b e l. Font.N am e
.F o n tS iz e = Ib lM y L a b e l. F o n t. S iz e
.F o n tB o ld = Ib lM y L a b e l. F o n t. B o ld
. F o n t S t r ik e t h r u — Ib lM y L a b e l. F o n t. S t r i k e t h r u
.F la g s = c d lC F S c re e n F o n ts + c d ls E f f e c t s + _
c d lC F T T O n ly
.S how F ont
End W ith
Таблица 6.13. Свойства диалога Font/Ш риф ты
д Свойство
Описание
Color
Задает цвет шрифта. Доступно только в случае
когда свойство Flags содержит константу
__________________ I cdlCFEffects (см. табл.ниже).
Nags
Это свойство служит для определения разного
рода атрибутов диалога, наличие отдельных
атрибутов определяется при этом константами
__________________ I из таблицы 6.14.
FontBold
Значение True свидетельствует о том, что
выбранный пользователем шрифт обладает
__________________ I признаком начертания: «жирныи».
Fontltalic
Значение True свидетельствует о том, что
выбранный пользователем шрифт обладает
__________________ I признаком начертания: «курсив».
FontName
Содержит имя выбранного пользователем
I шрифта.
FontSize
Содержит значение размера выбранного
__________________ шрифта в пунктах.
FontStrikeThru
__________________
Значение True свидетельствует о том, что
выбранный пользователем шрифт обладает
атрибутом: «перечеркнутый».
FontUnderLine
Значение True свидетельствует о том, что
выбранный пользователем шрифт обладает
__________________ атрибутом: «подчеркнутый».
Мах
Возвращает или позволяет установить
максимальный размер шрифта, доступный
в диалоге.
Min
Возвращает или позволяет установить
минимальный размер шрифта, доступный
в диалоге.
Дополнительные управляющие элементы
337
Таблица 6.14. Константы для свойства Flags диалога
Font/Ш риф ты
Константа
Описание
cdlCFANSIOnly
Разрешает доступ только к шрифтам
в кодировке ANSI._________________
cdlCFApply
Определяет наличие в окне диалога
кнопки Арріу/Применить
cdlCFBoth
Разрешает доступ как к шрифтам
принтера, так и к экранным шрифтам
cdlCFEffects
Разрешает управление цветом и
атрибутами шрифта.___________
cdlCFFixedPitchOnly
Запрещает доступ к масштабируемым
шрифтам.
_____________________
cdlCFForceFontExist
Определяет, что при попытке
пользователя выбрать несуществующий
шрифт или атрибут будет выдано
сообщение об ошибке.
cdlCFHelpButton
Задает присутствие кнопки справки
в окне диалога.___________________
cdlCFLimitSize
Определяет, что диалог должен
позволять пользователю выбор только
тех размеров шрифта, которые находятся
в диапазоне, заданном значениями
свойств Min и Мах._________________
cdlCFNoFaceSel
Сигнализирует о том, что пользователь
не выбрал шрифт.
cdlCFNoSimulations
Запрещает диалогу GDI-эмуляцию
шрифта.
cdlCFNoSizeSel
Сигнализирует о том, что пользователь
не выбрал размер шрифта.
cdlCFNoStyleSel
Сигнализирует о том, что пользователь
не выбрал стиль шрифта.
cdlCFNoVectorFonts
Запрещает выбор векторных шрифтов.
338
Дополнительные управляющие элементы
cdlCFPrinterFonts
Определяет, что диалог позволит
выбирать только шрифты принтера,
заданного значением свойства hDC
(см. табл.6.15).
cdlCFScalableOnly
Разрешает доступ только к
масштабируемым шрифтам.
cdlCFScreenFonts
Определяет, что диалог позволит
выбирать только экранные шрифты.
cdlCFTTOnly
Определяет, что диалог позволит
выбирать только шрифты типа TrueType
cdlCFWYSIWYG
Определяет, что диалог должен
позволять пользователю выбор только
тех шрифтовг которые имеются и для
экрана, и для принтера (технология
WYSIWYG).
Наконец, последний из общих диалогов, содержащихся в допол­
нительном управляющем элементе Com m onDialog. Он служит
для выбора и конфигурирования принтера и установки парамет­
ров вывода на печать (собственно вывод на печать должен при
этом осуществляться в коде).
Таблица 6.15. Свойства диалога Print/П ечать
Свойство
Описание
Задает количество копий выводимого
на печать документа.
Это свойство служит для определения
разного рода атрибутов диалога,
наличие отдельных атрибутов
определяется при этом константами
из таблицы 6.1о.
Дополнительные управляющие элементы
339
Свойство
Описание
FromPage
Определяет номер страницы документа,
с которой должен начаться вывод на
печать.
HDC
Содержит ссылку на контекст принтера
Мах
Возвращает или позволяет установить
максимальное значение, которое может
быть выбрано в поле То/По._________
Min
Возвращает или позволяет установить
минимальное значение, которое может
быть выбрано в поле From/С _________
PrintDefault
При значении этого свойства, равном
True, выбранные в диалоге параметры
печати станут параметрами принтера по
умолчанию.
________
ToPage
Определяет номер страницы документа,
до которой должен продолжаться вывод
на печать.
Таблица 6.16. Константы для свойства Flags диалога
Print/Печать
Константа
Описание
cdlPDAHPages
Возвращает и позволяет задать состояние
позиции переключателя All Pages/Bce.
cdlPDCollate
Возвращает и позволяет задать состояние
поля флажка Collate/Разобрать.
cdlPDDisablePrintToFile
Отключает поле флажка Print То
Ғііе/Печать в файл
cdlPDHelpButton
Определяет наличие в окне диалога
кнопки справки.
cdlPDHidePrintToFile
Делает невидимым поле флажка Print То
Ғііе/Печать в файл.
6.1
340
Константа
Дополнительные управляющие элементы
Описание
Отключает позицию переключателя
Pages/Страницы и связанные с ней
текстовые поля То/По и From/C.
cdlPDNoSelection
Отключает комбинированное поле
выбора принтера.
cdlPDNoWarning
Запрещает выдачу предупреждения
в случае, когда не выбран принтер по
умолчанию.
cdlPDPageNums
Возвращает и позволяет задать состояние
позиции переключателя
Pages/Страницы.
cdlPDPrintSetup
Вместо диалога Print/Печать будет
открыт системный диалог Print
Setup/Настройка принтера.
cdlPDPrintToFile
Возвращает и позволяет задать состояние
поля флажка Print То Ғііе/Печать
в файл.
cdlPDReturnDC
Возвращает (через свойство HDC)
контекст принтера, выбранного в диалоге
cdlPDReturnDefault
Возвращает имя принтера по умолчанию
cdlPDReturnlC
Возвращает (через свойство HDC)
информационный контекст принтера,
выбранного в диалоге. Это позволяет
получить сведения о принтере,
не создавая его контекст.
cdlPDSelection
Возвращает и позволяет задать состояние
позиции переключателя
Selection/Выделенный фрагмент.
cdlPDUseDevMode
Copies
Если драйвер принтера не поддерживает
печать копий, то этот флаг позволяет
отключить поле Copies/Число копий.
В противном случае флаг сигнализирует
о том, что пользователем задано
значение этого поля.
OLE-элемент
341
6.2. OLE-элемент
Многие приложения позволяют подключиться к функциональным
возможностям других приложений для создания и редактирова­
ния разного рода объектов. Например, если речь идет о доку­
менте Word, то собственно программа Word будет играть роль
OLE-сервера, а приложение, пользующееся для редактирования
Word-документа функциональными возможностями Word, —
роль OLE-клиента. Еще одна возможность заключается в исполь­
зовании методов объекта. Многие приложения полностью под­
держивают объектную модель, что подразумевает четкую ие­
рархию объектов и возможность доступа к ней других приложе­
ний. Некоторые программы реализованы как OLE-минисерверы.
Они при этом не могут выполняться самостоятельно, а пред­
ставляют собой DLL-библиотеки, предназначенные для исполь­
зования другими приложениями.
Благодаря управляющему элементу OLE создатели программ на
языке Visual Basic располагают простым способом реализовать
технологии OLE и ActiveX. Этот управляющий элемент представ­
ляет собой OLE-контейнер (и соответственно ActiveX-контвйнер). С помощью его свойств и методов программа может вос­
пользоваться ActiveX-объектами самых разных видов. Главное
преимущество управляющего элемента OLE простота, с какой
он позволяет манипулировать объектами, принадлежащим раз­
ным приложениям, устанавливать связь между приложениями и
объектами. Приведенная ниже таблица содержит список
свойств, методов и событий управляющего элемента OLE.
342
OLE-элемент
Таблица 6.17. Свойства, методы и события элемента OLE
Свойства
Описание
Action
Задает вид действия, подлежащего
выполнению. Доступно только
в период выполнения, существует
ради совместимости с предыдущими
версиями, вместо него следует
пользоваться соответствующими
методами.
ApplsRunning
Логическое значение, отражающее
состояние приложения, которым был
создан объект, находящийся в OLEконтейнере (True соответствует
выполняющейся программе
Доступно только в период
выполнения.
AutoActivate
Определяет режим активизации
приложения, создавшего объект
(по получению фокуса, по двойному
щелчку, автоматический или др.).
AutoVerbMenu
Определяет, должно ли по щелчку
правой кнопкой мыши на OLEконтейнере появляться контекстное
меню со списком действий, которые
можно выполнить в отношении
объекта.
Class
Возвращает имя класса, к которому
принадлежит внедренный объект.
Data
Это свойство позволяет послать
данные в то приложение, которое
создало объект, находящийся в OLE*
контейнере. Формат данных должен
быть задан в свойстве Format.
DataText
Посылает строку объекту или
принимает ее.
DisplayType
Определяет, должен ли объект
отображать на экране свои данные
или значок.
OLE-элемент
________
343
Свойства
Описание
FileNumber
Содержит номер файла, служащего
для загрузки или сохранения объекта.
Format
Определяет формат данных для
обмена с приложением, которое
создало OLE-объект.
HostName
Содержит имя Visual Basicприложения.
LpOleObject
В этом свойстве содержится адрес
объекта, находящегося в OLEконтейнере.
MiscFlags
Обеспечивает доступ к
дополнительным функциональным
возможностям OLE-элемента.
Object
Возвращает объект, содержащийся
в OLE-контейнере и/или его свойства
и методы.
_____
ObjectAcceptFormats
Содержит список форматов,
поддерживаемых объектом в
отношении принимаемых данных.
ObjectAcceptFormatsCount
Количество элементов списка
форматов в свойстве
ObjectAcceptFormats
ObjectGetFormats
Содержит список форматов,
поддерживаемых объектом
в отношении передаваемых данных
ObjectGetFormatsCount
Количество элементов списка
форматов в свойстве
ObjectGetFormats.______________
ObjectVerbFlags
Возвращает состояние меню
со списком действий, которые можно
выполнить в отношении объекта
(массив ObjectVerbs).
^
OLE- элемент
1 Свойства _________
1 ObjectVerbs
ObjectVerbsCount
I OLEDropAllowed
Описание
" Массив, представляющий собой
список действий, которые можно
выполнить в отношении объекта,
находящегося в OLE-контейнере.
Количество элементов массива
ObjectVerbs.
Возвращает значение True в случае,
когда существует возможность
завершить операцию Draq&Drop
в отношении объекта, и False, если
завершить перетаскивание в данном
месте нельзя.
OLEType
Возвращает состояние OLE-объекта
в контейнере (связываемый,
внедренный, никакого).
OLETypeAllowed
Позволяет задать список типов
объектов, которые должен
поддерживать OLE-контейнер.
....
PasteOK
I Picture
*
Разрешает (True) или запрещает
! (False) операцию вставки объекта
из буфера обмена в OLE-контейнер.
|
Только для чтения. Возвращает
графический файл, отображаемый
OLE-элементом.
1
1
1
SizeMode
Возвращает и позволяет задать режим 1
согласования размеров OLE-элемента 1
и загружаемого в него объекта._______ 1
SourceDoc
Имя файла, в котором содержится
объект, который находится или
должен быть загружен в OLEконтейнер.
1
1
1
1
Sourceltem
Указывает на те данные в объекте,
которые подвергаются связыванию.
I
|
OLE-элемент
______345
Свойства
Описание
UpdateOptions
Содержимое этого свойства
определяет, каким образом будет
обновляться объект, когда
связываемые данные изменятся.
Verb
Задает вид действия, которое будет
1
выполнено в отношении объекта при 1
его активизации с помощью свойства |
Action. Существует ради
I
совместимости с предыдущими
1
версиями, вместо него следует
использовать метод DoVerb.
|
Close
1 Описание______________ ____________
Закрывает объект, находящийся в OLE-1
контейнере и завершает его
связывание с приложением, где он
был создан.
1
Сору
Копирует объект, находящийся в OLE- |
контейнере в буфер обмена Windows. 1
1 Методы
I CreateEmbed
Выполняет операцию^ внедрения
I
объекта в OLE-контейнер.____________ J
I Create Lin к
Пользуясь содержимым заданного
файла, создает связываемый объект.
■ Delete
Позволяет удалить объект и
1
одновременно освободить
1
занимаемую им память._____________ I
1 DoVerb
Открывает объект для выполнения
1
над ним одного из действий._______ 1
1 FetchVerbs
Обновляет список действий,
возможных в отношении объекта._____
JlnsertObjDIg
Открывает диалог Insert Object,
позволяющий пользователю выбрать
объект для помещения в OLEконтейнер.
1
В
1
Свойства
Описание
Paste
Выполняет операцию вставки объекта
в OLE-контейнер из буфера обмена
Windows. ______
PasteSpecialDIg
Открывает диалог Paste Scpecial
(Специальная вставка), дающий
пользователю возможность вставить
объект в OLE-контейнер из буфера f
обмена и при этом выбрать несколько
параметров вставки.
ReadFromFile
Позволяет загрузить из файла объект,
ранее сохраненный с помощью
метода SaveToFile.
SaveToFile
Позволяет записать объект,
находящийся в OLE-контейнере, в
файл. Если ActiveX-элемент
необходимо записать в формате OLE
1.0, то следует воспользоваться
методом SaveToOLEIFile. При записи
связываемого объекта фактически
записываются только его связываемые
данные. ______
^ г
SaveToOlelFile
Позволяет записать объект,
находящийся в OLE-контейнере, в
файл формата OLE 1.0.______
Update
Обновляет объект в OLE-контейнере
на основании данных из приложения,
посредством которого объект
редактируется.
Событие
Описание
ObjectMove
Происходит немедленно после того,
как объект, находящийся в OLEконтейнере, переместился или
изменил свои размеры.
Updated
Происходит в случае изменения
данных в объекте.
OLE-элемент
___________________
ЧД7
Пример
■
■
■
■
■
■
Этот пример призван продемонстрировать технику работы с
OLE-элементом, позволяющую редактировать объекты раз­
личных типов.
Программа дает возможность загрузить объект в OLE-контей­
нер в режиме либо связывания, либо внедрения, от чего за­
висит способ его редактирования по двойному щелчку на OLEэлементе. В случае внедрения объекта он может редактиро­
ваться в рамках программы с использованием функциональ­
ных возможностей соответствующего приложения. Если будет
выбран режим связывания, то для редактирования объекта
будет запущено «родное» ему приложение, что дает возмож­
ность выполнить манипуляции с объектом, выйти из связан­
ного с ним приложения и при этом вернуться в программу,
содержащую OLE-объект. Кроме того, пример программы по­
зволяет выбрать один из режимов в отношении непомещающейся части объекта. В случае Обрезать выходящая за пре­
делы контейнера часть объекта будет исключена, если же
пользователь выберет режим М асш табировать, то весь
объект поместится в контейнер, но при этом его масштаб из­
менится.
Код программы сводится к трем процедурам. В процедуре
Form_Load инициализируется список видов объектов IstO bje c t.
Процедура командной кнопки Загрузить объект учитывает
состояние переключателей Адаптация и Вид объекта.
Для загрузки объекта вначале анализируется вид объекта, вы­
бранный в поле списка (конструкция Select Case), затем сле­
дует вызов процедуры LoadObject. Обратите внимание - в
тексте примера в качестве параметра этой процедуры должен
выступать реально существующий файл.
Процедура LoadObject загружает объект либо связывая, либо
внедряя его в зависимости от состояния переключателя Вид
объекта (для этого используется один из двух методов OLEэлемента — CreateEm bed или C reateLink).
” 8
OLE-элемент
Двойной щелчок на OLE-контейнере активизирует связывание
или внедрение содержащегося в нем объекта, а щелчок пра­
вой кнопкой мыши открывает контекстное меню, связанное с
объектом.
frf а к Ш Ш ВВвШ
Вид о б ъ е к т а / ; Адаптация
3 Связывание ||< ? Обрезать
/г Внедрение
Масштабироеат ь
; [Документ Word
j (Таблица Excel
■
Точечны й рисинок
Загрузить
объект!
Ш
Таблица 6.18. Управляю щ ие элементы и их свойства
в прим ере програм м ы
Form
Свойство
Значение
Name
frmMain
BorderStyle
1-FixedSingle
Caption
MaxButton
Frame
OptionButton
Name
fraCustom
Caption
Адаптация
Name
optScale
OLE-элемент
Свойство
Объект
Значение
Caption_____________ Масштабировать
Name
optCut
Caption
Обрезать
ListBox
Name______________
IstObject
CommandButton
Name_____________ 11 cmd LoadObject
Caption_______ _____ Загрузить объект
Frame
Name___________
OptionButton
Name______________ 1 optLink
Caption_____________ Связывание
OptionButton
Name______ ________ optEmbed
Caption_____________ Внедрение
OLE
Name
OptionButton
I fraObjectType
■
Caption_____________ Вид объекта
oleObject
Исходный текст
Option Explicit
Sub LoadObject(FileName As String, Embed As _
Boolean)
If Embed Then
oleObject.CreateEmbed FileName
Else
oleObject.CreateLink FileName
End If
End Sub
350
Внешние утилиты A d d -In
Private Sub cmdLoadObject C l i c k ()
Select Case IstObject.Listlndex
Case 0
LoadObject "C:\Test.doc", optEmbed.Value
Case 1
LoadObject "C:\Test.xls", optEmbed.Value
Case 2
LoadObject "C:\Test.bmp", optEmbed.Value
Case Else
MsgBox "Объект не выбран!",
vbExclamation, " I" ”
Exit Sub
End Select
If optCut Then
oleObject.SizeMode = vbOLESizeClip
Else
oleObject.SizeMode = vbOLESizeStretch
End If
End Sub
Private Sub Form_Load()
With IstObject
.Addltem ("Документ Word")
.Addltem ("Таблица Excel")
.Addltem ("Точечный рисунок")
End With
End Sub
6.3. Внешние утилиты A dd-In
Механизм Add-ln-утилит позволяет расширять возможности IDE.
Add-ln-утилиты представляют собой ActiveX-компоненты, вклю­
ченные в объектную модель Visual Basic. Эти объекты способны
взаимодействовать с IDE, окнами кода, формы и т.д., а также ре­
агировать на события среды IDE. Add-In утилиты могут функцио-
Внешние утилиты A dd-In
________ ____ ____________ ___________ £51
нировать в среде любого варианта Visual Basic, но только про­
фессиональные варианты позволяют их создавать. Механизм
Add-In представляет собой своего рода макроязык среды IDE.
Различают четыре разновидности Add-In:
|
A d d -In . Утилита общего назначения, функционирующая в
среде IDE.
М астер. Утилита, облегчающая выполнение сложных, но при
этом типичных процедур, которые необходимо проделывать в
процессе создания приложения.
С луж ебная п р о гр а м м а . Этот вид Add-In в противополож­
ность обычной для Add-In форме DLL-библиотек компилиру­
ется как ЕХЕ-файл. Благодаря этому такая служебная про­
грамма может быть запущена как из среды IDE, так и само­
стоятельно.
У тилита ко н ф и гур а ц и и . Этот вид Add-In предназначен для
облегчения настройки свойств управляющего элемента. В
версии 5 эти утилиты утратили свое значение, поскольку в Vis­
ual Basic 5.0 предусмотрен более удобный доступ к свойствам
с помощью страниц свойств.
6.3.1. Применение Add-In
Прежде чем Add-ln-утилитой можно будет воспользоваться, ее
необходимо зарегистрировать в системе, как и любой ActiveXкомпонент. При этом добавляется соответствующий пункт в
раздел ADD-lns32 файла VBADDIN.INI, который находится в ка­
талоге Windows. Вот пример такого раздела.
[A d d -In s 3 2 ]
VBSDIAddln.Connect=0
DataToolsAddln.Connect=0
AppWizard.Wizard=l
W i z M a n .Connect=0
ClassBuilder.Wizard=0
AddlnToolbar.Connect=0
ControlWiz.Wizard=0
DataFormWizard.Wizard=0
ActiveXDocumentWizard.Wizard=0
PropertyPageWizard.Wizard=0
APIDeclarationLoader.Connect=0
В
Каждый пункт соответствует одной Add-In утилите. Значение 1
указывает на присутствие утилиты в меню Add-Ins, а 0 — на­
оборот, говорит о том, что в меню Add-Ins такого пункта^нет.
Л Зарегистрировать в системе и включить в состав меню AddIns утилиту проще всего с помощью команды A dd-ln-M anager
этого же меню.
6.3.2. Программирование Add-In
Ш Любая утилита Add-In должна удовлетворять требованиям
объектной модели и правильно взаимодействовать со средой
IDE, поэтому ее структура жестко определена:
Обзор. Структура A dd-In
Ш Add-ln-утилита состоит по меньшей мере из одного проекта
типа ActiveX.DLL, одного программного модуля и одного мо­
дуля классов.
• Проект типа ActiveX.DLL является необходимой предпосыл­
кой создания Add-In.
• В программном модуле должна быть объявлена API-функ­
ция с именем W riteP rivateP rofileS tring (см. ниже), необхо­
димая для обращения к файлу VBADDIN.INI при регистрации
готовой утилиты в системе пользователя.
• Модуль классов должен определять процедуры* обработки
событий (есть, как минимум, четыре стандартных события,
на которые обязана реагировать Add-ln-утилита, см. ниже).
Там можно разместить, в принципе, весь код Add-ln-утилиты, но в случае обширного кода лучше воспользоваться не­
сколькими модулями.
Ш В созданный проект Add-In необходимо добавить две ссылки,
для этого следует открыть диалог References (одноименная
команда меню P roject) и выбрать пункты M icro so ft Visual
Basic 5.0 E xtensibility и M icro so ft O ffice 8 .0 O bject Library.
353
Внешние утилиты A dd-In
■
Затем следует включить в состав проекта программный мо­
дуль и поместить там следующий код:
Declare Function WritePrivateProfileString Lib _
"kernel32" __
Alias "WritePrivateProfileStringA" (ByVal __
IpApplicationName As String, ByVal lpKeyName As _
Any, _
ByVal IpString As Any, ByVal lpFileName As __
String) As Long
Sub INIAdd()
Dim Dummy As Long
Dummy = WritePrivateProfileString("Add-Ins32", _
" ИмяПроекта. ИмяМодуляКлассов" ,
"0", _
"VBADDIN.INI")
MsgBox "Add-In зарегистрирована в INI-файле!"
End Sub
■
• Вот краткие пояснения относительно параметров функции
W riteP rivateP rofileS tring:
• Параметр ”Add-lns32" задает раздел в INI-файле.
• Параметр «ИмяПроекта. ИмяМодуляКлассов" должен состо­
ять из имени проекта (значение свойства Name в окне
свойств) и имени модуля классов.
В модуле классов должны присутствовать четыре стандартные
процедуры, реализующие интерфейс IDTExtensibility. Кроме
того, в свойстве Instancing необходимо выбрать значение
M u ltills e . Вот четыре события, обработчики которых должны
быть предусмотрены в модуле классов:
• O nAddlnsllpdate происходит при внесении пункта в файл
VBADDIN.INI.
• OnConnection происходит при установлении связи с IDE (с
помощью A dd-ln-M anager или других Add-ln-утилит).
• OnDisconnection происходит, когда связь с IDE прекраща­
ется.
• OnStartupCom plete происходит после полной загрузки IDE.
12 Заказ 3337
354
Внешние утилиты A dd-In
Private Sub IDTExtensibility_OnAddInsUpdate _
(custom() As Variant)
'Комментарий необходим, чтобы пустая заготовка
9процедуры учитывалась при компиляции
End Sub
Private Sub IDTExtensibility_OnConnection
(ByVal VBInst As Object, ByVal _y
ConnectMode As VBIDE.vbext _
ConnectMode, ByVal Addlnlnst As
VBIDE.Addin, c u s t o m () As VariantT
9Комментарий необходим, чтобы пустая заготовка
'процедуры учитывалась при компиляции
End Sub
Private Sub IDTExtensibility__OnDisconnection _
(ByVal RemoveMode As VBIDE.vbext _
Disconnection, c u s t o m O As Variant)
'Комментарий необходим, чтобы пустая заготовка
'процедуры учитывалась при компиляции
End Sub
Private Sub IDTExtensibility_OnStartupComplete _
(customO As Variant)
'Комментарий необходим, чтобы пустая заготовка
9процедуры учитывалась при компиляции
End Sub
В
В
Затем наступает пора снабдить Add-ln-утилиту теми функцио­
нальными возможностями, ради которых она, собственно, со­
здается.
После того как код Add-In введен, ее следует откомпилировать и
создать DLL-файл с помощью команды Маке меню File. Чтобы
зарегистрировать новую Add-ln-утилиту в системе, необходимо
вызвать процедуру INIAdd (см. выше). Это можно сделать, на­
брав ее имя в окне Im m ediate и нажав [Enter]. Затем создайте
новый проект (закрыв при этом текущий) и, используя команду
Add-ln-M anager, включите утилиту в состав меню Add-Ins.
Обзор. Объекты Visual Basic
В
Модель расширения возможностей Visual Basic предполагает
некую иерархию объектов, с помощью которых можно получить
доступ к разнообразным областям приложения этой системы
программирования. В этом смысле различают шесть сфер при­
менения возможностей объектной модели.
■ Расширение функциональных возможностей рабочей поверх­
ности. Это позволяет, к примеру, включить в меню новый пункт
или добавить в панель инструментов новую кнопку. Можно, на­
конец, создать вообще новое меню.
■ Работа над проектами. Объектный подход к проектам позволя­
ет выполнять над ними разнообразные манипуляции. Можно
открыть проект, отредактировать его или удалить.
■ Редактирование экранной формы. В создаваемой пользовате­
лем Add-ln-утилите можно предусмотреть доступ к редактируе­
мой экранной форме, в том числе к ее коду, ее управляющим
элементам и их свойствам.
■ Обработка событий. Многие элементы IDE генерируют собы­
тия, на которые может реагировать созданная пользователем
Add-ln-утилита. Для этого используют объект Events, взаимо­
действующий с такими источниками событий, как VBProjects,
VBComponents, VBControls, References.
■ Редактирование исходного кода. В этой области возможна раз­
ного рода автоматизация (например, операции над строками —
выделение, копирование, вставка, поиск и замена и т.д.).
■ Применение Add-ln-утилит. Панель инструментов Add-In пред­
ставляет собой пример Add-ln-утилиты, использующей объек­
ты этого вида. Они дают возможность связывать Add-In с IDE
или прерывать такую связь.
Обзор. Другие возможности Visual Basic
■
В
Рутинную работу по созданию Add-ln-утилиты можно сокра­
тить, если воспользоваться таким приемом: создайте проект
типа ActiveX.DLL и добавьте к нему модуль с помощью команды
Add M odule меню Project. Этот диалог позволит создать заго­
товку утилиты Add-In.
Если речь идет о создании мәстөрә, то стоит воспользоваться
Add-ln-утилитой VB Wizard Manager, которую можно включить
в состав меню Add-Ins с помощью команды Add-ln-M anager.
9Ш М ультим едиа:
Я гр аф и ка , з в у к
и д р уги е
?
Слово «мультимедиа» весьма популярно в компьютерном мире.
Однако за тем, что называют этим словом, не скрывается ничего
принципиально нового. Под мультимедиа понимают объединение
графики, видео, звука, текста и анимации — все это существовало
и раньше. Но вместе с тем мультимедиа рождает новое качество.
Главное здесь — принцип интерактивности. Телевидение дает
возможность видеть движущееся изображение, но роль зрителя
при этом пассивна — он должен смотреть то, что ему показывают.
Компьютер, оснащенный средствами мультимедиа, открывает
перед пользователем новые горизонты — пользователь может
взаимодействовать с ним и управлять потоком визуальной ин­
формации. Интерактивность подразумевает диалог между поль­
зователем и программой, если же речь идет о мультимедийной
программе, то это означает диалог с использованием видеоизо­
бражения, звука, графики и т.д. Все это дает широчайшие воз­
можности в таких областях, как обучение, презентации, опера­
тивное управление процессами и др.
Visual Basic предоставляет разнообразные возможности в плане
создания мультимедийных приложений. Некоторые из них интег­
рированы в сам язык, другие могут быть привлечены извне. На­
пример, операции с графикой, шрифтами и отчасти со звуком
можно выполнить средствами языка. Другие возможности, а
именно воспроизведение звуковых и видеофайлов, обращение к
мультимедийным устройствам и т.п. можно реализовать с помо­
щью дополнительных управляющих элементов. В этой главе мы
рассмотрим различные аспекты использования технологий муль­
тимедиа в Visual Besic-программах.
Объект Form и управляющ ий элемент PictureBox
357
7.1. Объект Form и управляющий элемент
PictureBox
Подобно тому как художник нуждается в холсте для создания кар­
тины, программа нуждается в объекте, где она могла бы отобра­
жать графическое изображение или точечный рисунок. Сущест­
вуют два объекта-контейнера, способные содержать в себе то­
чечный рисунок из графического файла и рисовать на своей по­
верхности с помощью графических методов — это экранная
форма и элемент PictureBox. Оба они могут содержать в себе
другие управляющие элементы и обладают графическими мето­
дами.
7.1.1. Система координат
Как форма, так и картинка PictureBox обладают системой коор­
динат, в соответствии с которой происходит любой вывод на по­
верхность формы или картинки текста, графики или рисунков.
Единицу измерения координат можно выбрать исходя из специ­
фики конкретной программы — например, если требуется выво­
дить текстовые надписи, то наиболее удобной единицей будет
пункт, поскольку именно в пунктах измеряются размеры шрифта.
В следующем кратком обзоре мы коснемся тех свойств и мето­
дов, которые имеют отношение к системе координат (они име­
ются как у формы, так и у элемента PictureBox).
Обзор. М етоды и свойства, имею щ ие отнош ение
к системе координат
■
Метод Scale позволяет определить систему координат и еди­
ницу измерения на форме, элементе PictureBox и объекте
Printer. Для этого следует задать координаты начала и конца
отсчета по вертикали и горизонтали. Чтобы использование оп­
ределяемой пользователем системы координат оказалось
возможным, необходимо, чтобы свойство ScaleM ode имело
значение 0. Синтаксис метода:
И м я О б ъ е кта .Scale (х 1 , у 1 ) - (х 2 , у 2 )
358
Объект Form и управляю щ ий элемент PictureBox
• х ч9 уч __ координаты левого верхнего угла (точки отсчета)
новой системы координат.
• х2, у2 — координаты правого нижнего угла области приме­
нения новой системы координат. Если первая пара коорди­
нат опущена, то должна быть опущена и вторая — в этом
случае на рабочей поверхности объекта будет принята сис­
тема координат по умолчанию (с твипом в качестве единицы
измерения). Если указаны обе пары координат, то они ста­
нут соответствовать левому верхнему и правому нижнему
углам объекта. Единица измерения в этом случае будет оп­
ределяться фактическими размерами объекта и диапазо­
ном изменения соответствующей координаты.
■ С помощью методов ScaleX и ScaleY можно выполнить пре­
образование координат из одной системы в другую. Их син­
таксис:
ScaleX (X, ИсходнаяЕдиница, РезультирующаяЕдиница)
ScaleY (Y, ИсходнаяЕдиница, РезультирующаяЕдиница)
• х , Y — значения, подвергаемые преобразованию.
• ИсходнаяЕдиница — единица измерения в исходной сис­
теме.
'
7 ‘ г н , ]| Г
ги * 1
• РезультирующаяЕдиница — единица измерения в резуль­
тирующей системе.
■ Свойство ScaleM ode отвечает за используемую единицу из­
мерения. По умолчанию в качестве единицы измерения вы­
браны твипы (Twips). Эта единица соответствует 1/1440
дюйма или 0,0176 миллиметра. Преимущество твипов состоит
в их почти полной независимости от видеорежима (в проти­
воположность, скажем, пикселам). Свойство ScaleM ode по­
зволяет также выбрать в качестве единицы измерения санти­
метры, миллиметры, дюймы, пункты или символы.
■ ScaleLeft, ScaleTop. Значения этих свойств задают положе­
ние начала координат в определяемой пользователем систе­
ме.
Объект Form и управляю щ ий элемент PictureBox
___________ 359
7.1.2. Графические методы
Наряду с графическими управляющими элементами, такими, как
линия или фигура, экранная форма и элемент PictureBox распо­
лагают рядом графических методов, позволяющих рисовать на
рабочей поверхности объекта.
Обзор. Граф ические м етоды
■
С помощью метода C ircle на рабочей поверхности формы или
элемента PictureBox можно рисовать окружности и эллипсы.
Кроме явно заданных параметров метод учитывает значения
свойств FillColor, FillStyle, DrawWidth, DrawMode и DrawStyle. Задав значения этим свойствам перед вызовом метода,
можно получить разнообразные эффекты. Синтаксис метода:
C ircle [S tep ]fx, у), Radius, [Цвет], [Начало], [Конец],
[Аспект]
• Step. Если вызов метода сопровождается этим зарезерви­
рованным словом, то при определении местоположения
центра окружности будут использованы относительные ко­
ординаты. Т. е. пара значений (х , у) будет отсчитана не от
начала координат, а от текущей позиции вывода, значение
координат которой содержится в свойствах CurrentX и CurrentY.
• х , у. Пара координат, задающих местоположение центра ок­
ружности в координатах формы либо элемента PictureBox
или же в относительных координатах (см. выше).
• Radius. Задает значение радиуса окружности.
• Цвет. Этот параметр позволяет задать цвет окружности.
Для этого можно использовать функции QBColor или RGB.
Если параметр отсутствует, то будет использован цвет, оп­
ределенный значением свойства ForeColor.
• Начало, Конец. Метод C ircle позволяет рисовать также
дуги и сектора. Для этого должна присутствовать пара пара­
метров, определяющих начало и конец дуги или сектора в
радианах (диапазон 0..2 «пи» для дуг и диапазон -2 «пи» ..О
для секторов).
360
Объект Form и управляю щ ий элемент PictureBox
• Аспект. Если задан этот параметр, то метод нарисует эл­
липс, отношение осей которого равно Аспект.
■ Метод CIs служит для очистки поверхности объекта от всяких
следов работы графических методов или текстового вывода.
На управляющие элементы и точечный рисунок, определен­
ный свойством Picture, действие метода CIs не распростра­
няется. Синтаксис метода сводится к его вызову:
CIs
Ш Метод Line служит для рисования линий и прямоугольников.
Как и в случае метода Circle, результаты работы метода lime
зависят от значений свойств FillColor, FillStyle, DrawWidth,
DrawMode и DrawStyle. Синтаксис метода Line:
Line [Step ](x1, y1 )[S tep ](x2, у2),[Цвет ],[В][Ғ]
• Step. См.описание метода Circle.
• x1, у1 и x2, y2. Две пары координат, задающих местопо­
ложение начала и конца линии (или в случае прямоугольника
левый верхний и правый нижний углы). Если использовано
зарезервированное слово Step, то координаты отсчитыва­
ются от текущей позиции вывода.
• Цвет. См.описание метода Circle.
• В. Если задан этот параметр, то метод нарисует прямо­
угольник, а не линию.
•І
• Ғ. Параметр можно использовать только при наличии пара­
метра В. Прямоугольник в этом случае будет заполнен.
■ Метод PSet служит для рисования на рабочей поверхности
объекта одиночной точки. Размеры точки будут обусловлены
значением свойства DrawWidth. Синтаксис метода:
PSet [Steptfx, у), [Цвет]
• Step. См.описание метода Circle.
• х, у. Пара координат, в которых будет нарисована точка.
• Цвет. См.описание метода Circle.
Объект Form и управляющ ий элемент PictureBox
Ml
7.1.3. Точечные рисунки
Как форма, так и элемент PictureBox позволяют разместить на
своей рабочей поверхности точечный рисунок. Для этого суще­
ствуют две возможности:
8 Свойство Picture позволяет определить источник рисунка, но
при этом нет никакой возможности повлиять на расположение
рисунка на поверхности объекта. Рисунок будет позициони­
рован так, чтобы его левый верхний угол совпадал с левым
верхним углом формы или элемента PictureBox. В качестве
источника может выступать файл формата BMP, ICO, GIF или
JPEG. Значение свойства Picture можно, конечно, прочитать
(например, для использования в другом объекте).
P ic tu re /= Источник]
• Источник. Полное имя файла, содержащего рисунок. В пе­
риод выполнения следует использовать функцию LoadPic-
ture:
■
P icture ~LoadPicture( ИмяФайла ~)
Другая возможность заключается в использовании метода
PaintPicture. Он позволяет позиционировать на объекте ри­
сунок, загруженный из графического файла (BMP, WMF, EMF,
ICO, DIB).
I
PaintPicture Рисунок,x 1,у1, Ширина 1, Высота 1,x2, y2, Ширина2, Высота2, КодОперации
• Рисунок. Источник рисунка, в период выполнения следует
использовать функцию LoadPicture.
• х 1 , у1. Координаты левого верхнего угла рисунка на рабо­
чей поверхности объекта.
• Ширина 1, Высота 1. Этими параметрами можно задать
ширину и высоту рисунка на поверхности объекта. Если их
значения будут отличаться от значений параметров Ширина2 , Высота2, то рисунок будет соответственным образом
растянут или сжат. Отрицательные значения параметров
приведут к зеркальному отображению рисунка.
Управляю щ ий элемент Image
362
• х2, у2. Задают координаты на рисунке-источнике, при этом
только часть рисунка будет помещена на поверхность объ­
екта.
'
- ;\ ’
"■
• Ш ирина2, Высота2. Задают размеры «прямоугольника» на
рисунке-источнике, который будет выделен и помещен на
рабочую поверхность объекта.
• КодО перации . Параметр предназначен для совместного
использования с точечными рисунками. Он задает побито­
вую операцию, которая будет выполняться над точечным ри­
сунком при его загрузке. Набор констант, которые можно
использовать в качестве кодов операций, описан в справоч­
ной системе Visual Basic.
Примечание
Несколько раз упоминалась уже функция LoadPicture, предна­
значенная для загрузки точечного рисунка из графического файла
(функция поддерживает форматы BMP, ICO, RLE, WMF, GIF и JPG).
Синтаксис функции:
Г
*
LoadPictur е([И м яФ айла])
• ИмяФайла. Полное имя файла, содержащего рисунок.
Параметр может быть опущен и тогда функция загрузит
«пустой» рисунок, т. е. удалит рисунок, загруженный ранее.
7.2. Управляющий элемент Image
Графический образ Image также может содержать точечный ри­
сунок. Он потребляет гораздо меньше ресурсов, чем элемент
PictureBox, и поэтому всегда следует отдавать ему предпочте­
ние, если задача сводится лишь к отображению рисунка на эк­
ране. Кроме того, он располагает свойством S tretch, благодаря
которому (Stretch = True) можно задать режим растягивания ри­
сунка, который при этом будет автоматически масштабировать­
ся к границам элемента Image на форме. Для загрузки рисунка
используется
свойство
P icture
и
функция
LoadPicture
(см. 7.1.3).
"г г-
363
Шрифты
7.3. Шрифты
Visual Basic позволяет использовать все «шрифтовые» возмож^
ности Windows. Каждый управляющий элемент, предполагающий
надпись или текст, обладает свойством Font, позволяющим вы­
брать шрифт, его размер, атрибуты и признаки начертания. В таб­
лице 7.1 перечислены свойства шрифтов и методы, предназна­
ченные для манипуляций с шрифтами. К свойствам объекта Font
(который сам является свойством других объектов) можно обра­
щаться двумя способами:
Fo m l .Font Name « "Arial"
или
Forml.Font.Name = "Arial"
Это касается свойств Name, Size, Bold, Italic, StrikeThru, Under­
line и W eight, принадлежащих объекту Font. Оба варианта рав­
нозначны. Свойство W eight определяет толщину линий, которы­
ми изображаются литеры шрифта. При выборе признаков начер­
тания «нормальный», «полужирный», «жирный» значение W eight
устанавливается автоматически (например, для начертания «жир­
ный» Weiaht — 700), но его можно задать и явным образом.
Таблица 7.1. Свойства и методы шрифтов
Свойство
FontBold
Fontltalic
Описание
Устанавливает (True) признак начертания
«жирный».__________________________ _
Устанавливает (True) признак начертания
«курсив».____________
FontName
Содержит имя шрифта.
FontSize
В этом свойстве выбирается размер
шрифта в пунктах.__________
FontStrikeThru
Устанавливает (True) атрибут
«перечеркнутый»._______ •
FontTransparent
Разрешает (True) или запрещает (False)
режим прозрачного фона для символов
шрифта.
Ш рифты
364
1 Свойство
Описание
1
I FontUnderline
Устанавливает (True) атрибут
«подчеркнутый».
I Методы
Описание
1 TextHeight
Возвращает высоту заданной текстовой
строки в текущих единицах с учетом
значений всех свойств текущего шрифта.
I TextWidth
Возвращает ширину заданной текстовой ^ I
строки в текущих единицах с учетом
значений всех свойств текущего шрифта.
|
1
1
Примечание
В Visual Basic располагает общим диалогом, позволяющим вы­
брать значения атрибутов шрифта (см. 5.3.4).
В В период выполнения программы текст на рабочую поверх­
ность формы или картинки PictureBox можно выводить с по­
мощью метода Print. При этом будут использованы текущие
значения свойств F ont... — особое внимание следует обра­
тить на значение свойства FontTransparent, от которого за­
висит вид текста, выводимого поверх рисунка или графики.
■ Цвет выводимых символов определяется значением свойства
ForeColor того объекта, на поверхность которого производит­
ся вывод текста.
Пример
В Чтобы повторить пример программы, следует.вначале вклю­
чить в состав коллекции инструментов несколько дополни­
тельных управляющих элементов (выберите для этого пункт
M icro so ft W indows Common C ontrols-2 5 .0 на вкладке Con­
tro ls диалога Com ponents).
В Программа дает возможность выбирать шрифт и его размер,
при этом выбранный шрифт будет отображаться с различными
атрибутами и признаками начертания.
Шрифты
365
С этой целью в контейнер Picture- НППЖі!ты
Вох помещены пять этикеток с
надписью «Абракадабра», которая
Абракадабра
отображается с разными вариан­
тами значений свойств.
Абракадабра
Абракадабра „
Две процедуры в этой программе
заслуживают внимания. Процеду­
Абракадабра
ра Form_Load использована здесь
а
к
г
в
г
і
к
г
а
іЗ
для инициализации списка экран­
ных шрифтов. С помощью цикла
For методу Addltem комбинированного поля cboFontName
передаются имена экранных шрифтов, установленных в систе­
ме. Это достигается с помощью свойств Fonts и FontCount
объекта Screen. Первое из них возвращает имя шрифта с ука­
занным номером, второе содержит общее число экранных
шрифтов.
Вторая процедура — Updatelabels. Ее задача заключается в
обновлении этикеток в соответствии с выбранным шрифтом
или размером. С этой целью для каждой этикетки выполняется
ряд присваиваний.
■
Таблица 7.2. Управляющие элементы и их свойства
в примере программы
Form
Свойство
Значение
Name
frmMain
BorderStyle
1-FixedSingle
Caption
MaxButton
MinButton
Text Вox
UpDown
Name
txtSize
Locked
True
Name
spnSize
Value
Ш риф ты
366
Объект
Свойство
Значение
|
BuddyControl
txtSize
I
3
1
Max
0
Min
6
SyncBuddy
True
1
BuddyProperty
Text
I
Name
cboFontName
|
Style
2-DropdownList
I
1 PictureBox
Name
picPicture
1
1 Label
Name
IblStrike
I
AutoSize
True
I
Caption
Абракадабра
|
Name
IblUnder
I
AutoSize
True
1
Caption
Абракадабра
|
Name
Iblltalic
I
AutoSize
True
1
Caption
Абракадабра
|
Name
IblBold
AutoSize
True
I
Caption
Абракадабра
|
Name
IblNorm
1
AutoSize
True
I
Caption
Абракадабра
|
1 ComboBox
1 Label
I Label
Label
Label
шрифты
I I IfM J/fkT L . ■
Исходный текст
Option Explicit
Sub UpdateLabels()
Dim strFontName As String
Dim iSize As Integer
strFontName = cboFontName.List(cboFon
N a m e .Listlndex)
iSize = spnSize.Value
With lblNorm
.FontName = strFontName
.FontBold = False
.Fontltalic = False
.FontUnderline — False
.FontStrikethru = False
.FontSize = iSize
End With
With lblBold
.FontName = strFontName
.FontBold = True
.Fontltalic = False
.FontUnderline = False
.FontStrikethru = False
.FontSize = iSize
End With
With lblltalic
.FontName — strFontName
.FontBold = False
.Fontltalic = True
.FontUnderline = False
.FontStrikethru = False
.FontSize = iSize
End With
367
Ш рифты
368
With lblUnder
.FontName = strFontName
.FontBold =* False
.Fontltalic = False
.FontUnderline = True
.FontStrikethru = False
.FontSize = iSize
End With
With lblStrike
.FontName = strFontName
.FontBold = False
.Fontltalic = False
.FontUnderline = False
.FontStrikethru = True
.FontSize = iSize
End With
End Sub
Private Sub cboFontName_Click()
UpdateLabels
End Sub
Private Sub Form_Load()
Dim iNumFonts As Integer
Dim i As Integer
iNumFonts = Screen.FontCount - 1
For i = 0 To iNumFonts
cboFontName.Addltem Scr ee n .Fonts(i)
Next i
cboFontName.Listlndex — 0
txtSize.Text = spnSize.Value
End Sub
Private Sub spnSize__Change ()
UpdateLabels
End Sub
*
Цвет
________ __________________________
7.4. Цвет
Цвет видимых объектов играет важную роль как в повседневной
жизни, так и в графической среде Windows. Цветовые возможности
конкретного компьютера зависят от видеоадаптера и от выбранно­
го в Windows видеорежима. Возможны режимы с 16,64, 256, 65536
и 16,7 миллионами цветов. Наиболее часто используют 256-цветный режим. При этом каждый цвет получают как сумму нескольких
основных цветов в разных соотношениях. Видеосистемы IBM PC
(как и цветное телевидение) основываются на трехкомпонентной
модели цвета, которую называют также RGB-моделью. Она позво­
ляет получить большинство существующих в природе цветовых
тонов сложением чистых красного, синего и зеленого цветовых
тонов в разных соотношениях яркости. При одинаковой яркости
всех трех компонентов получается черно-белая гамма в диапазоне
от черного до белого максимальной яркости. Количество градаций
яркости компонентов и соответственно количество результирую­
щих тонов зависят от видеорежима, а точнее,—от количества битов
памяти, отводимого под хранение информации о каждой точке рас­
тра. В «16-миллионном» режиме адаптер SVGA отводит под значе­
ние каждого из RGB-компонентов один байт, т. е. 8 бит, позволя­
ющих запомнить одну из 256 градаций. Три компонента занимают
24-бита и поэтому такой цвет называют иногда «24-битовым». Это
и позволяет получить для каждой точки растра 16,7 миллионов цве­
товых тонов. Биты 23-16 содержат значение красного компонента,
биты 15-8 — зеленого и биты 7-0 — синего. Остальные биты (31 -24)
32-битового слова не используются.
Таблица 7.3. Определение цвета в RGB-м одели
Красный
компонент
Черный
Синии
Зеленый
Зеленый
компонент
Синии
компонент
!Z fL
________________
Красный
компонент
Цвет
Зеленый
компонент
Синии
компонент
Красный
Мажента
Желтый
Белый
Примечание
Каждый цветовой тон можно представить себе как точку в
трехмерном пространстве. Начало такого пространства-куба
будет лежать в координатах (О, 0, 0), противоположный угол
куба будет иметь координаты (255, 255, 255).
Значения компонентов удобней выражать в шестнадцатерич­
ной системе счисления. В этом случае каждые четыре бита
представлены одним символом и всегда можно выделить байт
одного из цветов в «общем» числе, выражающем цвет. Напри­
мер, цвет (26, 0, 255): 26 = 1А, 0 = 00, 255 — FF, в итоге пред­
ставляется кодом &H1A00FF.
7.4.1. Применение цвета
Обзор
■
На этапе визуального программирования цвет для элемента
можно выбрать с помощью комбинированного поля в окне
свойств.
В
В период выполнения программы можно присвоить значение
свойству, отвечающему за тот или иной цвет (например, цвет
фона). Для этого существует несколько возможностей.
Цвет можно задать функцией Q BC olor — это наиболее про­
стой способ, хотя и ограниченный по своим возможностям. В
качестве параметра этой функции должно выступать число в
диапазоне от 0 до 15, этим и ограничен выбор цветов.
В
371
Цвет
Таблица 7.4. Набор цветов, возвращаемых функцией QBColor
Число
Цвет
Число
Цвет_____________
I
0
Черный
8
Серый______
I
1
Синий
~9
Голубой______
I
2
Зеленый
J0
3
Циан
11
4
Красный
12
5_
Мажента
6^
Желтый
____________________________________
______________________________________
___________________________________
___________________________________
___________________________________
7
■
Белый
_______________________________________
Светло-зеленый______
I Светлый циан
I Светло-красный
_13__________ Светлая мажента
Светло-желтый
14
15
Ярко-белый
Более широкие возможности определения цвета предостав­
ляет функция RGB. Она позволяет задать в явном виде зна­
чения всех трех компонентов. Синтаксис функции RGB.
RGB(КрасныйКомпонент, ЗеленыйКомпонент,
СинийКомпонент)
• КрасныйКомпонент, ЗеленыйКомпонент, СинийКомпо­
нент. Эти параметры представляют собой числа от 0 до 255,
определяющие удельный вес каждого из компонентов в реэультирующем цвете.
■ Иногда может потребоваться выделить значение одного из
компонентов в значении типа Long, представляющем некото­
рый цвет. Для этого следует сначала выделить разряды, от­
носящиеся к интересующему вас компоненту с помощью
маски, наложенной на значение типа Long. Затем остается
сдвинуть биты на позиции 0-7. В языке Visual Basic не пред­
усмотрена операция побитового сдвига, но ее можно реали­
зовать, используя операции деления. Сдвиг двоичных разря­
дов на одну позицию вправо соответствует делению числа на
2 Таким образом, чтобы передвинуть «красные» биты на по­
зиции 7-0, необходимо 16 раз разделить число типа Long на
2 или, что то же самое, разделить его на &Н10000. Ниже при­
веден код функции, иллюстрирующей этот алгоритм (она воз­
вращает значение одного из компонентов, номер компонента
при этом указывается в параметрах).
Const
Const
Const
Const
Const
Const
Red As Integer = О
Green As Integer = 1
Blue As Integer = 2
RedMask As Long = &HFF0000
GreenMask As Long = &HFF00
BlueMask As Long = &HFF
Private Function ExtractColor(Color As Long, ByVal*
n.
.
1
RGB As Long) As Long"*
Dim iColor As Integer
Select Case RGB
Case Red
iColor = (Color And RedMask) / &H10000
Case Green
iColor j§ (Color And GreenMask) / &H100
Case Blue
iColor = Color And BlueMask
End Select
fep *
ExtractColor = iColor
End Function
Таблица 7.5. Свойства, определяющие цвет
Примечание
■
■
В состав пакета Visual Basic включен дополнительный управ­
ляющий элемент CommonDialog (Общий диалог). Одна из его
функций — открытие диалога Цвет, позволяющего выбрать
цвет из палитры (см. 6.1.4). Этот элемент будет использован в
одном из примеров данной главы (см. 7.5).
Если в конфигурации Windows выбран режим «256 цветов», то
управлять цветами можно также посредством палитр. Доступ к
палитрам обеспечивают свойства Palette и PaletteM ode.
Среди примеров программ, поставляемых с пакетом Visual
Basic, есть проект, иллюстрирующий технику работы с палит­
рами (SAMPLES\PGUIDE\PALMODE).
Пример
■ В данном примере будет продемонстрировано применение
функций QBColor и RGB.
■ По выбору пользователя программа рисует 50 разноцветных
полос — это могут быть полосы базовых цветов, задаваемых
функцией QBColor или случайные наборы цветов, а также
черно-белая полутоновая гамма — в двух последних вариантах
используется функция RGB.
■ На двух процедурах стоит остановиться. Первая из них — RunShow, которая с помощью цикла For выводит на поверхность
формы 50 полос, цвет каждой из которых определяется вы­
бранным способом. Каждая из полос представляет собой эле­
мент массива элементов типа Shape. Его координаты вычисля­
ются по его номеру, а для определения его цвета используется
функция GetColor.
■ Функция GetColor возвращает цвет, выбранный одним из трех
способов. В зависимости от значения параметра Kind сраба­
тывает одна из ветвей конструкции Select Case. В случае базо­
вого набора цветов (кнопка Стандартные) номер фигуры в
массиве делится по модулю на 16, полученное в результате
значение от 0 до 15 передается функции QBColor, которая и
возвращает один из стандартных цветов. Для получения слу­
чайного цвета, так же, как и черно-белых полутонов, использо­
вана функция RGB. В первом случае ее параметры—случайные
числа от 0 до 255, а во втором — равные друг другу а
зависящие от номера элемента shpShape в массиве.
Таблица 7.6. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Цвета
Name
cmdRun
Caption
Черно-белый
CommandButton
Index
CommandButton
Name
cmdRun
Caption
Случайные
Index
CommandButton
Name
cmdRun
Caption
Стандартные
Index
Shape
Name
shpShape
Цвет
Исходный текст
Option Explicit
Const STRIPNUM As Integer = 50
Dim iStripeWidth As Integer
Dim iColorlncrement As Integer
Function GetColor(Kind As Integer, Index As
Integer) As Long
Select Case Kind
Case 0
GetColor = QBColor(Index Mod 16)
Case 1
Dim R As Integer
Dim G As Integer
Dim В As Integer
Randomi ze
R = 255 * Rnd
G = 255 * Rnd
В - 255 * Rnd
GetColor = RGB(R, G, B)
Case 2
Dim iGray As Integer
iGray = iColorlncrement * Index
GetColor Я RGB(iGray, iGray, iGray)
End Select
End Function
Sub RunShow(ColorKind As Integer)
376
Цвет
Dim i As Integer
Dim iXPos As Integer
ixPos = -iStripeWidth f 240
For i - 0 To STRIPNUM - 1
iXPos = iXPos + iStripWidth
With shpShape(i)
.Left = iXPos
.Top = 100
.Width = iStripWidth
.FillColor = GetColor(ColorKind,
.BorderColor = .FillColor
.Visible = True
End With
*
i)
Next i
End Sub
Private Sub cmdRun_Click(Index As Integer)
RunShow(Index)
End Sub
Private Sub Form_Load()
Dim i As Integer
For i = 1 To STRIPNUM
Load shpShape(i )
Next i
iStripeWidth jj (Me.ScaleWidth - 480) / STRIPNUM
iColorlncrement = 255 / STRIPNUM
R u n S h o w (1)
End Sub
Управляющие элементы Shape и Line
377
7.5. Управляющие элементы Shape и Line
Оба эти элемента предназначены для построения геометричес­
ких фигур на рабочей поверхности формы. Элемент Shape (Ф и­
гура) способен превращаться в одну из шести геометрических
фигур (окружность, прямоугольник, овал, квадрат и др.). Элемент
Line (Линия) представляет собой просто отрезок прямой. Вместе
они позволяют на этапе визуального программирования постро­
ить на форме достаточно сложные геометрические конструкции.
Их свойства дают возможность управлять различными парамет­
рами фигур и линий (см. 5.1). Сюда относятся толщина и стиль
линий, цвет, форма, стиль заполнения и др. Чтобы воспользовать­
ся одним из графических управляющих элементов, достаточно
просто поместить его на форму или в один из элементов-контейнеров. Следующий пример проиллюстрирует некоторые возмож­
ности фигуры Shape.
Пример
■
Чтобы повторить пример программы, следует вначале вклю­
чить в состав коллекции инструментов дополнительный управ­
ляющий элемент CommonDialog (выберите для этого пункт
M icrosoft Windows Common Dialog Control 5.0 на вкладке
C ontrols диалога Components).
■ С помощью различных управляющих элементов формы поль­
зователь может управлять свойствами фигуры shpShape. Ре­
зультат всех манипуляций немедленно отражается на изобра­
жении фигуры на экране.
В В коде программы следует обратить внимание на процедуру
ShapeShow, которая перерисовывает фигуру в соответствии
со всеми значениями свойств, выбранных пользователем. В
ней используется цвет, выбранный с помощью диалога Цвет,
анализируется состояние переключателей Толщина линии и
Размер, а также учитывается вид фигуры и стиль заполнения,
выбранные в комбинированных полях cboFill и cboForm.
Когда все свойства установлены, следует вызов процедуры
ShapeCenter.
378
■
■
Управляющ ие элементы Shape и Line
Процедура ShapeCenter вычисляет такую поэицию фигуры
shpShape, чтобы при изменившихся размерах она вновь оказалась в центре картинки-контейнера picRun.
По щелчку на кнопке Д ругой цвет выполняется процедура
cmdColor_Click, при этом будет вызван диалог Цвет (метод
ShowColor общего диалога cdlColorSel). Предварительно в
свойство Rags общего диалога загружается константа
cdlCCPreventFullOpen, благодаря чему кнопка Определить
цвет в окне диалога будет отключена.
Фигуры
УМ
Вид эололненияІІРөшетка
II
ж
'
ваш
'
Ц- Г Большой р
^ • ’Средний-'
С
Маленький
»* . .
*
. ^ * С . .*
'''' f ‘ ~
^ Г> Г
.^ 3 Г
‘ I* “
» - ^
~ '
'
щ -Толщ ина линии
1ШірЕ$ Толстая
Щ щ О Средняя
w±OToHRafl-.|
жк
»*
Таблица 7.7. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Фигуры
PictureBox
Name
picRun
Shape
Name
shpShape
BorderWidth
5
Name
cdlColorSel
I CommonDialog
Управляющ ие элементы Shape и Line___________________________379
CommandButton
ComboBox
Свойство
Значение
Name
cmdColor
Caption
Другой цвет
Name
2-DropDownList
ComboBox
Name
cboForm
2-DropDownList
Frame
OptionButton
OptionButton
OptionButton
Name
fraLineWidth
Caption
Толщина линии
Name
optLinl
Caption
Толстая
Name
optLin2
Caption
Средняя
Name
optLin3
Caption
Тонкая
Value
Frame
OptionButton
OptionButton
OptionButton
Name
fraSize
Caption
Размер
Name
optSizI
Caption
Большой
Name
optSiz2
Caption
Средний
Name
optSiz3
Caption
Маленький
380
___________
Управляющ ие элементы Shape и Line
Исходный текст
Option Explicit
Dim ilnitHeight As Integer
Dim ilnitWidth As Integer
Dim ilnitStark As Integer
Dim binit As Boolean
Sub ShapeCenter()
shpShape.Left = (picRun.Width - _
shpShape.Width) / 2
shpShape.Top = (picRun.Height - _
shpShape.Height) / 2
End Sub
Sub ShapeShow()
Dim dFactor As Double
Dim iFactorLine As Integer
If binit Then Exit Sub
If cdlColorSel.Color <> 0 Then
shpShape.FillColor = cdlColorSel.Color
End If
Управляющие элементы Shape и Line
If optSiz3 Then dFactor = 0.25
If optSiz2 Then dFactor = 0 . 5
If optSizl Then dFactor = 1
shpShape.Width = ilnitWidth * dFactor
shpShape.Height = ilnitHeight * dFactor
if optLinl Then iFactorLine = 1
if optLin2 Then iFactorLine = 5
if optLin3 Then iFactorLine = 25
shpShape.BorderWidth = ilnitStark * __
iFactorLine
shpShape.FillStyle = cboFill.Listlndex
shpShape.Shape = cboForm.Listlndex
ShapeCenter
End Sub
Private Sub cboForm_Click()
ShapeShow
End Sub
Private Sub cboFill— C l i c k ()
ShapeShow
End Sub
Private Sub cmdColor_Click()
cdlColorSel.Flags = cdlCCPreventFullOpen
cdlColorSel.ShowColor
ShapeShow
End Sub
Private Sub Form L o a d O
381
382_____ __ _________________ Управляющ ие элементы Shape и Line
ilnitHeight = 2412
ilnitWidth = 4092
ilnitStark Ш 1
binit = True
With cboForm
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
"Прямоугольник”
"Квадрат"
"Овал"
"Окружность"
"Скругл.прямоугольник"
"Скругл.квадрат"
.Listlndex = 0
End With
.5
With cboFill
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
.Addltem
"Сплошное"
"Прозрачное"
"Горизонтальные линии"
"Вертикальные линии"
"Нисходящая диагональ"
"Восходящая диагональ"
"Решетка"
"Диагональная решетка"
.Listlndex = 1
End With
binit - False
ShapeShow
optLin2.Value = True
optSiz2.Value = True
End Sub
Private Sub optSizl C l i c k ()
Анимация
______________ 383
ShapeShow
End Sub
\
Private Sub optSiz2_Click()
ShapeShow
End Sub
Private Sub optSiz3_Click()
ShapeShow
End Sub
Private Sub optLinl_Click()
ShapeShow
End Sub
Private Sub optLin2__Click ()
ShapeShow
End Sub
Private Sub optLin3_Click()
ShapeShow
End Sub
7.6. Анимация
Этот раздел мы посвятим технике анимации, точнее, тем ее раз­
новидностям, которые можно реализовать исключительно с по­
мощью средств языка программирования (к таким возможностям,
как воспроизведение AVI-файлов, мы обратимся позднее). Во
многих ситуациях оказывается весьма уместной «малая» анима­
ция, позволяющая сделать более наглядным для пользователя
ход некоторого процесса или изменение некоторого состояния.
А ним ация
384
7.6.1. Основы анимации
Принцип анимации был известен еще до изобретения кинемато­
графа и с тех пор не изменился. Чтобы привести картинку в дви­
жение (анимировать, т. е. «оживить» ее), необходимо достаточно
быстро продемонстрировать последовательность картинок, изо­
бражающих фазы движения. Обычные средства Visual Basic
предоставляют для этого широкие возможности. Можно переме­
щать по экрану текст или графику, анимировать точечные рисунки
путем последовательной смены фаз, можно анимировать команд­
ную кнопку. Общий принцип не меняется — он заключается в tqm ,
что либо изменение некоторых параметров объекта (например,
его координат на форме), либо последовательная смена его со­
держимого (точечного рисунка на поверхности кнопки или в эле­
менте Image) производится по событиям таймера. И собственно
анимацию, таким образом, всегда выполняет процедура обработ­
ки события Tim er. Поэтому, прежде чем перейти к примерам, ил­
люстрирующим различные способы анимации в Visual Basic-npoграммах, следует сказать несколько слов об управляющем эле­
менте Timer.
Существуют две возможности управлять таймером. Первая за- ключается в присваивании значений его свойству Enabled — значение True включает таймер, значение False выключает. Другой
способ состоит в использовании свойства Interval, которое должно содержать значение интервала между событиями Tim er в мил­
лисекундах. Если присвоить этому свойству значение 0, то таймер
остановится.
F |Ш 1 1 Щ п н А В 1
I
I
I
Пример 1. Часы
V
Этот небольшой пример призван показать приемы работы с
таймером, которые потребуются в дальнейших примерах.
■
Единственная процедура этой программы является обработ­
чиком события таймера. Все, что она делает — отображает
системное время в надписи на этикетке.
385
Анимация
Таблица 7.8. Управляющие элементы и их свойства
в примере программы
1 объект
Form
Label
Свойство
Значение
Name
frmMain
Caption
Часы
Name
Caption
Label
Текущее системное
время
Name
Alignment
2-Center
BorderStyle
1-FixedSingle
Font
Courier New
24 пункта
жирныи
Timer
ForeColor
СИНИИ
Name
tmrTimer
Interval
13 Заказ 3337
Аним ация
386
Исходный текст
Option Explicit
Sub tmrTimer_Tiraer ()
IblTime.Caption = Str(Time)
End Sub
Пример 2. Текст
■ Чтобы реализовать этот пример, необходимо включить в со­
став коллекции инструментов несколько дополнительных уп­
равляющих элементов (выберите для этого пункт Microstore
W indows Common C ontrols 5 .0 на вкладке C ontrols диалога
Components).
■ Программа демонстрирует способ анимации, заключающийся
в перемещении управляющего элемента с помощью метода
Move (большинство элементов им обладают).
■ В данном случае перемещаться будет этикетка с надписью
«Привет». Программа позволяет управлять частотой КЗДа 1Т*
е. частотой событий таймера) с помощью ползунка Slider, а
также выбирать один из двух режимов цвета этикетки.
■ Процедура обработки события Tim er вначале перемещает эти­
кетку посредством процедуры MoveText, затем, в зависимости
от состояния флага bRndColor, меняет цвет этикетки либо на
черный, либо на случайный цвет, возвращаемый функцией
GetRndColor.
Ш Процедура MoveText вычисляет новое положение этикетки,
суммируя текущие координаты с их приращением, задавае­
мым переменными iDX и iDY. Если новая координата выходит
за пределы картинки-контейнера picP icture, то знак прираще­
ния меняется на противоположный. Таким образом этикетка
будет подобно мячику «отскакивать» от «стенок» и все время ос­
таваться в границах элемента PictureBox.
■ Процедура sldFramerate_Change выполняется при изменении в
положении ползунка. При этом изменяется значение свойства
Interval таймера и соответственно «частота кадров» анимации.
Одновременно коррекции подвергается надпись на этикетке
IblFram erate.
Анимация
Частота
30 кадров в
секунду
Таблица 7.9. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Анимация текста
Name
fraFramerate
Caption
Частота кадров
Name
sldFramerate
Frame
Slider
SelStart
Label
Name
IblFramerate
Timer
Name
tmrTimer
Interval
Frame
Name
fraColorKind
Caption
OptionButton
Name
optRand
Анимация
388
Объект
OptionButton
PictureBox
Свойство
Значение
Caption
Случайный
Name
opt Black
Caption
Черный
Value
True
Name
picPicture
Name
IblText
Caption
Привет
Courier New
17 пункта
жирный
Исходный текст
Option Explicit
Dim
Dim
Dim
Dim
Dim
bRndColor As Boolean
iXPos As Integer
iYPos As Integer
iDX As Integer
iDY As Integer
■
Function GetRndColor() As Long
Dim R As Integer
Dim G As Integer
Dim В As Integer
Randomize
R = 255 * Rnd
Анимация
389
G = 255 * Rnd
В - 255 4 Rnd
GetRndColor = RGB(R, G, B)
End Function
Sub MoveText()
iXPos = iXPos + iDX
iYPos = iYPos + iDY
If iXPos <= 0 Then
iXPos = 0
iDX = iDX * -1
Elself iXPos >= (picPicture.ScaleWidth - _
lblText.Width) Then
iXPos = picPicture.ScaleWidth - lblText.Width
iDX = iDX * -1
End If
If iYPos <= 0 Then
iYPos I 0
iDY = iDY I -1
Elself iYPos >= (picPicture.ScaleHeight - _
lblText.Height) Then _
iYPos = picPicture.ScaleHeight - lblText.Height
iDY - iDY * -1
lblText.Move iXPos, iYPos
End If
End Sub
Private Sub Form__Load ()
sldFramerate.SelStart Ә 20
tmrTimer.Interval | 1000 / sldFramerate.SelStart
1 Ы Framerate.Caption = Str(sldFramerate.SelStart^ _
&
кадров в секунду
91
iDX = 15
iDY * 15
End Sub
Private Sub optBlack__Click()
bRndColor = False
End Sub
Private Sub optRand__Click ()
bRndColor = True
End Sub
Private Sub sldFramerate_Change()
tmrTimer.Interval = 1000 / sldFramerate.SelStart
lblFramerate.Caption | Str(sldFramerate.SelStart) |
& " кадров в секунду
End Sub
Private Sub t m r T ime r _ T ime r ()
MoveText
If b R n d C o l o r Then
l b l T e x t .ForeColor = G e t R n d C o l o r
Else
l b l T e x t . F o r e C o l o r = R G B ( 0 f 0, 0)
End If
E n d Sub
391
Анимация
Пример 3. Точечный рисунок
■
■
Пример иллюстрирует технику анимации точечных рисунков.
По щелчку на кнопке Поехали программа анимирует симво­
лическое изображение луны, точнее, смену ее фаз. Необхо­
димые для этого графические файлы можно найти в подката­
логе GRAFICS каталога VB. Обратите внимание на то, что ани­
мация в примере не является непрерывной — по каждому
щелчку на командной кнопке выполняется один цикл смены
«фаз луны».
■ В процедуре Form_Load загружается набор точечных рисун­
ков, для их хранения использован массив графических обра­
зов Image. На этапе визуального программирования на форму
помещен лишь один элемент этого типа, но поскольку его
свойству Index присвоено значение 0, при дальнейшей за­
грузке в цикле For очередные элементы массива будут созда­
ваться автоматически.
■ Процедура tmrTimer_Timer выполняет собственно анимацию.
Делается это с помощью свойства V isible элементов массива
im gM oon(). При каждом очередном событии таймера
предыдущая фаза делается невидимой, а очередная — види­
мой. Так продолжается, пока значение счетчика фаз (пере­
менная iFram eNum ) не достигнет 7 — сделав видимой пос­
леднюю фазу, таймер выключает сам себя.
ъ Анимация точечного рисунка
По еже пи
Аним ация
Таблица 7.10. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
Caption
Анимация точечного
рисунка
BackColor
белый
Name
tmrTimer
Timer
Enabled
Interval
CommandButton
Image
Name
cmdStart
Caption
Поехали
Name
imgMoon
Picture
Значок
Stretch
Исходный текст
Option Explicit
Dim iFrameNum As Integer
Private Sub cmdStart_C l i c k ()
iFrameNum — 0
tmrTimer.Enabled = True
End Sub
Private Sub Form_Load()
Анимация
393
For iFrameNum = 1 To 7
Load imgMoon(iFrameNum)
imgMoon(iFrameNum).Picture = LoadPicture
(App.Path & "\" & "MoonO” & Trim _
(Str(iFrameNum + 1)) & ".ico")
Next iFrameNum
iFrameNum = 1
End Sub
Private Sub tmrTimer_Timer()
imgMoon(iFrameNum).Visible = False
imgMoon(iFrameNum + 1 ) .Visible - True
iFrameNum = iFrameNum + 1
If iFrameNum = 7 Then tmrTimer.Enabled = False
End Sub
Пример 4. Анимация кнопки
Ц
■
■
А вот почти шуточный пример «малой анимации» — здесь ани­
мируется изображение на поверхности командной кнопки.
Анимация заключается в последовательной, с интервалом в
пол-секунды, смене трех точечных рисунков на поверхности
кнопки. Это могут быть, в принципе, любые рисунки (напри­
мер, изображение трех цветов светофора), число и скорость
смены фаз также может быть любой — принцип от этого не
меняется. Щелчком на командной кнопке анимация приоста­
навливается или возобновляется.
Принцип анимации кнопки прост: каждая из фаз рисунка пред­
варительно загружается в один из элементов типа P ictureB ox
(в данном случае использован массив picLam p из трех эле­
ментов). Затем в процедуре обработки событий таймера одна
из фаз передается в свойство P icture командной кнопки (при
этом ее свойство Style должно иметь значение 1 -G raphical).
Перебор номеров трех фаз в переменной S tate достигается
инкрементом и делением по модулю 3.
Таблица 7.11. Управляющие элементы и их свойства
в примере программы
Form
Свойство
Значение
Name
frm Main________
BorderStyle
1-FixedSingle
Caption
Анимация кнопки
Icon______
Значок
MaxButton
MinButton
Timer
Name
tmrTimer
Enabled
Interval
PictureBox
Name
picLamp
Picture
Значок
False
PictureBox
Name
picLamp
Picture
Значок
395
Анимация
1 Объект
PictureBox
CommandButton
Свойство
Значение
|
Name
picLamp
j
Index
0
Picture
Значок
Visible
False
I
Name
cmdAnimButton
]
Caption
(пустая строка)
|
Style
1-Graphical
I
Исходный текст
Option Explicit
Private Sub cmdAnimButton_Click()
tmrTimer.Enabled = Not tmrTimer.Enabled
End Sub
Private Sub Form__Load ()
tmrTimer.Enabled = True
End Sub
Private Sub tmrTimer_Timer()
Static State As Integer
cmdAnimButton.Picture = p i c L am p (State)
State = (State + 1) Mod 3
End Sub
7.6.2. Другие возможности
Ш Вместо массива элементов P ictureB ox или Im age для хране­
ния рисунков фаз можно использовать управляющий элемент
Im ageList, который позволяет объединить все рисунки в один
каждому
------И р Й
массив И UUpdLUClIDO Tl o e . v m _____ я л |
u o n f iv n имени. Чтобы воспользоваться элементом ^ а9е ^ . •
димо выбрать пункт M icro so ft W indows Common C ontrols
5.0 на вкладке C ontrols диалога Com ponents.
Другой способ организовать удобное хранение ^ і ю г о количества рисунков состоит в использоазнии э л е м е н ^ Р
tureC lip. В этом случае все рисунки должны быть объединены
u
____ ___ _u n - r / M M _ i u і л o a r n v / W
3 P T P .fl В Э Л е загружается
В ОДИН и и л ь ш и и « о у і
» -------- ... 1Л Х - - Г
мент PictureC lip. Затем можно вырезать произвольные Фраг­
мента «суперрисунка» и использовать их по назначению
Чтобы воспользоваться элементом P ictureC lip, необходимо
выбрать пункт M icro so ft P ictureC lip C ontrol на вкладке Contro ls диалога Components.
■ И еще несколько слов об анимации управляюіцих элементов
вообще. Вы уже убедились в том, как просто реализовать ани­
мацию командной кнопки с помощью т о ч е ч н ^ рисунков. Теооетически для анимации видимого элемента можно исполь
S b любые свойства или методы, влияющие тем или иным
Й Х з о м на вид элемента на форме. Пара строк простейшего
кода в процедуре таймера (вызов метода или изменение значёш я свойстаа) и анимация готова. Можно перемещать. элеме™. менять его цвет, толщину линий, стиль заполнения и
т.д. — список возможностей ограничивается только вооора
жением программиста.
7.7. Файлы мультимедиа
Наоядү с обсуждавшимися возможностями чисто программной
а н Е іи и S
роль в технологии мультимедиа играет ис-
польаование р е с ^ с о е . И одним из наиболее широко распространенных видов ресурсов являются
й
Ляйлы содержащие звуковую и видеоинформацию. Данны
S e e п“ ёящ Тн возможностям Visual Вазіс в плане воспроиз­
ведения AVI-файлов, а также использования других видов ресурсов.
файлы мультимедиа
397
7.7.1. Возможности Visual Basic
Обзор
■
Наиболее простой способ доступа к ресурсам состоит в при­
менении предназначенных для этого управляющих элементов.
На рынке программного обеспечения доступны многие такие
элементы. Два из них поставляются в составе пакета Visual
Basic — к ним мы еще вернемся.
Ж Звуковые WAV-файлы можно воспроизводить с помощью APIфункций Windows. Возможности API-функций, конечно, огра­
ничены, но эти функции просты в обращении. Им будет по­
священ один из примеров.
■ Еще один путь к реализации мультимедиа лежит через доступ
к интерфейсу MCI с помощью API-функций. Это дает возмож­
ность управлять мультимедийными устройствами посредст­
вом МСІ-команд. Управляющий элемент MCI, собственно, не
делает ничего иного, кроме обращения к АРІ-функциям.
Ш Наконец, можно обращаться к API-функциям напрямую и бла­
годаря этому управлять мультимедийными устройствам с наи­
большей свободой и гибкостью. Однако этот путь является
одновременно и наиболее сложным в реализации.
7.7.2. Управляющий элемент MCI
Как уже упоминалось, МСІ-элемент инкапсулирует в себе меха­
низмы обращения к API-функциям, отвечающим за взаимодейст­
вие с мультимедийными устройствами. MCI (Media Control Inter­
face— «интерфейс управления средой») представляет собой про­
граммный интерфейс, позволяющий приложениям общаться с
мультимедийными устройствами посредством набора команд.
Собственно, МСІ-элемент лишь предоставляет удобный способ
передавать эти команды соответствующим API-функциям. МСІэлемент не «привязан» к какому-либо конкретному устройству, он
может открыть одно из мультимедийных устройств разных типов
и взаимодействовать с ним. MCI-элемент может работать со зву­
ковыми адаптерами, MIDI-секвенсорами, CD ROM-приводами и
Ф айлы мультимедиа
звуковыми CD-проигрывателями, а также с различными видео­
устройствами. Он способен воспроизводить на экране видеофай­
лы Windows (AVI-файлы). Конечно. МС1*элемент может открыть
только установленное в системе устройство, снабженное необходимыми драйверами.
MCI-элемент очень прост в обращении. Помещенный на форму,
он представляет собой панель с кнопками, подобными по виду и
назначению кнопкам управления бытовой аудио- и видеоаппара­
турой — классический вид для подобного рода элементов. Кнопки
доступны для программирования: ими можно управлять посред­
ством их свойств, их события можно обрабатывать. Пример про*
граммы в этом разделе реализует простейший проигрыватель
WAV-файлов, основанный на управляющем элементе MCI. в при­
веденной ниже таблице описаны важнейшие свойства и события
этого элемента.
Таблица 7.12. Свойства и события элемента MCI_____________
О п и с а н и е _______________ _______________
7.7
Разрешает (True) или запрещает (False)
мультимедийному элементу самостоятельно
отключать и включать свои кнопки
в соответствии с возможностями имеющихся
в системе открытых устройств._________ ■
______
Позволяет включать и выключать кнопку Back* ,
а при чтении возвращает ее состояние.
Только для чтения и только в период
выполнения. Отражает возможность (True)I
или невозможность (False) для открытого м и устройства выбросить носитель._____ _____ __
Только для чтения и только в период
выполнения. Отражает возможность
^
или невозможность (False) для открытого м и
устройства осуществлять воспроизведение.
399
файлы мультимедиа
Свойства
Описание
Can Record
Только для чтения и только в период
выполнения. Отражает возможность (True)
или невозможность (False) для открытого MCI
устройства осуществлять запись.
CanStep
Показывает, может ли открытое устройство
воспроизводить изображение покадрово.
Command
В это свойство передается строка,
содержащая MCI-команду, которая подлежит
выполнению. Доступно только
в период выполнения.
DevicelD
Содержит идентификатор открытого MCIустройства.
DeviceType
Содержащееся в этом свойстве значение
указывает на тип МС1-устройства, которое
должен открыть MCI-элемент. Возможные
виды устройств: AVIVideo, CD Audio, DAT,
DigitalVicleo, MM Movie, other. Overlay, Scanner,
Sequencer, VCR, Videodisc или WaveAudio.
EjectEnabled
Включает (True) или отключает (False) кнопку
Eject (Выброс носителя).
EjectVisible
Делает видимой или невидимой кнопку Eject.
Error
Возвращает код ошибки, возникшей при
выполнении последней MCI-команды.
ErrorMessage
Содержит описание ошибки, код которой
находится в свойстве Error.
FileName
Должно содержать имя файла, который
сохраняется или открывается соответственно
MCI-командами Save или Open.
Frames
Здесь задается количество кадров в шаге,
выполняемом командами Васк или Step.
From
Должно содержать стартовую позицию
в открытом файле в единицах, заданных
значением свойства TimeFormat.
Ф айлы мультимедиа
400
Свойства
Описание
Length
Содержит длину открытого файла
в единицах, заданных значением свойства
TimeFormat
Mode
Значение этого свойства отражает режим,
в котором находится MCI-устройство.
NextEnabled
Включает (True) или отключает
Nex t (Следующий кадр).
NextVisible
Делает видимой или невидимой кнопку Next
N o tify
Если перед подачей команды MCI-элементу
установить этот флажок в положение True, то
по завершении процесса выполнения
команды MCI-элемент сгенерирует событие
Done. Флажок N o tify при этом сбросится
в False и ему снова нужно будет присвоить
значение Щ рв
NotifyMessage
Доступно только для чтения и только в
NotifyValue
Доступно только для чтения и только
в период выполнения. Содержит код,
возвращаемый событием Done.
O rientation
Определяет горизонтальное (0) или
вертикальное (1) расположение кнопок.
PauseEnabled
Включает (True) или отключает
Pause (Пауза)ЩШШШШШШ
PauseVisible
Делает видимой или невидимой кнопку Pause
PlayEnabled
Включает (True) или отключает (False) кнопку
Play ( Воспроизведение).
PlayVisible
Делает видимой или невидимой кнопку Play.
Position
Содержит значение текущей позиции
в файле.
период выполнения. Содержит сообщение,
описывающее код возврата события Pone.
Свойства
Описание
PrevEnabled
Включает (True) или отключает (False) кнопку
Previous (Предыдущий кадр)._________
PrevVisible
Делает видимой или невидимой кнопку
Previous.
RecordEnabled
Включает (True) или отключает (False) кнопку
Record (Запись).____________
RecordMode
Задает режим записи для MCI-устройства
(О соответствует вставке, 1 - записи поверх
существующей).
RecordVisible
Делает видимой или невидимой кнопку
Record._________________________ __
Shareable
Разрешает (True) или запрещает (False) доступ
к MCI-устройству нескольким приложениям
одновременно.
Silent
Разрешает (False) или запрещает (True)
воспроизведение звука.
Start
Определяет начальную позицию в файле или
на носителе в единицах времени, заданных
значением свойства TimeFormat.___________
StepEnabled
Включает (True) или отключает (False) кнопку
Step (Шаг).
StepVisible
Делает видимой или невидимой кнопку Step
StopEnabled
Включает (True) или отключает (False) кнопку
Stop (Стоп).
___________
StopVisible
Делает видимой или невидимой кнопку Stop
TimeFormat
Задает единицу измерения времени, которая
используется при определении длины записи
и позиционировании.
To
Задает позицию конца записи или
воспроизведения для команд Play и Record
Ф айлы мультимедиа
402
Свойства
Описание
Track
Задает номер дорожки, относительно которой
будут возвращать информацию свойства
TrackLength и TrackPosition.
TrackLength
Содержит длину дорожки в единицах
измерения, выбранных в свойстве
TimeFormat,
_______ • ''
TrackPosition
Возвращает текущую позицию на дорожке,
заданной значением свойства Trade______
Tracks
Возвращает количество дорожек на текущем
носителе.
Updatelnterval
Задает интервал времени для генерации
события Statusllpdate.
__________
UsesWindows
Только для чтения и только в период
выполнения. Возвращает True, если активное
в данный момент МСІ-устройство открыло
окно на рабочей поверхности Windows, и
False в противном случае.__________________
События
Описание
BackClick
Генерируется при щелчке на кнопке Back
BackCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кноп*
Back.
BackGotFocus
Кнопка Back получила фокус клавиатуры
BackLostFocus
Кнопка Back потеряла фокус клавиатуры
Done
Генерируется после того, как процесс
выполнения последней MCI-команды
завершен, при условии, что перед подачей
команды был установлен флажок Notify.
EjectClick
Щелчок на кнопке Eject
Свойства
Описание
EjectCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кнопки
Eject.
EjectGotFocus
Кнопка Eject получила фокус клавиатуры
EjectLostFocus
Кнопка Eject потеряла фокус клавиатуры
NextClick
Щелчок на кнопке Next.
NextCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кнопки
Next.
NextGotFocus
Кнопка Next получила фокус клавиатуры
NextLostFocus
Кнопка Next потеряла фокус клавиатуры
PauseClick
Щелчок на кнопке Pause
PauseCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кнопки
Pause.
PauseGotFocus
Кнопка Pause получила фокус клавиатуры
PauseLostFocus
Кнопка Pause потеряла фокус клавиатуры
PlayClick
Щелчок на кнопке Play
PlayCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кнопки
Play
ВйЁнШ няМ
PlayGotFocus
Кнопка Play получила фокус клавиатуры.
PlayLostFocus
Кнопка Play потеряла фокус клавиатуры.
PrevClick
Щелчок на кнопке Previous
PrevCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кнопки
Previous._________________________ _______ __
PrevGot Focus
Кнопка Previous получила фокус клавиатуры.
404
Ф айлы мультимедиа
Свойства
Описание
PrevLostFocus
Кнопка Previous потеряла фокус клавиатуры
RecordClick
Щелчок на кнопке Record.
RecordCompleted
Генерируется после завершения выполнения
МСІ-команды, посланной посредством кноп*
Record.
RecordGotFocus
Кнопка Record получила фокус клавиатуры
RecordLostFocus
Кнопка Record потеряла фокус клавиатуры
StatusUpdate
Событие происходит автоматически, начиная
с момента создания экземпляра через
периоды времени, заданные значением
свойства Updatelnterval. Это позволяет
опросить ключевые свойства элемента и
обновить выводимые на экран данные о
текущем состоянии
МО-устройства.
'
StepClick
Щелчок на кнопке Step.
StepCompleted
Генерируется после завершения выполнения
MCI-команды, посланной посредством кноп*
Step.
StepGotFocus
Кнопка Step получила фокус клавиатуры.
StepLostFocus
Кнопка Step потеряла фокус клавиатуры.
StopClick
Щелчок на кнопке Stop.
StopCompleted
Генерируется после завершения выполнения
МСІ-команды, посланной посредством кнопки
Stop.
StopGotFocus
Кнопка Stop получила фокус клавиатуры.
StopLostFocus
Кнопка Stop потеряла фокус клавиатуры.
файлы мультимедиа
405
Пример
■
Чтобы повторить пример программы, следует вначале вклю­
чить в состав коллекции инструментов два дополнительных
управляющих элемента (выберите для этого пункты M ic ro s o ft
M u ltim e d ia C o n tro l 5 .0 и M ic ro s o ft Com m on D ialog C o n trol
5 .0 на вкладке C o n tro ls диалога C om ponents).
Ш Программа позволяет воспроизводить WAV-файлы с помо­
щью мультимедийного элемента MCI.
■ Пользователь может выбрать произвольный WAV-файл, ис­
пользуя стандартный диалог, и запустить его на воспроизве­
дение.
■ По команде О ткры ть меню Ф а й л выполняется процедура
mnuOpen_Click. Процедура открывает диалог, позволяющий
выбрать произвольный файл с расширением WAV. В качестве
стартового каталога задан подкаталог MEDIA каталога WIN­
DOWS (именно там находятся записи звуков, издаваемых сис­
темой Windows). Если в диалоге О ткры тие ф айла выбран
файл, то его имя будет передано MCI-элементу для воспро­
изведения (с предварительным закрытием файла, который,
возможно, воспроизводился и был открыт раньше).
■ Процедура mciWavePlay_StatusUpdate обрабатывает событие
S tatusU pdate, которое MCI-элемент автоматически генери­
рует через равные промежутки времени. Анализируя текущее
значение свойства M ode с помощью конструкции Select Case,
процедура обновляет надпись на этикетке IblM ode, отобра­
жая текущее состояние устройства. Для этого значение
Ib lM o d e сравнивается с константами. Например, если оно
оказывается равным константе mciModeStop, то при условии,
что в момент предыдущего события U pdateS tatus имело
место воспроизведение звука (статическая переменная Played
имела значение True), флаг Played будет сброшен, а в свой­
ство C om m and МСІ-элемента будет передана команда
«Seek», что повлечет перенос позиции вывода на начало
файла («перемотка ленты»). Если значение свойства M ode
окажется равным константе mciModePlay, то флаг Played, на­
оборот, будет установлен.
406
Ф айлы мультимедиа
коде процедуры FormJJnLoad мультимедийный элемент по­
лучает команду «Close», благодаря чему открытое ранее MCIустройство будет закрыто. Это необходимо, чтобы другие
приложения смогли затем воспользоваться данным устройст­
вом. Если ни одно устройство не открыто, команда «Close»,
по крайней мере, не повредит.
иWav-проигрыватель
Файл
Справка
Щ
Режим:
У
Файл:-
іДйімІ
тҒ .
(ri:\W lNDQW S\,Oiimes.wav
Позиция:
M i
Таблица 7.13. Управляю щ ие элементы и их свойства
в прим ере програм м ы
I Объект
Свойство
Значение
I Form
Name
frmMain
BorderStyle
1-FixedSingle
Caption
Wav-проигрыватель
MaxButton
False
MinButton
False
I CommonDialog
Name
cdlOpen
I MMControl
Name
mciWavePlay
Updatelnterval
100
PrevVisible
False
-
■
-
—
■■
■Г - ■ ■■■■ . . . ■■« —
I.. I
■ .......................................... .......
файлы мультимедиа
Свойство
Значение
NextVisible
BackVisible
StepVisible
EjectVisible
Label
Label
Label
Label
Name
IblDevice
BorderStyle
1-FixedSingle
Caption
WAVE-Audio
Name
IblDescMode
Caption
Режим
Name
IblDescDevice
Caption
Устройство:
Name
IblMode
BorderStyle
1-FixedSingle
Name
IblDescFile
Caption
Файл:
Name
IblLang
BorderStyle
1-FixedSingle
Name
IblDescPos
Caption
Позиция:
Name
IblDescLang
Caption
Длина:
Name
IblPosition
BorderStyle
1-FixedSingle
Ф айлы мультимедиа
408
Объект
Свойство
Значение
Label
Name
IblFile
BorderStyle
1-FixedSingle
Name
mnuFile
Caption
Файл
Name
mnuOpen
Caption
Открыть
Name
mnuSepO
Menu (H)
Menu (I)
Menu (I)
Caption
Menu (I)
Menu (H)
Menu (I)
Name
mnuExit
Caption
Выход
Name
mnuHelp
Caption
Справка
Name
mnulnfo
Caption
О программе
Примечание
Ш В таблице присутствуют элементы типа M enu, сопровождае­
мые заглавной буквой в скобках. Это элементы меню, они со­
здаются с помощью редактора меню M enu E d ito r (см. также
рисунок):
• M enu(H ) означает заглавие меню
• M e n u (l) означает элемент меню
409
файлы мультимедиа
И сходны й текст
Option Explicit
Private Sub Form_Load()
lblFile.Caption = "- файл не выбран"
End Sub
Private Sub Form_UnLoad(Cancel As Integer)
mciWavePlay.Command = "Close"
End Sub
Private Sub mciWavePlay__RecordClick (Cancel As _
Integer)
Cancel = True
MsgBox "Функция не поддерживается!", _
vbExclamation, "Внимание!"
End Sub
Private Sub mciWavePlay_St.atusUpdate ()
Static Played As Boolean
Select Case mciWavePlay.Mode
Case mciModeNotOpen
lblMode.Caption щ "Закрыт"
Case mciModeStop
lblMode.Caption = "Остановка"
If Played Then
Played = False
mciWavePlay.Command = НСллі/И
End If
—
Case mciModePlay
lblMode.Caption = "Воспроизведение"
Played = True
Ф айлы мультимедиа
410
Case mciModePause
IblMode.Caption = "Пауза”
-
Case mciModeReady
IblMode.Caption = "Готов"
Case Else
IblMode.Caption = "неизвестен”
End Select
If mciWavePlay.Mode <> mciModeNotOpen Then
lblPosition = mciWavePlay.Position
End if
End Sub
-л
3
_
■
Private Sub mnuExit__Click ()
Unload, Me
End
End Sub
*r
’r*'
Private Sub mnuInfo_Click()
Dim strlnfoText As String
strlnfoText = "Wav-проигрыватель на основе _
МСІ-элемента" & Chr$(13) & __
C h r $ (13) & "(С) 1997 by Marcus _
Linke"
MsgBox strlnfoText, vblnformation, "О программе"
End Sub
Private Sub mnuOpen_Click()
With cdlOpen
.InitDir = "C:\WINDOWS\MEDIA"
.Filter = "wav (*.wav)|* .wav"
.ShowOpen
End With
файлы мультимедиа
411
If cdlOpen.FileName <> "" Then
If mciWavePlay.Mode <> mciModeNotOpen Then
mciWavePlay.Command = "Close"
End If
lblFile.Caption = cdlOpen.FileName
With mciWavePlay
.Notify = False
.Wait = True
.Shareable - False
.DeviceType = "WaveAudio"
.FileName = cdlOpen.FileName
.Command = "Open"
End With
cdlOpen.FileName = ""
lblLang = mciWavePlay.Length
lblPosition = mciWavePlay.Position
Elself mciWavePlay.Mode = mciModeNotOpen Then
lblFile.Caption = "- файл не выбран"
End If
End Sub
7.7.3. Управляющий элемент Animation
Этот элемент дает возможность воспроизводить AVI-файлы (ви­
деофайлы Windows). Основное назначение его — визуализиро­
вать с помощью «движущихся картинок» ход некоторого процес­
са. Например, отображение хода копирования файла в Провод­
нике Windows — задача, которую может решить элемент Anima­
tion. Однако его функциональные возможности ограничены лишь
воспроизведением AVI-файла. Никаких особых возможностей уп­
файлы мультимедиа
412
равления он не предоставляет. Вместе с тем применение управ­
ляющего элемента Anim ation отличается простотой, а для многих
практических целей его возможностей вполне достаточно. В при­
веденном ниже примере реализован основанный на элементе
Anim ation простейший проигрыватель AVI-файлов. Если возмож­
ности Anim ation окажутся недостаточными, то следует обратить­
ся к управляющему элементу MCI или же попытаться напрямую
работать с АРІ-функциями.
Примечание
~
Ш Управляющий элемент Anim ation поддерживает не все фор­
маты AVI-файлов. Чтобы этот управляющий элемент мог вос­
производить AVI-файл, последний должен:
• Не содержать звука.
• Не быть сжатым (единственный допустимый вид сжатия —
RLE).
Таблица 7.14. Свойства и методы управляющего элемента
Anim ation
Свойства
Описание
AutoPlay
Если это свойство имеет значение True, то после
вызова метода Open немедленно начнется
воспроизведение открытого AVI-файла, которое
будет продолжаться до вызова метода Close или
до момента, когда этому свойству будет
присвоено значение False.
BackColor
Это свойство определяет цвет фона.
BackStyle
Значением этого свойства задается режим фона
для воспроизводимого изображения. То есть 7
будет ли изображение использовать заданный
цвет заднего плана, или же оно будет
воспроизводиться в «прозрачном» режиме.
файлы мультимедиа
413
Свойства
Описание
Center
Определяет, должно ли воспроизводимое
изображение выравниваться по центру
управляющего элемента, или же оно будет
воспроизводиться в системе координат,
начинающейся в левом верхнем углу элемента
Animation.
Методы
Описание
Close
Закрывает открытый в данный момент AVI-файл
Открывает заданный AVI-файл.
Инициирует воспроизведение ранее открытого
AVI-фаила.
Stop
Прекращает воспроизведение AVI-файла. Если
при этом установлен флаг AutoPlay, произойдет
ошибка периода выполнения.
Пример
Я
Чтобы повторить пример программы, следует вначале вклю­
чить в состав коллекции инструментов несколько дополни­
тельных управляющих элементов (выберите для этого пункты
M icrosoft Windows Common C ontrols-2 5.0 и M icrosoft
Common Dialog Control 5.0 на вкладке Controls диалога
Components).
Ж Программа позволяет выбрать AVI-файл и воспроизвести его.
■ С помощью процедуры cmdPlay_Click AVI-файл запускается на
воспроизведение (метод Play с параметром 1 ).
Ж Процедура cmdStop__Click использует метод Stop для того,
чтобы прекратить воспроизведение файла.
■ Процедура обработки щелчка на кнопке cm dSelect (Выбор)
открывает окно общего диалога Открытие файла, позволя­
ющего выбрать произвольный AVI-файл, который затем от­
крывается методом Open.
Ф айлы мультимедиа
414
Таблица 7.15. Управляющие элементы и их свойства
в примере программы
Объект
Свойство
Значение
Form
Name
frmMain
BorderStyle
1-FixedSingle
Caption
Простой AVIпроигрыватель
MaxButton
False
MinButton
False
PictureBox
Name
picPicture
Animation
Name
aniAVI
CommonDialog
Name
cdlAviSelect
CommandButton
Name
cmdSelect
Caption
Выбор
Name
cmdStop
Caption
Стоп
Name
cmdPlay
Caption
Воспроизведение
CommandButton
CommandButton
Исходный текст
Option Explicit
Private Sub cmdPlay_Click()
aniAVI.Play 1
End Sub
Private Sub cmdStop_Click()
a n i A V I .Stop
End Sub
"J.
файлы мультимедиа
________________415
Private Sub emdSelect_Click()
With cdlAVISelect
.Filter = "AVI (*.avi)I *. avi"
- " ,Hi
•
.ShowOpen
End With
If cdlAVISelect.FileName <> "" Then
aniAVI.Close
aniAVI.OPEN cdlAVISelect.FileName
_
End If:**' ‘
End Sub
7.7.4. Воспроизведение WAV-файлов с помощью
API-функций
Вы уже познакомились с возможностями MCI-элемента (см. 7.7.2)
в части обработки WAV-файлов. В приведенном ниже примере
также будут воспроизводиться WAV-файлы. Дополнительный уп­
равляющий элемент MCI предоставляет широкие возможности,
большая часть которых может никогда не потребоваться. Если
речь идет о том, чтобы просто издать один из системных звуков
Windows, нет смысла включать в состав приложения дополнитель­
ный управляющий элемент. Гораздо проще задачу можно решить
вызовом соответствующей API-функции. Как это сделать — пояс­
няет приведенный ниже пример.
Пример
■
■
Чтобы повторить пример, необходимо включить в состав кол­
лекции инструментов несколько дополнительных управляю­
щих элементов (выберите для этого пункт M icrosoft Windows
Common Controls 5.0 на вкладке Controls диалога Compo­
nents).
В примере использована API-функция sndPlaySound.
416
Ф айлы мультимедиа
Программа позволяет воспроизвести разнообразные систем­
ные звуки Windows. В визуальном отношении программа пред­
ставляет собой просто пустую форму с системой меню.
В общем разделе вначале объявлены управляющие константы,
затем следует собственно объявление АРІ-функций.
Процедура Playlt используется другими процедурами для вос­
произведения звуков. Сама она вызывает АРІ-функцию
sndPlaySound с соответствующими параметрами. Парамет­
ров, собственно, два. Первый задает имя WAV-файла, подле­
жащего воспроизведению, второй определяет режим воспро­
изведения.
В процедуре Form_Load также воспроизводится звуковой
файл. Параметр SND_ASYNC означает, что воспроизведение
звука никак не связано с дальнейшим выполнением программы
и оба этих процесса происходят далее независимо друг от
друга.
При выходе из программы тем или иным способом произойдет
событие QueryUnload и будет выполнена соответствующая
процедура. Опять раздастся звук, на этот раз вызванный с
параметром SND_SYNC, что означает — выполнение програм­
мы будет приостановлено до того момента, пока не окончится
воспроизведение звука.
По выбору соответствующего пункта меню будет выполнена
процедура mnuAsync_Click. Она вызывает процедуру Playlt с
параметром SND_ASYNC. В результате будет сгенерирован
продолжительный звук, во время которого программа сможет
реагировать на другие действия пользователя, например, на
ввод в текстовое поле.
,
Процедура mnuCycle_Click обеспечивает циклическое воспро­
изведение звука. Если пункт меню Ц икл помечен «галочкой»,
то пометка будет снята, а WAV-файл будет воспроизведен с
параметром SND__SYNC. Если же галочка отсутствует (mnuCycle.Checked = False), то вызов процедуры Playlt будет сопро­
вожден суммой параметровSND_ASYNC + SND_LOOP, что при­
ведет к циклическому воспроизведению звука. Следует отме­
тить, что последнее возможно только в режиме SND_ASYNC.
файлы мультимедиа
■
417
И, наконец, последняя процедура (mnuSync_Click) вызывает
процедуру Playit с параметром SND_SYNC. При этом также
будет воспроизведен продолжительный во времени звук, но
синхронный режим подразумевает, что выполнение програм­
мы приостанавливается на время, пока длится звук. Иными
словами, пользователю не удастся ввести что-либо в тексто­
вое поле во время воспроизведения звука.
Примечание
■
Имена WAV-файлов в этом примере не являются истиной в
последней инстанции. Можно использовать любые WAVфайлы, которые найдутся на вашем диске. Но обратите вни­
мание при этом на следующий факт: для иллюстрации разли­
чий между синхронным и асинхронным режимами использо­
ваны файлы, звучание которых продолжается в течение не­
скольких секунд — чтобы пользователь мог успеть (или
соответственно не успеть) ввести что-либо в текстовое поле.
Таблица 7.16. Управляющие элементы и их свойства
в примере программы
Form
Свойство
Значение
Name
frmMain
BorderStyle
1-FixedSingle
Caption
MaxButton
TextBox
Menu (H)
14 Заказ 3337
Name
txt Fake
MultiLine
True
ScrollBars
2-Vertical
Name
mnuFile
Caption
Файл
Ф айлы мультимедиа
418
I Объект
Свойство
Значение
I Menu (1)
Name
mnuOpen
Caption
Открыть
Name
mnuExit
Caption
Выход
Name
mnuTools
Caption
Инструменты
Name
mnuSound
Caption
Звук
Name
mnuCyde
Caption
Цикл
Name
mnuSync
Caption
Синхронно
Name
mnuASync
Caption
Асинхронно
I Menu (1)
j Menu (Н)
Menu (U)
1 Menu (1)
Menu (1)
I Menu (1)
Примечание
Ш В таблице присутствуют элементы типа Menu, сопровождае­
мые заглавной буквой в скобках. Это элементы меню, созда­
ваемые с помощью редактора меню Menu E ditor (см. также
рисунок):
• Мепи(Н) означает заглавие меню
• Menu(U) означает элемент меню, являющийся заглавием
подменю
• M enu(l) означает элемент меню
Исходный текст
Option Explicit
Const SND_SYNC As Long = 0
Const SND_ASYNC As Long = 0
Const SND_LOOP As Long = 0
Private Declare Function sndPlaySound Lib _
"winmm.dll" Alias "sndPlaySoundA" _
(ByVal IpszSoundName As String, ByVal
uFlags As Long) As Long
Private Sub Playlt(FileN As String, Kind As Long)
Dim Dummy As Long
Dummy 4 sndPlaySound (FileN, Kind)
End Sub
Private Sub Form_Load()
Playlt
"c:\wincfows\media\Jungle Windows starten.wav ,
SND__ASYNC
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, _
UnLoadMode As Integer)
If mnuCycle.Checked Then
Playlt "c:\windows\media\Chimes.wav",
SND_SYNC
End If
End Sub
Private Sub mnuAsуnc_C1iс k {)
Playlt __
"c:\windows\media\Jungle Windows starten.wav*,
SND_ASYNC
End Sub
Private Sub mnuExit__Click ()
UnLoad Me
Ф айлы мультимедиа
420
Ena Sub
„
Private Sub mnuCycle_Click()
If mnuCycle.Checked Then
mnuCycle.Checked = False
Playlt "c:\windows\media\Chimes.wav", SND_SYNC
Else
mnuCycle.Checked = True
Playlt "c:\windows\media\Chimes.wav", _
SND_ASYNC + SNDJLOOP
End If
End Sub
Private Sub mnuSync_Click()
Playlt _
"c:\windows\media\Jungle Windows starten.wav",
SND_SYNC
End Sub
Программирование
для среды Internet
В последние годы всемирная компьютерная сеть Internet разви­
валась бурными темпами и так же быстро изменялось программ­
ное обеспечение — технологии программирования, прикладные
программы и программные ресурсы, — предназначенное для вза­
имодействия со средой Internet. Язык Java, предложенный кор­
порацией Sun Microsystems, в последнее время стал претендо­
вать на роль фактического стандарта языка программирования
Web-приложений для сред Internet и Intranet (становящиеся по­
пулярными Internet-подобные сети в масштабах предприятия, го­
рода или района). Корпорация Microsoft не сразу правильно оце­
нила значение Internet для будущего программных технологий и
сравнительно поздно начала ориентировать свои продукты на
взаимодействие со средой Internet. Однако начав это делать, Mi­
crosoft, не считаясь с затратами, сразу взяла быка за рога. Про­
дукты Microsoft теперь не только способны взаимодействовать с
Internet, для большинства из них теперь предусмотрена возмож­
ность пользоваться Inter net- ресурса ми и/или создавать их. На­
пример, большинство приложений Microsoft Office способны со­
хранять свои данные в виде HTML-файлов. Что еще более важно,
в качестве ответа на вызов Java корпорация Microsoft выдвигает
другую базовую технологию для среды Internet, на которой и ос­
новывает свою стратегию в этой области. Речь идет о технологии
ActiveX, являющейся расширением технологии OLE. Не забыты и
средства разработки программного обеспечения, которые позво­
ляют интегрировать в приложение функциональные возможности,
связанные с взаимодействием со средой Internet. Не стал исклю­
чением и Visual Basic. Он располагает рядом возможностей в этом
плане; некоторые из них и являются темой данной главы.
A ctiveX -докум ент
422
8.1. ActiveX-документ
Рассмотрим вначале один специфический вид программы, кото­
рый называют пользовательским документом (User Document).
Основан он на технологии ActiveX, поэтому используют также тер­
мин ActiveX-документ. ActiveX-документ не может выполняться в
среде Windows и поэтому он не является программой в обычном
смысле этого слова. Он предназначен для выполнения в среде
Internet Explorer или другого броузера, поддерживающего техно­
логию ActiveX. Такой документ может быть составной частью
HTML-страницы, вызываться и выполняться броузером при рабо­
те в среде Internet.
Примечание
Поскольку пользовательский документ основан на ActiveX-компонентах, его создание возможно только в профессиональных вер­
сиях Visual Basic.
8.1.1. Создание ActiveX-документа
Следующий далее пример программы иллюстрирует технику со­
здания ActiveX-документа, его тестирования на локальном ком­
пьютере, а также создания программы установки, которая позво­
лит установить документ на другом компьютере и использовать
его в Internet.
;
Rgl «
Ц 9 Ш Я Н I *
*‘г
Обзор. Создание ActiveX-документа
■
9
ActiveX-документ создается как проект типа A ctiveX D ocum ent
DLL. При этом в редакторе формы доступна пустая поверх­
ность формы без бордюра. На нее можно помещать управляю­
щие элементы так же, как и на обычную форму. И точно так же
можно вводить код в окно кода.
Допускается использование и дополнительных управляющих
элементов, принципиальных ограничений на это нет. Однако
следует помнить, что пользовательский документ предназна­
чен для загрузки из среды Internet и увеличение объема его
кода соответственно увеличивает время загрузки.
ActiveX-докум ент
____________ 423
f.л
т ?сё«V-f j * •*♦-<f№
'■ І*'
■
Пример должен показать, что все основные приемы работы
над проектом пользовательского документа ничем не отлича­
ются от обычных, применяемых при разработке Windows-приложения. И функциональные возможности, которыми может
обладать ActiveX-документ, настолько же многообразны. На­
пример, применяя обычную технологию доступа к базам дан­
ных, такой документ способен предоставить доступ к локаль­
ной базе данных внешнему пользователю из Internet.
■ Что делает данная программа? Это очень простой графичес­
кий редактор, который предоставляет возможность рисовать
на рабочей поверхности с помощью мыши. Кроме линий поль­
зователь может рисовать окружности и прямоугольники,
может изменять толщину, стиль и цвет линий.
■ Давайте рассмотрим исходный код. В общем разделе объяв­
лены два перечня констант (это сделано с помощью оператора
Enum). Константы требуются для обозначения толщины линий
и вида фигур.
■ Процедура UserDocumentJnitialize выполняется по событию
Initialize, т. е. при загрузке пользовательского документа. В
ней обычно выполняются разного рода инициализации. В дан­
ном случае переменная IngColor получает свое начальное зна­
чение. В этой переменной хранится код текущего цвета, ко­
торыми рисуются линии на поверхности документа, поэтому
для присваивания значения использована функция QBColor().
■
Важнейшими процедурами программы являются три проце­
дуры обработки событий мыши. Речь идет о событиях управ­
ляющего элемента PictureBox, поскольку именно его рабочая
поверхность используется для рисования. Вначале о проце­
дуре обработки события MotiseDown. Первым делом она оп­
ределяет, которая из кнопок мыши была нажата. Если нажата
левая кнопка, то текущие координаты указателя запоминаются
в соответствующих свойствах картинки, они затем потребует­
ся для рисования линии при дальнейшем движении мыши
либо для определения центра прямоугольника или круга.
Если — правая кнопка, открывается контекстное меню.
424
ActiveX-докум ент
Ш Процедура обработки события M ouseM ove рисует линию,
если линия выбрана в качестве текущего вида фигуры. Для
этого использован метод Line, рисующий линию из координат,
которые были сохранены в свойствах C urrentX и C urrentY , в
текущие координаты (которые после этого запоминаются в
свойствах C urrentX и C urrentY). Метод Line здесь использо­
ван вместо метода PSet, проставляющего одиночную точку. В
случае PSet при быстром движении мыши линия состояла бы
из последовательности точек, промежутки между которыми за­
висели бы от скорости движения мыши.
В M o u s e llp -процедура обеспечивает рисование геометричес­
кой фигуры при отпускании левой кнопки мыши. Для рисования
прямоугольника использован метод Line с параметром В, для
рисования окружности— метод C ircle. При этом воображаемая
линия между точкой, где была нажата кнопка мыши (C urrentX,
C urrentY), и точкой, где она была отпущена (X, Y), играет роль
главной диагонали прямоугольника или радиуса окружности.
Последний вычисляется как векторная сумма разностей коор­
динат (функция VectorSum).
Ш Теперь рассмотрим процедуры, обрабатывающие события
C lick пунктов контекстного меню. Процедура mnuColor_Click
открывает общий диалог Цвет, результат которого запомина­
ется в переменной IngColor.
■ Процедуры mnuWide_Click, mnuMiddle_Click и mnuNarrow_Click
устанавливают толщину линии, меняя для этого значение свой­
ства DrawW idth.
V Аналогичным образом процедуры mnuDotted_Click и mnuSolid_Click
устанавливают стиль линии, меняя значение свойства DrawStyle
картинки picPicture.
■ Наконец, последняя группа процедур предназначена для выбо­
ра вида фигуры. Процедуры mnuCircle_Click, mnuRecktangle_Click и mnuLine_Click присваивают значение переменной
intShapeType, где с помощью одной из констант перечня ShapeType задается текущий вид фигуры.
■ Процедура cmdCls_Click выполняется по щелчку на кнопке
Очистка, при этом вызовом метода CIs картинки p icP ictu re
ее поверхность очищается.
ActiveX-документ
425
Примечание
■
Как и ActiveX-объект, ActiveX-документ позволяет определить
пользовательские свойства и события (см. 6.1.3).
Процедура. Тестирование ActiveX-документа
1. Запустить ActiveX-документ, как обычную программу, нельзя.
Он должен выполняться в среде Internet Explorer. В качестве
первого шага запустите Visual Basic и загрузите проект Ac­
tiveX-документа.
2. Запустите проект (команда Start меню Run или клавиша [F5]).
При этом будет произведена полная компиляция документа и
будет создан файл с расширением VBD.
3. Запустите Internet Explorer. Если ваша система сконфигури­
рована так, что при старте Internet Explorer немедленно уста­
навливает соединение с провайдером услуг Internet, то пре­
рвите соединение.
4. Выберите команду Open в меню File.
5. Щелкните на кнопке Browse (Обзор) в открывшемся окне диа­
лога и найдите созданный вам VBD-файл (он должен нахо­
диться в каталоге Visual Basic). Имя файла usrDocument.VBD,
поэтому в комбинированном поле диалога Open необходимо
будет выбрать пункт All Files (Все файлы).
6. Щелкните на кнопке Open, и Internet Explorer откроет создан­
ный вами пользовательский документ (см. рисунок).
Примечание
■
VBD-файл будет удален, как только выполнение программы в
среде IDE будет прекращено. Чтобы создать более «долгожи­
вущий" документ, воспользуйтесь командой М а ке ... меню
File. При этом кроме VBD-файла будет создана DLL-библио­
тека (DLL-файл), что позволит выполнять документ в среде In­
ternet Explorer без IDE. Создание программы установки поль­
зовательского документа, позволяющей передать его пользо­
вателю, описано в разделе 8.1.2.
!
426
A ctiveX -докум ент
И ЕAVB5\usrDocument.vbd - Microsoft Internet Explorer
Hom e
Search F avor*.
E:\VB5VusrOocumentvbd
Цвет£?
Толщ ина ликий >
Т іяі / п м в "
»
ЛИНИЯ
ПрИНОиГОГЬНИ*
О чистка
Таблица 8.1. Управляющие элементы и их свойства
в примере програм м ы
Свойство
Значение
UserDocument
Name
usrDocument
CommonDialog
Name. cdlColor
CommandButton
Name
cmdCIs
Caption
Очистка
Default
PictureBox
Label
Name
picPicture
BackColor
белый
Name
ActiveX-документ
Свойство
Значение
BackColor
желтый
Caption
Courier New
жирныи
Menu (H)
Menu (I)
Menu (U)
Menu (I)
Menu (I)
Menu (I)
ForeColor
синии
Name
mnuPopUp
Caption
(пробел)
Name
mnuColor
Caption
Цвет
Name
mnuLineWidth
Caption
Толщина линий
Name
mnuWide
Caption
Толстые
Name
mnuMiddle
Caption
Средние
Name
mnuNarrow
Тонкие
1 Menu (U)___________ Name__________
I Menu (1)__________
Caption_____________ 1 Тип линий
Name______________ mnuSolid
Caption
Menu (I)
mnulineType
Name
_______
Сплошные
mnu Dotted
Menu (U)
Menu (I)
Menu (I)
Menu (I)
Свойство
Значение
Caption
Пунктир
Name
mnuShape
Caption
Фигура
Name
mnuUne
Caption
Линия
Name
mnuRecktangle
Caption
Прямоугольник
Name
mnuGrde
Caption
Окружность
Примечание
■
В таблице присутствуют элементы типа Menu, сопровождавмые заглавной буквой в скобках. Это элементы меню, созда­
ваемые с помощью редактора меню Menu E ditor (см. также
рисунок):
• Menu(H) означает заглавие меню
• Menu(U) означает элемент меню, являющийся заглавием
подменю
• M enu(l) означает элемент меню
И сходны й текст
Option Explicit
Private Enum ShapeType
LLine
Recktangle
CCircle
End Enum
429
ActiveX-документ
Private Enum
Wide = 9
Middle =
Narrow —
End Enum
LineWidth
v
3
І
Private intShapeType As Integer
Private IngColor As Long
Private Function VectorSum(ByVal X As Single, __
ByVal Y As Single) As Single
Dim X_Square As Single
Dim Y_Square As Single
X_Square = X * X
Y_Square = Y * Y
VectorSum = Sqr(X_Square + Y_Square)
End Function
Private Sub cmdCls_Click()
picPicture.Cls
End Sub
Private Sub mnuWide_Click()
picPicture.DrawWidth = LineWidth.Wide
End Sub
Private Sub mnuDotted__Click ()
picPicture.DrawStyle = vbDot
End Sub
Private Sub mnuSolidjClick()
picPicture.DrawStyle = vbSolid
End Sub
Private Sub mnuNarrow_Click()
picPicture.DrawWidth = LineWidth.Narrow
End Sub
Private Sub mnuMiddle_Click()
picPicture.DrawWidth = LineWidth.Middle
End Sub
Private Sub mnuColor_Click()
With cdlColor
.Flags = cdlCCPreventFullOpen + cdlCCRGBInit
.ShowColor
IngColor = .Color
End With
End Sub
Private Sub mnuCircle__Click ()
intShapeType = ShapeType.CCircle
End Sub
Private Sub mnuLine_Click()
intShapeType = ShapeType.LLine
End Sub
Private Sub mnuRecktangle_Click{)
intShapeType = ShapeType.Recktangle
End Sub
Private Sub picPicture_MouseDown(Button As Integer,
Shift As Integer, X As Single, ~
Y As Single)
If Button = vbLeftButton Then
picPicture.CurrentX = X
picPicture.CurrentY = Y
Elself Button = vbRightButton Then
UserDocument.PopupMenu mnuPopUp, , X, Y
End I f
End Sub
Private Sub picPicture MouseMove(Button As Integer,
Shilt As Integer, X As Single,
v
Y As Single)
If Button = vbLeftButton Then
If intShapeType = ShapeType.LLine Then
picPicture.Line (picPicture.CurrentX, _
picPicture.CurrentY)
- (X, Y ) , IngColor
End If
End If
End Sub
Private Sub picPicture MouseUp(Button As Integer,
Shift As Integer, X As Single,
Y As Single)
If intShapeType = ShapeType.Recktangle Then
picPicture.Line (picPicture.CurrentX, _
,.Vi
'
picPicture.CurrentY) _
^
*
- (X, Y ), IngColor, В
Elself intShapeType = ShapeType.CCircle Then
Dim sngRadiusSum As Single
Dim sngRadius_X As Single
Dim sngRadius_Y As Single
sngRadius X = X - picPicture.CurrentX
sngRadius__Y = Y - picPicture .CurrentY
sngRadiusSum
Ц
VectorSum(sngRadius_X, _
sngRadius__Y)
picPicture.Circle
(picPicture.CurrentX,
picPicture.CurrentY),
sngRadiusSum, IngColor
End If
End Sub
Private Sub UserDocument_Initialize()
IngColor = QBColor(vbBlack)
End Sub
^32_______ _____________________________________ActiveX-докум ент
8.1.2. Программа установки
Открывать с помощью Internet Explorer пользовательский доку­
мент, работающий в среде Visual Basic, можно разве что в целях
тестирования. Чтобы воспользоваться пользовательским доку­
ментом вне среды Visual Basic, необходимо создать программу
установки. Делается это с помощью мастера создания программ
установки (Setup Wizard).
Процедура. С оздание п р о гр а м м ы уста н о вки
1. Запустите мастер создания программ установки (пункт Appli­
cation Setup Wizard папки Visual Basic 5.0). При этом после
заставки-приветствия (щелкните на Next) откроется окно диа­
лога, позволяющее выбрать проект и вид программы установки.
2. Выберите файл проекта (кнопка Browse), установите пере­
ключатель в позицию C reate In te rn e t Download Setup и
щелкните на Next.
3. Выберите каталог, где будут созданы файлы, относящиеся к
программе установки. Можно воспользоваться каталогом по
умолчанию, а затем скопировать файлы в требуемый каталог.
4. На следующем шаге необходимо решить, должны ли библио­
тека периода выполнения Visual Basic и OCX-файлы дополни­
тельных управляющих элементов подгружаться с локального
диска или с Web-узла. Поскольку документ предназначен для
использования в среде Internet, выберите Download from the
M icro so ft Web Site, при этом фактически будут подгружаться
последние версии управляющих элементов.
5. Щелкните на Safety, установите оба флажка (Safe fo r in itia li­
zation и Safe fo r scripting), затем щелкните на OK и на Next.
6. Если мастер установил, что в программе не используются
компоненты типа ActiveX-cepeep, на этом шаге диалога можно
указать на компоненты, которые все же следует интегрировать
в установочный пакет.
7. Далее мастер отобразит список файлов, от которых зависит
проект. Можно исключить из списка отдельные пункты, сняв
пометку слева. Затем щелкните на Next.
Создание броузера
433
8. Далее можно добавить или исключить пункты из списка всех
файлов, относящихся к проекту. Завершите этот шаг щелчком
на Next.
9. На финальном шаге мастера щелкните на Finish, и программа
установки будет создана.
Таблица 8.2. Ф айлы , создаваемы е мастером создания
пр о гр а м м установки
Тип файла
Описание
САВ
Эти файлы содержат в себе все файлы, имеющие
отношение к устанавливаемой программе
НТМ
Файл HTML-страницы.
VBD
Содержит код ActiveX-элемента
Примечание
Чтобы открыть пользовательский документ, необходимо с по­
мощью Internet Explorer открыть НТМ-файл.
8.2. Создание броузера
Основным инструментом взаимодействия со средой F e rn e t яв­
ляется программа-броузер. Своему броузеру Internet Explorer
корпорация Microsoft отводит центральную роль в стратегии за­
воевания рынка продуктов, связанных с Internet В Данном разделе мы займемся созданием броузера, который будет основывать­
ся на Internet Explorer. Может возникнуть вопрос - зачем могут
потребоваться «самодельные» броузеры на базе IE, если IE у нас
уже есть? Причины просты. Во-первых, этот путь позволяет ин­
тегрировать функциональные возможности броузера в приложе­
ние, где такие возможности будут играть вспомогательную сер­
висную роль — пользователь сможет получить доступ в Internet
непосредственно из программы. И, во-вторых, стэновитсявозможным создание броузера, удовлетворяющего специфическим
потребностям конкретного пользователя. И все это благодаря
тому, что Internet Explorer в форме дополнительных управляющих
элементов может быть интегрирован в Visual Basic-программу.
Пример
■
■
В примере показан способ создания броузера на основе уп­
равляющего элемента W ebB row ser, благодаря которому про­
грамма сможет выполнять все важнейшие функции броузера.
Чтобы реализовать пример программы, необходимо включить
в состав коллекции инструментов несколько дополнительных
управляющих элементов — выберите для этого пункты M i­
c ro s o ft W indows Common C ontrols 5.0 и M icro so ft In te rn e t
C ontrols в окне диалога Components.
■
Идея примера заключается не в создании независимой программы-броузера, а в том, чтобы интегрировать броузер в
любую программу, где прямой доступ в Internet может ока­
заться полезным.
■
Давайте взглянем теперь на исходный код программы. В
общем разделе объявлены несколько строковых переменных,
предназначенных для хранения адресов HTML-страниц.
Процедура GetAddress вызывается процедурой Form_Load для
инициализации «адресных» переменных. Внимание! При реа­
лизации примера сюда следует подставить адреса существу­
ющих и доступных Web-страниц.
■
■
Процедура GGoto предназначена для навигации броузера по
заданному адресу, для этого использован метод Navigate уп­
равляющего элемента W ebBrowser. Эта процедура носит,
скорее, косметический характер, она просто передает свой
параметр методу броузера.
■
Следующая процедура, brwBrowser_CommandStateChange, яв­
ляется обработчиком события, которое броузер генерирует
при изменениях в статусе выполняемой в данный момент ко­
манды. При этом параметр Command сравнивается с двумя
константами, CSC_NAVIGATEBACK и CSC_NAVIGATEFORWARD
(они определены в элементе W ebBrowser), из чего делается
вывод о вызванном методе (GoBack или GoForward) и соот-
Создание ~
вөтствөнно изменяется состояние командных кнопок Вперед и
Назад — их свойствам Enabled присваивается значение, содержащееся в параметре Enabled. Поскольку обе кнопки рабо­
тают в графическом режиме (Style = 1-Graphical), присваива­
ние значений True и False свойству Enabled таких кнопок при­
ведет к отображению на их поверхности рисунков, заданных
свойствами Picture и DisabledPicture соответственно.
Следующая процедура реагирует на событие DownloadBegin
бооузера которое происходит в момент, когда в результате вы­
зова метода Navigate установлено соединение с Web-узлом и
начата загрузка страницы. При этом станет доступной кнопка
Стоп.
Методом GoBack в процедуре cmdBack_Click (кнопка Назад)
осуществляется переход броузера на предыдущий адрес, т. е.
адрес который был активен перед текущим (он занимает пер­
вую позицию в истории маршрута броузера). При этом кнопка
Н а з а д доступна, только если предыдущий адрес существует.
Метод Forward используется в процедуре cmdForward.Click
(кнопка Вперед) для навигации вперед по истории маршрут ,
т е. ее действие противоположно действию кнопки Назад.
Продвигаться вперед можно, конечно, только до того пункта,
откуда началось движение назад.
Процедуры cmdGoNew.Click, cmdGoRegister.Click и cmdGoSuDDort Click обрабатывают щелчки на кнопках Новый, Р
14.. j __
.и и л о і/п іл и о іл т г а R ПРПЙХОДӨ ПО
Поддержка
Для
поедопи еде ленным
------------------------------------- --этого вызывается процедура GGoto с одним из параметров, оп­
ределенных в процедуре GetAddress.
Процедура cmdHome_Click также использует процедуру GGoto
д л я перехода по адресу Web-страницы. При этом используется
стартовая Web-страница, с которой броузер на^ ” ^ С^ 0РД"г
боту по умолчанию. Например, при установке Internet Explorer
в качестве стартовой задается Web-страница корпорации Microsoft.
Теперь о Click-процедуре кнопки Стоп. Эта кнопка с л ^ и т для
прерывания процесса загрузки. Делается это методом Stop
броузера.
Создание броузера
436
Процедура Form_Load выполняется при инициализации про­
граммы и вызовом процедур GGoto и GetAddress инициали­
зирует предопределенные адреса, а также осуществляет на­
вигацию броузера на стартовую W eb-страницу.
Событие D ow nloadC om plete происходит в момент, когда за­
вершается загрузка ресурсов, связанных с текущ им URL-ад­
ресом. В этом случае процедура обработки данного события
предпринимает два действия: отключает кнопку Стоп (по­
скольку больше нечего прерывать) и отображает в панели со­
стояния текущий адрес (содержится в свойстве LocationName броузера).
Процедура обработки события N avigateC om plete выполняет­
ся в момент, когда установлено соединение с URL, иницииро­
ванное вызовом метода N avigate. При этом обновляется над­
пись на панели состояния, а новый текущий адрес включается
в список комбинированного поля cboA ddress (а 10-й элемент
списка, если он существует, исключается).
Процедура cboAddress_Click выполняется по щелчку на эле­
менте списка комбинированного поля, ее действие заключа­
ется в переходе по заданному элементом списка адресу.
Ъ. Ваш онлайновый контакт с нами
ІіІеУ/У\TMPVNETDOCS НТМ
^ 7 / / *
' 7 . >.
штШ
ш т
mШ т
Л *
« / V . y
*
w J h
Х Я в і Г Ү
Л
І
л
п
н
•
Л
Microsoft*
Intern*
■
Information Server
Installation and Administration
Guide
How to Navigate the Fro duct Documentaliga
437
Создание броузера
и
наконец, последняя процедура вызывает процедуру cboAddress Click в случае, если пользователь выберет элемент
списка с помощью клавиатуры и нажмет клавишу [Enter].
Таблица 8.3. Управляющие элементы и их свойства
в прим ере програм м ы
____________
I Объект
I ,
I
'‘
I
I"
I
_____________________ —
—
I Свойство
Значение______
I Name
frmBrowser
~ I Caption
I
I
Z
1
1 BorderStyle
Ваш онлайновый
контакт с нами
1- Fixed Single
I MaxButton_____________ False___________
I KHinRnttnn
I False
WebBrowser
Name
brwWebBrowser
Frame
Name
fraControl______
BorderStyle
Q-None_________
Name
cmdHome
Caption
Home__________
Picture
(Значок)_______
CommandButton
1-Graphical
ComboBox
I Name_______________ I cboAddress-----I sty|e
CommandButton
Name
| Caption
CommandButton
I 2-Dropdown List
cmdGoRegister~
j Регистр-______
I Picture
(Рисунок)
Style
j 1-Graphical
Name
1 cmdForward
Свойство
Значение
Caption
Вперед
DisabledPicture
(Значок)
Picture
(Значок)
1-Graphical
CommandButton
Name
cmdStop
Caption
Стоп
DisabledPicture
(Значок)
Picture
(Значок)
И -Graphical
CommandButton
Name
[ cmdBack
Caption
I Назад
DisabledPicture
(Значок)
Picture
(Значок)
1-Graphical
CommandButton
8.2
Name
cmdGoNew
Caption
Новый
Picture
(Рисунок)
1-Graphical
CommandButton
Name
cmdGoSupport
Caption
Поддержка
Picture
(Рисунок)
1-Graphical
Label
Name
IblAddress
Свойство
Значение
Caption
Name
StatusBar
sbrStatusBar
2-vbAlignBottom
1-sbrSimple
Исходный текст
Option Explicit
Private
Private
Private
Private
strStartAddress As String
strSupportAddress As String
strRegistrAddress As String
strNewAddress As String
Private Sub GetAddressO
J H lf
strStartAddress = "file://C:\TESTAG\INDEX.HTM
strSupTOrtAddress = "file://C:\TESTAG\SUPTORT.HTM"
S S K t r f t d d r e s s = "file: / /С : \TESTAG\REG ISTER.HTM"
Itr SwAddress = "file://C:\TESTAG\NEW.HTM"
End Sub
Private Sub GGoto(Address As String)
brwWebBrowser.Navigate Address
End Sub
Private Sub brwBrowser CommandStateChange(ByVal
Coimand As Long, ByVal Enable .
As Boolean)
Select Case Command
Case CSCJJAVIGATEBACK
crodBack.Enabled == Enable
Case CSC_NAVIGATEFORWARD
cmdForward.Enabled = Enable
End Select
End Sub
440
Создание броузера
Private Sub brwWebBrowser DownLoadBegin()
cmdStop.Enabled = True
End Sub
Private Sub cmdBack_Click()
On Error Resume Next
brwWebBrowser.GoBack
End Sub
Sub cmdForward__Click ()
On Error Resume Next
brwWebBrowser.GoForward
End Sub
Sub cmdGoNew__Click ()
On Error Resume Next
GGoto strNewAddress
End Sub
Private Sub cmdGoRegister C l i c k ()
On Error Resume Next
GGoto strRegisterAddress
End Sub
Private Sub cmdGoSupport C l i c k ()
On Error Resume Next""*
GGoto strSupportAddress
End Sub
Sub cmdHome_Click()
On Error Resume Next
GGoto strStartAddress
End Sub
Private Sub cmdStop__Click ()
On Error Resume Next
brwWebBrowser.Stop
End Sub
Создание б р о у з е р а _________________________________________
Private Sub Form_Load()
On Error Resume Next
GetAddress
GGoTo strStartAddress
End Sub
Private Sub brwWebBrowserJDownLoadComplete()
cmdStop.Enabled = False
sbrStatusBar.SimpleText j
brwWebBrowser.LocationName
End Sub
Private Sub brwWebBrowser_NavigateComplete(ByVal _
URL As String)
sbrStatusBar.SimpleText = "Загружено из:
_
SbrwWebBrowser.LocationName
With cboAddress
.Addltem brwWebBrowser.LocationURL, 0
.Listlndex — 0
If .ListCount > 10 Then
.Remove Item 10
find I f
End With
Private Sub cboAddress_Click()
GGoTo cboAddress.Text
End Sub
Private Sub cboAddress_Click()
On Error Resume Next
If KeyAscii = vbKeyReturn Then
cboAddress_C1ick
End If
End Sub
442
Internet Explorer: «дистанционное управление»
8.3. Internet Explorer: «дистанционное
управление»
Еще один способ задействовать функциональные возможности In­
ternet Explorer в программе на языке Visual Basic состоит в использо­
вании своего рода «пульта дистанционного управления". Программа
может управлять Ехр1огег’ом, вызывая его методы и обрабатывая его
события (вот она, сила объектной модели!). Чтобы технология по­
добного управления стала понятной для вас, в этом разделе будет
рассмотрен пример небольшой программы, предназначенной для
дистанционного управления броузером Internet Explorer. Используя
эту технологию, вы можете, например, написать программу, контро­
лирующую действия пользователя Internet Explorer. Скажем подоб*РЗММа МОГЛа бы просматривать адрес, по которому обраS f o a S L к И ПРГ ИМЭТЬ решение ° его Допустимости. Таким
образом можно было бы ограничить доступ к некоторым Web-стоаБрат не дРемлет!)- Конечно, возможности Internet
Explorer можно не только ограничивать, но и расширять.
Пример
Данный пример показывает, каким образом Visual Basic-nDoграмма может реагировать на события Internet Explorer и переГ х аГ “Г ° ШНДЫ' Вначале'
о с т а н о в и т ^ „а „еш ?оФаммы
ах' касающихся реализации примера прот Г ь Г й Ч! Г аГ Ь' необхо£ имо предпринять один подготови­
тельный шаг. Поскольку обращение к Internet Explorer будет
д и Г = ТГ ВРа-МКаХОбъе^ ой модели' необходимо снабссылкой на соответствующую библиотеку типов
Выберите для этого пункт Microsoft Internet Controls в диало­
ге References (меню Project).
вдиало
н ы Г Л п к Е а кптппі?АеРЖИТ «анель Управления И навигационtlrn o tp f
п Р е способны передавать команды для In­
ternet Explorer. Панель управления позволяет также задавать Ы
» ^ Г , аТЬ) «еКУЩИЙ URL-W « o , используемый б р о у э е ^ и Этот
адрес отображается также в окне экземпляра Internet Explorer
с которым связана панель управления.
txpiorer,
Код данного примера во многом схож с кодом предыдущего.
Однако есть и существенные различия, на которые следует
обратить внимание.
Уже упоминалась необходимость включить в проект ссылку на
тип InternetExplorer. Эта ссылка делает возможным раннее
связывание объекта и позволяет создать объект типа Inte rn e tE xp lo re r уже ------------■
переменную этого типа. В случае позднего связывания (если
бы использовалась переменная типа O bject) объект был бь
создан в период выполнения программы, что влечет за собой
ряд сложностей в обращении с ним. Кроме всего пРоч®го,
объявление типа InternetExplorer делает возможной обработку событий объекта этого типа.
В общем разделе модуля объявлена перемеиная ™па Inэкз емтляр °о бъе кта* данного типа, с ко то р ьім и б уд е ти м е ть
дело программа. Зарезервированное слово WithEvents озна
чает, что события объекта должны быть доступными для про
I р іЛ ІҮІ •
—- 'могут
- ----- S
V *- '
В процедуре Form_Load, собственно, и создается экземпляр
InternetExplorer. Первоначально он невидим, но делается ви­
димым с помощью второй строки кода процедуры.
Процедура cm dRefresh.Clickвыполняется по
те кш ую страницу (существует также второй д о и о т . * ■- метода, Refresh2, позволяющий задать степень обновлен
страницы). Процедура cmdSearch_Click вып° ^ ^ с^ з ^ гсН'
ку на кнопке П оиск и осуществляет поиск методом GoSearch.
Процедура Form Unload выполняется при закрытии окна программы^ее задача - завершить при этом выполнение Internet
Explorer.
Процедура cmdHome.Click вызывает метод GoHome, что влечет переход IE в исходное состояние.
Обратите внимание на то, что события ^te rn e t ^ p lo re r, кото­
рые обрабатываются процедурами данной профаммы явля_
ются в сущности, событиями экземпляра переменной ie tx
^
____________ Internet Explorer: «дистанционное управление»
plorer, которая была объявлена с использованием зарезерви­
рованного слова W ithEvents.
■
Наконец, если пользователь закроет окно Internet Explorer
произойдет его событие Q u it и благодаря процедуре ieExplorer_Quit программа завершится.
% Дистанциомн
упроолекие Internet Exploi
jW ATM FN N ETD O CSH TM
MInternet
icrosoft*,
Installation and Administration Guide
Таблица
щ ш т
8.3
Объект
Управляющие элементы и их свойства
в примере програм м ы
Свойство
[Name
Значение
frmMain
Caption
Дистанционное управление
Internet Explorer
Icon
(Значок)
Max Button
False
MinButton
False
Объект
Свойство
Значение
CommandButton
Name
cmdRefresh
Caption
Обновление
Picture
(Рисунок)
1-Graphical
CommandButton
Name
cmdSearch
Caption
Поиск
Picture
( Рисунок)
1-Graphical
CommandButton
Name
cmdBack
Caption______
Назад
DisabledPicture
j (Значок)
(Значок)
Picture
1-Graphical
CommandButton
cmdStop
Name
I V ^opuui 1
1
(Значок)_________ ___________ I
1 DisabledPicture
CommandButton
1
j Picture___________1 (Значок)
1-Graphical
_____
J
I Style
—-1-—
——
■#
cm
d
Forward__________
______
1
1 Name
_______ _
Caption
--w Б л -■.
1 DisabledPicture
_
Вперед_________ ___________ 1
(Значок)_________ ___________ I
| Picture___________ ( З н а ч о к ) __________ 1
1-Graphical_____
1 Style
I
8.3
- 46
_____________ Internet Explorer: «дистанционное управление»
Объект
Свойство
Значение
ComboBox
Name
cboAddress
2-Dropdown List
CommandButton
Name
cmdHome
Caption
Home
Picture
(Значок)
1-Graphical
Label
Name
IblAddress
Caption
Исходный текст
Option Explicit
Dim WithEvents ieExplorer As InternetExplorer
Private Sub cmdRefresh_Click()
ieExplorer.Refresh
End Sub
—
---- -_I!
Private Sub cmdSearch_Click()
ieExplorer.GoSearch
End Sub
Private Sub FormJLoad()
Set ieExplorer = New InternetExplorer
ieExplorer.Visible = True
End Sub
Private Sub Form_Unload (Cancel As Integer)
ieExplorer.Quit
End Sub
Internet Explorer, «дистанционное управление»
447
Private Sub ieExplorer_DownloadBegin()
cmdStop.Enabled = True
End Sub
\
Private Sub cmdBack_C l i c k ()
ieExplorer.GoBack
End Sub
Private Sub cmdForward__Click ()
ieExplorer.GoForward
End Sub
Private Sub cmdHome_Click ()
ieExplorer.GoHome
End Sub
Private Sub cmdStop_Cli ck()
ieExplorer.Stop
End Sub
P r i v a t e Sub i e E x p l o r e r _ D o w n l o a d C o m p l e t e ()
cmdStop.Enabled * False
End Sub
Private Sub i e E x p l o r e r _ N a v i g a t e C o m p l e t e (ByVal URL _
As String)
With cboAddress
|
0
.Addltem ieExplorer.LocationURL, 0
.Listlndex = 0
If .ListCount > 10 Then
.RemoveItem 10
End If
End With
End Sub
Private Sub cboAddress_Click()
ieExplorer.Navigate cboAddress.Text
End Sub
448
FTP-клиент
Private Sub cboAddress__KeyPress(KeyAscii As Integer)
On Error Resume Next
If KeyAscii = vbKeyReturn Then
cboAddr e s s__Click
End I f
End Sub
Private Sub ieExplorer__CommandStateChange (ByVal _
Command As Long, ByVal Enable _
As Boolean)
Select Case Command
Case СSC_NAVIGATEВАСК
cmdBack.Enabled = Enable
Case С S C__NA VI GAT E FORWARD
cmdForward.Enabled = Enable
End Select
End Sub
Private Sub ieExplorer_Quit(Cancel As Boolean)
Unload Me
End
End Sub
«
8.4. FTP-клиент
Наряду с протоколом HTTP протокол FTP является одним из наи­
более широко используемых в среде Internet. Visual Basic распо­
лагает управляющим элементом Internet Transfer (Inet), который
позволяет реализовать протокол передачи файлов FTP без осо­
бых усилий. Преимущество использования управляющего эле­
мента состоит в том, что отпадает необходимость в знании дета­
лей протокола и программист может сосредоточиться на тех
функциях программы, ради которых она создается. Пример про­
граммы, к которому мы перейдем ниже, представляет собой про­
стейшую реализацию ҒТР-клиента.
FTP-клиент
Пример
'
_____л
■
ф
Данный пример призван показать методику использования управляющего элемента M ic ro s o ft In te rn e t T ransfer (Inet) при
создании FTP-клиента.
■ Для работы над проектом необходимо с помощью диалога
Com ponents включить в состав коллекции инструментов дополнительные элементы:
• M icrosoft Common Dialog Control 5-0
• M icrosoft Internet Transfer Control 5.0
• M ic ro s o ft W indows Common C ontrols 5 .0
■ Для задания URL-адреса использовано текстовое поле txtURL.
Управляющий элемент In te rn e t T ransfer (Inet) производит
поиск по заданному адресу и отображает структуру каталогов
в поле IblD irectory, при этом информация о содержимом ка­
талога отображается в поле IblC ontents. Поле Ib lD ire cto ry по­
зволяет ввести имя каталога, который необходимо открыть,
или имя файла, который необходимо получить от ҒТР-сервера
и записать на свой локальный диск. При записи полученного
файла будет использован стандартный диалог Сохранение
файла. Текущее состояние программы отображается с помо­
щью надписей в панели состояния sbrlnfo.
■ Теперь перейдем к собственно коду программы. Процедура
DiskFile служит для записи полученного от ҒТР-сервера файла
на локальный диск. В ней объявлены несколько переменных,
необходимых для создания дискового файла. Для получения
имени файла и имени каталога, где файл должен быть создан,
используется общий диалог cdlSave (метод ShowSave). После
того как пользователь определит полное имя файла, наступает
чеоед метода OpenURL управляющего элемента icFTP, кото­
рому в качестве параметров передается содержимое его свой­
ства URL и имя каталога из поля txtD ire cto ry. Содержимое полчченного от сервера файла помещается в строковую перемен­
ную strTemp, а затем записывается на диск с помощью опера­
торов Open и Put. В качестве полного имени нового файла
используется строка, полученная ранее посредством общего
диалога cdlSave.
IS Заказ 3337
450
FTP-клиент
Следующая процедура обрабатывает событие StateChanged
элемента Internet Transfer (Inet). Это событие происходит
при изменении состояния объекта icFTP. Конкретную инфор­
мацию о состоянии управляющего элемента несет параметр
State. С помощью конструкции Select Case значение парамет­
ра анализируется и предпринимаются необходимые действия
(далее следует перечисление возможных значений параметра
State и комментарии к ним):
• icE rror. Если параметр State окажется равным данной име­
нованной константе, то это будет означать, что при попытке
получить файл от ҒТР-сервера произошла ошибка. Код и
описание ошибки при этом будут помещены в панель со­
стояния.
• icResolvingHost, icRequesting, icR equestSent — любое из
этих трех значений подразумевает, что программа находит­
ся в состоянии обмена с ҒТР-сервером, что и отображается
надписью в панели состояния.
• icReceivingResponse, icResponseReceived. Эти значения
соответствуют ожиданию ответа на переданный запрос.
• icResponseCom pleted. Как только процесс получения
файла завершится, параметр State примет значение icResponseCompleted, что повлечет за собой вызов метода
GetChunk и присваивание возвращенного им значения
переменной strTemp. Если значением этой переменной ока­
жутся символы перевода строки, то будет заново активизи­
рован таймер. В противном случае содержимое переменной
strTemp будет передано в текстовое поле txtC ontents.
• icC onnecting, icConnected. Эти значения параметра State
свидетельствуют о том, что соединение с ҒТР-сервером
происходит или завершено. В обоих случаях в панель со­
стояния помещается соответствующая надпись.
Процедура обработки событий таймера вызывается через
каждые 500 миллисекунд (пока таймер включен). При этом
проверяется значение свойства S tillE xecuting. Если оно ока­
зывается равным False, то таймер отключается и следует
вызов процедуры сохранения полученного файла.
ҒТР-клиент
_________ -_________*51
■
Следующая процедура обрабатывает нажатие клавиши [Enter]
в текстовом поле txtURL. В этом случае содержимое поля
передается в свойство URL элемента типа Internet Transfer
(Inet), а пустая строка, сопровождаемая нажатием клавиши
[Enter], — в текстовое поле txtD ire cto ry.
■ При этом срабатывает процедура текстового поля txtD irec­
tory, которая, задав метку перехода по ошибке, пытается ус­
тановить соединение с заданным URL-адресом.
Примечание
■
Предложенный пример представляет собой простейший ва­
риант ҒТР-клиента. Безусловно, его можно существенно ус­
ложнить, пользуясь штатными средствами Visual Basic.
Можно, например, реализовать список файлов в стиле Про­
водника Windows. Можно интегрировать в программу техно­
логию Drag&Drop, как и многие другие возможности — в
любом случае программист будет избавлен от кропотливой и
утомительной работы по реализации протокола передачи
файлов, поскольку управляющий элемент Internet Transfer
(Inet) уже способен решать такого рода задачи.
ҒГР-клиент
452
Таблица 8.5. Управляющие элементы и и х свойства
в прим ере програм м ы
__________г?
| Объект
Form
I Свойство______________Значение
j Name__________________frm M ain
I BorderStyle
1-Fixed Single
Caption
FTP-клиент
Icon
(Значок)
MaxButton
False
CommonDialog
Name
cdlSave
TextBox
Name
txtDirectory
(пустая строка)
TextBox
Name
txtContents
(пустая строка)
Locked
Multiline
StatusBar
Scroll Bars
2-Vertical
Name
sbrlnfo
2-vbAlignBottom
1-sbrSimple
TextBox
Name
txtURL
(пустая строка)
Timer
Name
icFTP__________
Name
tmrTimer
False
FTP-клиент
Свойство
Объект
Значение
Interval
Name
Menu (H)
Menu (I)
Caption
Каталог:
Name
IblContents
Caption
Содержимое
каталога:
Name
IblAddress
Caption
Адрес:
Name
mnuFile
Caption
Файл
Name
mnuExit
Caption
Выход
Исходный текст
Option Explicit
Private Sub DiskFileO
Dim iFileNum As Integer
Dim strTemp As String
Dim strFileName As String
cdlSave.ShowSave
strFileName = cdlSave.FileName
If strFileName <> "" Then
strTemp = icFTP.OpenURL(icFTP.URL _
& txtDirectory.Text)
iFileNum = FreeFile()
Open strFileName For Binary As iFileNum _
Len “ Len(strTemp)
FTP-клиент
Put iFileNum, , strTemp
Close iFileNum
cdlSave.FileName = ""
End If
End Sub
j
Private Sub icFTP_StateChanged(ByVal State As Integer)
Select Case State
Case icError
sbrlnfo.SimpleText « ’’Ошибка FTP: " _
& icF T P .ResponseCode & ": " _
& icFTP.Responselnfo
Case icResolvingHost/ icRequesting, _
icRequestSent
sbrlnfo.SimpleText = "Поиск...”
Case icReceivingResponse, icResponseReceived
sbrlnfo.SimpleText * "Готово!”
Case icResponseCompleted
Dim strTemp As String
strTemp * icFTP.G e t C h u n k (1024)
If strTemp <> vbCrLf Then
txtContents.Text = strTemp
Else
tmrTimer.Enabled = True
End If
Case icConnecting, icConnected
sbrlnfo.SimpleText * "Соединение..."
End Select
End Sub
Private Sub mnuExit Click()
FTP-клиент
Unload Me
End
End Sub
Private Sub tmrTimer_Timer()
If Not icFTP.StillExecuting Then
tmrTimer.Enabled = False
DiskFile
End If
End Sub
Private Sub txtURLJCeyPress(KeyAscii As Integer)
If KeyAscii Ш vbKeyReturn Then
KeyAscii = 0
icFTP.URL В txtURL.Text
_ ft If
txtDirectory-Text =
txtDirectory__KeyPressed (vbKeyReturn)
End If
End Sub
Private Sub txtDirectory__KeyPressed (KeyAscii As
Integer)
If KeyAscii = vbKeyReturn Then
KeyAscii - 0
On Error Goto errFTP
icFTP.Execute icFTP.URL/ "DIR " __
& txtDirectory.Text & " /* ”
errFTP:
sbrInfo.SimpleText - "Ошибка: " &_
Err.Number & ": " & E r r .Description
End If
Bnd Sub
Д5 0
Другие возможности
8.5. Другие возможности
Возможности Visual Basic не ограничиваются приведенными при­
мерами. Есть много других путей, которыми Visual Basic-програм­
ма способна взаимодействовать со средой Internet — от объектов
OLE-Automation до программирования протоколов Internet на
«низком» уровне. В следующем ниже кратком обзоре рассмотре­
ны основные возможности по отношению к Internet, которыми
может воспользоваться программист, работающий с пакетом Vis­
ual Basic.
,
..
Обзор
Ж Электронная почта e-mail представляет собой одну из важных
составных частей Internet. Программы на языке Visual Basic
могут использовать два дополнительных управляющих эле­
мента, реализующих относительно несложный доступ к функ­
циональным возможностям e-mail. Эти элементы обеспечива­
ют т.н. MAPI-интерфейс Windows, который представляет
собой стандартный набор функций, предназначенный для
коммуникации посредством e-mail. MAPI-элементы инкапсу­
лируют в себе все необходимые средства для взаимодействия
с электронной почтой. Элемент MAPISession обеспечивает
открытие и закрытие сеанса связи, а управляющий элемент
MAPI Messages предназначен непосредственно для посылки
и получения сообщений.
■ Другой способ доступа к системе электронной почты e-mail —
прямое обращение к DLL-библиотеке MAPI. Для этого можно
использовать API-функции Windows, ссылки на которые содер­
жатся в библиотеке типов MDISP32.TLB. Такой способ досту­
па к MAPI-функциям отличается большей гибкостью и более
широкими возможностями, однако требует и более детально­
го понимания технологии MAPI. Интересующиеся данным во­
просом могут найти подробную информацию на Web-страни­
це http://w w w .m icrosoft.com /m sdn.
■ Для реализации протоколов TCP и UDP предусмотрен управ­
ляющий элемент W insock, чьи свойства, методы и события
Другие возможности
457
позволяют получить доступ к двум вышеназванным протоко­
лам. Элемент дает возможность реализовать как клиент, так
и сервер этих протоколов.
Одна из новаций версии 5.0 — объект H yperlink, предназна­
ченный для навигации в сети Internet. Его можно включить в
состав проекта как на правах дополнительного ActiveX-элемента-контейнера (поддерживаемого Internet Explorer), так и
в качестве ActiveX-документа. В случае ActiveX-элемента до­
ступны три метода, позволяющие осуществлять навигацию по
истории маршрута Internet Explorer: метод N avigate выполня­
ет переход по заданному адресу, методы G oBack и GoForw ard перемещают «точку зрения» броузера соответственно
назад и вперед по истории маршрута.
Программист, работающий с приложениями для среды In­
ternet рано или поздно столкнется с необходимостью в мак­
роязыке среды. Существует несколько подходящихдоя этой
цели макроязыков, одним из которых является VBScript Соб­
ственно говоря, VBScript представляет собой подмножество
языка Visual Basic, предназначенное для программирования
HTML-страниц. Такие программы (или, точнее, сценари )
собен интерпретировать Internet E x P lo r e r ( n o m e p x K a VBScnpt
другими броузерами существенно слабее). Использование
языка VBScript открывает одну интересную возможность в
плане технологии ActiveX. Он позволяет интегрировать 8
HTML-страницу ActiveX-элемент, что открывает
в03'
можности в деле создания интерактивных HTML-страниц.
Базы д а н н ы х
Базы данных играют важную роль в современном мире. Идет ли
речь о простейшей программе-записной книжке или о гигантской
справочной системе, используемой большой корпорацией, все
это — базы данных. Система программирования Visual Basic
предоставляет целый спектр разнообразных возможностей для
работы с базами данных.
Обзор. Базы д анны х и Visual Bask
Ш Первой моделью представления данных, использованной в
программировании, было представление всех требуемых дан­
ных в виде одной таблицы. С этим подходом связано немало
трудностей— например, внесение даже небольших изменений
в структуру таблицы требовало значительных издержек. Другая
проблема: представьте себе, например, таблицу для хранения
записей о заказах, которые делают клиенты некоторой фирмы.
Предположим, для каждого заказа необходимо указать имя и
адрес клиента. Что, если один и тот же клиент сделает много
заказов? Проблема не только в том, что его имя и адрес необ­
ходимо будет хранить во многих экземплярах. В разных запи­
сях, относящихся к одному и тому же клиенту, его адрес и имя
могут быть указаны неодинаково. Решением множества про­
блем такого рода явилась реляционная модель представления
данных. Согласно реляционной модели база данных представ­
ляется как совокупность таблиц. В этом случае приведенный
выше пример будет выглядеть по-другому: данные о клиентах
должны содержаться в одной таблице, а данные о заказах — в
другой. При этом запись в таблице заказов содержит ссылку на
запись в таблице клиентов. Большинство современных баз
данных основано именно на таком принципе.
Система управления базами данных, используемая в програм­
мах на языке Visual Basic, используется также пакетом Access
и другими программными продуктами корпорации Microsoft.
Она состоит из двух частей:
• Программный интерф ейс системы управления базами дан­
ных, который предоставляет приложениям доступ к данным,
их форматам и различным операциям над ними.
• J e tE n g in e — «Машина данных», которая представляет собой
совокупность ф ункций, непосредственно выполняющих опе­
рации с базами данных.
Visual Basic предоставляет широкую поддержку разработчику
приложений, имеющему дело с базами данных. Но уровень
этой поддержки зависит от варианта (издания) Visual Basic. Ос­
новные возможности присутствуют во всех изданиях. Сюда от­
носятся управляющий элемент Data и стандартные элементы,
которые могут быть через него связаны с базой данных. Кроме
того сущ ествует дополнительный управляющий элемент типа
« с е т і с а данных» — DBGrid, позволяющий представить данные в
форме таблицы и осуществлять над ними разнообразные ма­
нипуляции. Наконец, в Visual Basic определены объекты досту­
па к данным — DАО (Data Access Objects), чьи методы позволя­
ют оперировать данными в программном коде.
Особенно сильную комбинацию представляет собой совм ест­
ное применение пакетов Microsoft Access и Visual Basic. Среда
Access позволяет с легкостью создавать структуры данны х.м оскольку Visual Basic использует ту же «машину данных» (JetEnaine) что и Access, программы на языке Visual Basic без всяких
проблем могут оперировать базами данных, созданными в
среде Access. Д ругой вариант: в Access можно очень Удобным
визуальным способом сконструировать сложное SQL-вы раже- |
ние, а затем перенести его через буфер обмена Windows в окно
кода Visual Basic и использовать в коде программы. Такой путь
не только облегчает создание сложных ЗО Ьвыражении но и
значительно снижает вероятность ош ибок. Конечно возможен
и обратный путь — SQL-выражение из программы Visual Basic
можно перенести в среду Microsoft Access.
z " ___________________
Базы данных
Таблица 9.1. Основные понятия баз д анны х
Пояснение
База данных] Совокупность таблиц, содержащих данные.
Совокупность записей, каждая из которых являе
набором полей. Все записи в пределах таблицы
имеют одинаковую структуру.
Запись
Habop полей, в каждом из коте
определенного типа и размера.
Поле
Элементарная структура в базе данных. Поле
представляет собой участок памяти, предназначенный
для хранения данных определенного типа и
определенного размера.
Запрос
Запрос (SQL-запрос) представляет собой выражение
на языке SQL (Structured Query Language — Язык
структурированных запросов), выделяющее некотор\
совокупность данных из таблицы (таблиц) на основ*
некоторого сочетания критериев.
Recordset
Набор записей (может быть результатом запроса).
Представляет собой некоторую совокупность зал
выделенную из одной или нескольких таблиц. К
объекту Recordset можно обращаться так же, как
физической таблице.
Таблица 9.2. Разновидности объекта Recordset
Термин
Пояснение
Table
Граничный случай объекта Recordset, когда набор
записей просто соответствует физической таблице.
Dynaset
Разновидность объекта Recordset. Представляет собой
динамический набор записей, имеющих своим
источником одну или несколько физических таблиц,
при этом данные доступны для редактирования а
количество записей
в наборе может меняться в реальном времени.
Таблица 9.3. Типы данны х, поддерживаемы х JetEngine
I Имя типа
I Text
J Memo
|
Вид данных___________ 1 Область значений
до 255 символов_________ 1
Строка______________
[Byte_______
Целое число
1Integer
I long
I
| от 0 до 255
от
-32768
до
32767
Целое число______________1
I Целое число
1Single
j
a Double
I Currency
1Boolean
1 OLE
Дробное число___________ от -9.0Е14 до 9.0Е14
Логическое значение
1 Двоичные данные
___
от -2147483648
I
до 2147483647____________ 1
Дробное число___________ I от -3.4Е38 до 3.4Е38______ I
I
Дробное число________
'I от -1.8D308 до 1.8D308
| Date_______ 1 Дата и время
I Binary
|
____________ J
до
1.2
гигабайт
символов
Строка___________________ 1
OLE-объект
True или False________
от 1.01.100 до 31.12.9999
1
до 1.2 гигабайт
|
до 1.2 гигабайт
*62
Управляющий элемент Data
9.1. Управляющий элемент Data
Управляющий элемент Data (Данные) значительно упрощает до­
ступ к базам данных. Он позволяет связать визуальные элементы,
размещенные на форме, с таблицей или SQL-запросом из базы
данных. При этом элемент D ata обеспечивает возможность на­
вигации по данным — щелчками на его кнопках можно переме­
щать указатель текущей записи по набору. Область между кноп­
ками используется для размещения надписи (свойство C aption).
Свойства, методы и события управляющего элемента Data
предоставляют широкие возможности по манипуляциям с базой
данных, к которой элемент «подключен».
Пример
--
Г..
В следующем примере элемент Data использован для создания
простейшего приложения, предназначенного для манипуляций с
записями в базе данных (в качестве примера использована база
данных, содержащая сведения об адресах и телефонах — своего
рода личная записная книжка).
■ Перед тем как перейти к описанию исходного текста програм­
мы, необходимо упомянуть о некоторых свойствах элементов,
использованных в примере.
• Многие управляющие элементы обладают свойствами
D ataS ource и Data Field, Первое из них позволяет связать
элемент с элементом типа Data, а второе определяет поле
таблицы или набора, полученного как результат SQL-запроса, содержимое которого должен отображать (и давать ре­
дактировать) данный элемент. Например, если связать
текстовое поле TextB ox с элементом типа D ata с помощью
свойства D ataS ource и выбрать в свойстве текстового поля
одно из текстовых полей таблицы, к которой «подключен»
элемент Data, то содержимое поля в текущей записи (ко­
торая определяется положением указателя элемента Data)
будет отображаться в элементе TextB ox и может быть модифицировано с его помощью.
Управляющий элемент Data_____ ___________________ _________
• Свойство Tablndex определяет порядок перемещения фо-
куса клавиатуры. Если, например, это свойство некоторого
элемента на форме имеет значение 3, то элемент при на­
жатиях клавиши [Tab] получит фокус клавиатуры после эле­
мента, чье свойство T ablndex имеет значение 2. Правильно
выбирая значения свойства Tablndex для всех элементов
на форме, которые предполагают ввод данных, можно за­
метно облегчить жизнь пользователя.
• Xепөрь перейдем к свойствам самого элемента Data. Пер
вое из них, заслуживающее упоминания, — свойство Con­
nect. Его значение выбирает формат базы данных, к кото­
рой предстоит подключить элемент Data. В примере ис­
пользовано значение по умолчанию (Access).
• Свойство DatabaseNam e должно содержать имя базы дан­
ных. В случае Access — это просто полное имя файла с рас­
ширением MDB, где содержится база данных. Для базы дан­
ных типа dBase свойство DatabaseNam e должно содержать
имя каталога с DBF-файлами базы.
• Значение свойства Exclusive определяет режим доступа к
базе данных. В случае Exclusive = True имеет место режим
исключительного доступа, когда другие приложения не смо­
гут обратиться к «занятой» базе данных. При Exclusive False база данных будет доступна также и для других при­
ложений.
• С помощью свойства Readonly (присвоив ему значение
True) можно запретить модификацию данных, при этом поля
текущей записи будут доступны только для чтения.
• Свойство R ecordSetType отвечает за тип набора записей,
который может быть задан в свойстве R ecordset. Можно
выбрать один из трех типов — Table, Dynaset и Snapshot.
• Значением свойства R ecordset является объект типа Re­
cordset, представляющий некоторый абстрактный наоор
записей, к которому, собственно, и обеспечивает доступ
элемент Data. Это может быть просто физически сущест­
вующая таблица или результат SQL-запроса (тоже таблица,
но полученная как комбинация полей и записеи нескольких
464
Управляющ ий элемент Data
физических таблиц в соответствии с запросом) или объект
типа Q ueryD ef. В примере использован SQL-запрос (select
* fro m [A ddress]), возвращающий весь набор записей из
таблицы с именем A ddress.
Ш Перейдем теперь к исходному тексту программы. Начинается
он с конца, то есть с процедуры-обработчика щелчка на кнопке
Выход. Она выгружает форму с помощью метода Unload. При
этом произойдет событие Q ueryU nload, обработчик которого
предпримет необходимые действия по корректному выходу из
программы.
ТгГ
^
'j .
Ш Следующая процедура выполняется по щелчку на кнопке Уда­
лить, и ее задача заключается в удалении текущей записи. У
пользователя при этом запрашивается подтверждение («Уда­
лить текущую запись?»). В случае положительного ответа, ко­
торому соответствует возвращенное функцией MsgBox значе­
ние vbYes, будут вызваны методы D elete и M oveN ext объекта
R ecordset, который содержится в одноименном свойстве уп­
равляющего элемента Data. В результате текущая запись
будет удалена, а указатель передвинется на следующую за­
пись. Проверка значения свойства EOF позволяет распознать
ситуацию, когда достигнут конец файла (EOF = True). В этом
случае с помощью метода M oveLast указатель будет помещен
на последнюю существующую запись.
Ш Сходным образом устроена процедура cmdNew_Click, выпол­
няющаяся по щелчку на кнопке Новая за пи сь — она также на­
прямую обращается к методам объекта R ecordset. Для со­
здания новой записи вызывается метод AddNew, затем с по­
мощью метода U pdateR ecord элемента datD atabase создан­
ная в объекте R e cordset запись физически записывается в
файл базы данных. И, наконец, в свойство B ookm ark (Заклад­
ка) помещается ссылка на последнюю модифицированную за­
пись (свойство LastM odified ), которой, собственно и является
запись, только что созданная методом AddNew.
■ Процедура datDatabase_Error обрабатывает ошибки доступа к
данным (соответствующие события генерируются автомати­
чески). Параметр D ataE rr несет информацию о виде ошибки,
Управляющий элемент Data
465
которая посредством функций Еггог$ и M s q B o x д о в о д и т с я д о
сведения пользователя. В параметре Response процедура
передает дальше значение, определяющее дальнейшую об­
работку ошибки. Значение 0 соответствует отсутствию даль­
нейшей обработки.
■ Каждый раз, когда пользователь перемещает указатель теку­
щей записи посредством элемента Data, происходит событие
R eposition. Процедура его обработки состоит из двух шагов:
она корректирует надпись на элементе Data и обновляет эти­
кетку IblR ecordlnfo. Для отображения номера текущей записи
на элементе Data использовано значение, содержащееся в
свойстве A b so lu te P o sitio n объекта R ecordset.
Ш Событие V alidate происходит перед тем, как содержимое те­
кущей записи будет физически записано в файл базы данных.
В обработчик этого события можно поместить код, предпри­
нимающий определенные проверки. Например, можно предн]Адреса
:
Щ 'записн'ая
книжка
Ш
Запись:
Имя! ЩШа
Иванович
Иван
тш т
И ванов
.
ІПетрова. 22/12
Почтовый индекс
Г379351
Город
В ерхнеурю пинск
И и
Телефон:.
^ПНн
■VI
-
г Мобильный телефон:
1234567
Ш
7654321
I |Ц'ТГ|Г mmт р т і w i jH jw fT i
е-таН;
Ж
f|:JKmn@jvenych ru
iI f f i Ш ііІІР ГР Р Щ ТТ
I
.
I
Новая запись^Jj
жвш
> *Щ
mn
* д
а
в
д
« a v
Запись: 7
a iv . a
.‘ X
i .
Удалить
-г-
Выход
ж
1PRVEP
-»•■
" !
*
:
466
_______
Управляющий элемент Data
отвратить появление в базе данных записи, ключевые поля ко­
торой не заполнены пользователем. В нашем примере это
сделано с помощью оператора Action = vbDataActionCancel,
который отменяет выполнение операции записи в случае,
если в поле Name пользователь ничего не ввел. Функция Trim
удаляет ведущие и замыкающие пробелы, и если то, что ос­
талось, оказывается пустой строкой, то пользователь получит
предупреждение, а операция записи будет отменена.
Осталось рассмотреть процедуру Form_QueryUnload, которая
будет выполнена при закрытии окна программы, к какому бы
способу не прибег пользователь (в любом случае произойдет
событие Q ueryUnload). Задача процедуры заключается в вы­
даче запроса пользователю. Если пользователь передумает,
то с помощью параметра Cancel выгрузка формы будет отме­
нена, в противном случае оператор End завершит выполнение
программы.
Таблица
Form
TextBox
У правляю щ ие элем енты и и х свойства
в прим ере п р о гр а м м ы
Свойство
Значение
Name
frmMain
BorderStyle
1-Fixed Single
Caption
Адреса
Icon
(Значок)
MaxButton
False
MixButton
False
Name
txtEmail
DataSource
datDatabase
Data Field
Email
Tablndex
TextBox
Name
txtHandy
467
Управляю щ ий элем ент Data
Объект
Свойство
Значение
DataSource
datDatabase
DataField
Tablndex
TextBox
Name
txtPhone
DataSource
datDatabase
DataField
Phone
Tablndex
TextBox
Name
txtSurName
DataSource
datDatabase
DataField
SurName
Tablndex
TextBox
Name
txtCity
DataSource
datDatabase
DataField
Tablndex
I TextBox
j
Name______ ________ txtPostlndex______
DataSource__________ datDatabase________ I
DataField
Postlndex _______
I
Tablndex____________ 1 5
1 TextBox
Name_____
_________________________________
[txtStreet______
DataSource_______ __ datDatabase_________ _
1 DataField
Tablndex
| Street
14
9.1
46В___________
TextBox
Управляющий элемент Data
Свойство
Значение
Name
txtSecondName
DataSource
datDatabase
Data Field
SecondName
Tablndex
TextBox
Name
txtName
DataSource
datDatabase
Data Field
Name
Tablndex
Frame
Name
fraControl
(пустая строка)
CommandButton
Name
cmdExit
Caption
Выход
Tablndex
CommandButton
Name
cmdDelete
Caption
Удалить
Tablndex
CommandButton
Name
cm d New
Caption
Новая запись
Tablndex
Name
datDatabase
2-Bottom
Connect
DatabaseName
C:\TEST\ADDRESS.MDB
Управляющ ий элемент Data
______________________ ______ 469
Свойство
Значение
DefaultCursorType
O-DefaultCursor
DefaultType
2-UseJet
Exclusive
Readonly_______
RecordsetType
1-Dynaset___________
RecordSource
select * from [Address]
Name
IblRecordlnfo________
Caption________
Запись:_____________
Font
Courier
жирныи
Name
Caption
e-mail:_______ ___
Name
IblHandy
Caption
Мобильный телефон
Name
Label
Caption
Телефон:_______
Name
IblCity__________
Caption
Город:__________
Name
IblPostlndex_____
Caption
Почтовый индекс
Name
IblStreet
Caption
Улица
470
Управляющий элемент Data
Объект
Свойство
Label
Name
Значение
BackStyle
0 -Transparent
Caption
записная
Courier
жирныи
ForeColor
красный
Index
Label
Name
IblLogo
BackStyle
0-Transparent
Caption
Courier
жирныи
Label
ForeColor
белый
Name
IblLogo
BackStyle
0 -Transparent
Caption
книжка
Font
Courier New
жирныи
ForeColor
синии
471
Управляю щ ий элем ент Data
Объект
Свойство
Значение
Image
Name
imgLogo__________
Picture
(Точечный рисунок)
Stretch
True______________
Name
IblSurName________
Caption
Фамилия:_________
Name
IblSecondName
Caption
Отчество
Name
Menu (H)
Menu (I)
Caption
Имя
Name
mnuFile
Caption
Файл
Name
mnuExit
Caption
Выход
Исходный текст
Option Explicit
Private Sub cmdExit_jClick()
Unload Me
End Sub
Private Sub cmdDelete_Click()
If M s g B o x ("Удалить текущую запись?”, vbQuestion _
+ vbYesNo) = vbYes Then
4 7 2 _________
Управляющий элемент Data
With datDatabase.Recordset
.MoveNext
If .EOF Then MoveLast
End With
End If
End Sub
Private Sub cmdNew_Click()
With datDatabase
.Recordset.AddNew
.UpdateRecord
.Recordset.Bookmark = .Recordset.LastModified
End With
End Sub
Private Sub datDatabase_Error(DataErr As Integer,
Response As Integer)
~
MsgBox "Ошибка доступа к данным: "
& Error$(DataErr)
~
Response = 0
End Sub
Private Sub datDatabase__Reposition ()
lblRecordlnfo.Caption I "Запись: " &
txtName.Text & tf ft
& txtSecondName.Text
datDatabase.Caption = "Запись: " &
(datDatabase.Recordset.AbsolutePosition + 1)
End Sub
Private Sub datDatabase_Validate(Action As Integer,
__
.
Save As Integer)
If Trim(txtName.Text) = "" Then
MsgBox "Необходимо ввести имя!"
Action = vbDataActionCancel
End If
End Sub
473
Управляющ ий элемент Data
Private Sub Foriu_QueryUnload (Cancel As Integer, _
• 3
*
UnloadMode As Integer)
Dim iDumrny As Integer
1Dummy *
("Завершить работу?", vbYesNo _
+ vbQuestion + vbDefaultButton2)
MsgBox
Select Case iDumrny
Case vbYes
End
Case vbNo
Cancel - True
End Select
Л:
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
9.1.1. Мастер создания форм
Если вам требуется создать экранную форму для приложения, ра­
ботающего с некоторой уже существующей базой данных, то наи­
лучшим решением будет использование мастера создания экран­
ных форм для работы с базой данных - Data Form Wizard. Он по­
зволяет создать готовую к использованию форму, основываясь
на информации о структуре данных, извлеченной из базы.
Обзор. VB Data Form W izard
■
Этот мастер облетает и автоматизирует процесс создания
формы для приложения, имеющего дело с базой данных онечно, с созданной им заготовкой формы можно затем обра­
щаться, как и с любой другой формой. Она может служить ис­
ходным пунктом для разработки более сложного приложения.
474
Управляющий элемент Data
Чтобы воспользоваться услугами мастера, необходимо при
выборе типа добавляемой в проект формы (диалог Add Form,
открываемый одноименной командой меню P roject) выбрать
значок VB Data Form Wizard.
Существуют две разновидности экранных форм, которые
можно создать с помощью этого мастера. Первая из них
форма, предназначенная для доступа к одной таблице. В этом
случае мастер помещает на форму набор управляющих эле­
ментов для связи с полями таблицы. При этом возможны два
варианта (выбрать один из них можно на третьем шаге работы
мастера, установив переключатель в одно из двух положений):
• Single record. Одиночная запись. В этом случае на поверх­
ность формы будет помещен набор управляющих элемен­
тов, предоставляющих доступ к полям только одной, теку­
щ ей записи таблицы.
• Grid (Datasheet). Сетка данных позволяет отображать таб­
лицу в собственно табличной форме. При этом пользовате­
лю становятся доступны одновременно поля сразу несколь­
ких записей.
Третье положение переключателя, M aster/D etail, позволяет
создать другую разновидность приложения для работы с ба­
зами данных. В этом случае на форме будут представлены две
таблицы. Главная из них (Master) детализируется Detail-тәблицей. Если вернуться к примеру, использованному в начале
главы, то Master-таблица в базе данных, содержащей сведе­
ния о клиентах и заказах, будет содержать записи о клиентах
(точнее, эти сведения будут отображаться в области Masterтаблицы на форме — понятия Master и Detail относятся только
к представлению данных на форме, а не к реальному взаимо­
отношению таблиц в базе данных). При этом в области Detailтаблицы могут отображаться заказы «текущего» клиента.
Вообще говоря, в зависимости от выбранного типа представ­
ления данных на форме количество и набор шагов мастера
могут отличаться. Ниже приводится краткое описание типич­
ных шагов.
Управляющ ий элемент Data
47
После старта VB Data Form Wizard появляется диалог-приветствие, при этом установкой флажка Don’t show this dia­
log in the futu re можно исключить этот шаг при последую­
щих запусках мастера.
• Следующий диалог предлагает выбрать формат базы дан­
ных, для работы с которой предполагается создать экран­
ную форму (по умолчанию
Access).
• Диалог Database Name предназначен для выбора (кнопка
Browse) файла базы данных. Флажки Tables (Таблицы) и
Queries (Запросы) позволяют при этом задать возможные
источники наборов записей.
Далее следует шаг, на котором необходимо выбрать разно­
видность представления данных на форме (переключатель
Single record — Grid (Datasheet) — M aster/Detail).
Диалог RecordSource позволяет выбрать с помощью ком­
бинированного поля источник записей (таблицу или запрос)
для проектируемой формы. При этом в поле списка Available Reids отображается список доступных полей. Все они
или некоторые из них могут быть выбраны для отображения
на форме. Для этого необходимо перенести имена требуе
мых полей из левого списка в правый, используя командные
кнопки.
В случае если пользователь выбрал тип представления данных на форме - M aster/D etail, диалог RecordSource по­
явится на экране дважды - вначале для Master-тзблицы,
затем для Detail.
Следующий шаг мастера позволяет уточнить набор управ­
ляющих элементов, которые должны присутствовать
форме. Поля флажков управляют наличием кнопок Add (До
бавить запись), Delete (Удалить запись) и т.д.
Последний диалог предлагает пользователю уточнить имя
формы и принять решение о ее построении (щелчок на Fin-
ish).
Последняя глава представляет собой обзор свойств, методов и
событий объектов Visual Basic. Она также содержит обзор наибо­
лее важных объектов, как таковых. Все четыре раздела этой главы
построены одинаковым образом. Каждый параграф начинается с
имени свойства, события, метода или объекта, затем следует его
краткое описание. Обратите внимание— описание действительно
краткое, поскольку объем книги не позволяет привести скольконибудь подробные сведения о каждом из элементов. Целью дан­
ной главы является именно обзор свойств, методов и т.д. — от­
сюда читатель может понять, какое именно свойство (метод, со­
бытие) ему следует использовать в каждом конкретном случае. А
более детальную информацию, необходимую для практического
применения элемента, можно без труда получить в справочной
системе Visual Basic.
Примечание
Ш Описанные в этой главе свойства, методы, события и объекты
относятся к ядру языка Visiual Basic. Дополнительные управ­
ляющие элементы и объекты, предназначенные для расшире­
ния IDE, здесь не освещены.
10.1. Свойства
Этот раздел посвящен свойствам объектов Visual Basic.
Примечание
■
Описанными здесь свойствами обладают многие объекты,
при этом смысл и назначение каждого свойства неизменны у
всех объектов, им обладающих. Какие именно объекты под-
Свойства
477
держивают данное свойство — можно узнать в каталоге объ­
ектов, здесь же свойства описываются в большинстве случаев
безотносительно к объектам.
Access Keys. Содержит или позволяет задать строку симво­
лов, обозначающих клавиши доступа к объекту.
Action (OLE-контейнер). Содержит значение, определяющее
вид OLE-операции.
ActiveControl. Возвращает ссылку на активный в данный мо­
мент (обладающий фокусом) элемент.
ActiveForm. Возвращает ссылку на активную в данный момент
экранную форму.
Addins Возвращает коллекцию, которую Add-ln-угилиты
могут использовать для регистрации нового компонента в расширении объектной модели.
Align. Содержит и позволяет задать значение, определяющее
режим выравнивания объекта в окне формы.
Alianable. Содержит и позволяет задать значение, определяющее возможность выравнивания для данного объекта.
Alignm ent. Содержит и позволяет задать значение, опреде­
ляющее режим выравнивания текста или надписи, содержа­
щегося в ряде управляющих элементов.
Ambient. Возвращает объект Am bientProperties, содержа­
щий свойства окружения для элемента-контейнера.
Арр. Возвращает глобальный объект App (Application — при
ложение).
Аооеагапсе. Содержит и позволяет задать значение, опреде­
ляющее внешний вид элемента, используемого на форме или
МDi-форме на этапе визуального программирования.
I ApplsRunning. Возвращает значение, которое показывает,
выполняется ли приложение, создавшее объект, который находится в OLE-контейнере.
I Archive Hidden, Normal, System. Содержат и позволяют за­
дать значение, определяющее атрибуты файлов, которые ото
бражаются в списке файлов FileListBox.
478
Свойства
AsyncType. Определяет тип значения, возвращаемого свойст­
вом Value.
AutoActivate. Содержит и позволяет задать значение, с помо­
щью которого пользователь может активизировать объект, на­
ходящийся в OLE-контейнере.
AutoRedraw. Разрешает или запрещает автоматическое пере­
рисовывание результатов работы графических методов на по­
верхности формы или элемента PictureBox.
AutoShowChildren. Содержит и позволяет задать значение,
определяющее, должны ли автоматически становиться види­
мыми дочерние формы, принадлежащие данной MDI-форме.
AutoSize. Разрешает или запрещает автоматическое измене­
ние размеров элемента в соответствии с размерами его содер­
жимого.
:
\ *Щ Ы
AutoVerbMenu. Содержит и позволяет задать значение, опре­
деляющее возможность вызова контекстного меню с перечнем
возможных действий при работе с OLE-элементом.
BackColor, ForeColor. Задают цвета соответственно фона и
переднего плана объекта.
BackStyle. Определяет стиль фона объекта UserControl.
Bindable. Позволяет прочитать или задать значение свойства
Bindable, связанное с МетЬег-объектом.
BOFAction, EOFAction. Содержит и позволяет задать значе­
ние, определяющее вид действия, которое будет автоматичес­
ки предпринято при получении свойством BOF или EOF значе­
ния True (т. е. при попытке перейти на позицию до начала или
после конца файла).
Bold. Определяет наличие признака начертания «жирный» для
объекта Font.
BorderColor. Задает цвет обрамления.
BorderStyle. Задает стиль обрамления.
BorderW idth. Возвращает и позволяет задать значение, опре­
деляющее толщину линий обрамления.
Browsable. Содержит и позволяет задать атрибут Browsable
для МетЬег-объектов.
Cancel. Содержит и позволяет задать значение, определяю­
щее срабатывание командной кнопки (обычно это кнопка От­
мена) при нажатии клавиши [Esc].
CanGetFocus. Содержит и позволяет задать значение, опре­
деляющее возможность получения фокуса клавиатуры для уп­
равляющего элемента.
Caption. Содержит строковое значение, определяющее над­
пись на управляющем элементе или объекте.
Category. Содержит и позволяет задать значение атрибута
Category для МегпЬег-объектов.
Changed. Сигнализирует об изменении значения свойства на
странице свойств.
Charset. Определяет набор символов (кодовую страницу).
Для кириллицы Charset = 204.
Checked. Возвращает и позволяет задать значение, опреде­
ляющее наличие пометки (галочки) слева от пункта меню.
Class. Возвращает имя класса, к которому относится внед­
ренный объект.
Clipboard. Содержит объект типа Clipboard, позволяющий
получить доступ к буферу обмена Windows.
ClipControls. Определяет область действия графических ме­
тодов при событии Paint.
Col, Row. Определяют текущую клетку в сетке или таблице
данных.
ColorMode. Содержит и позволяет задать значение, опреде­
ляющее режим (цветной/черно-белый) принтера.
Cols, Rows. Определяют общее количество столбцов и строк
в сетке или сетке данных.
Columns. Определяет количество столбцов в списке.
Comments. Содержит строку комментария к выполняющемуся приложению.
CompanyName. Содержит имя производителя выполняющегося приложения.
480
Свойства
Connect. Возвращает и позволяет задать значение, опреде­
ляющее состояние соединения с Add-ln-утилитой.
ContainedControls. Содержит список управляющих элемен­
тов, помещенных пользователем на этапе визуального про­
граммирования в элемент-контейнер.
Container. Возвращает имя элемента-контейнера, в котором
находится данный управляющий элемент.
ContinuousScroll. Возвращает и позволяет задать значение,
разрешающее или запрещающее режим непрерывной про­
крутки .
ControlBox. Возвращает и позволяет задать значение, опре­
деляющее наличие в период выполнения программы меню уп­
равления окном в окне приложения.
C ontrolC ontainer. Разрешает или запрещает объекту содер­
жать в себе управляющие элементы, отличные от помещенных
туда на этапе визуального программирования.
C ontrols. Возвращает ссылку на коллекцию C ontrols (см.
ниже).
Copies. Определяет число копий документа, выводимого на
печать.
Count. Содержит число объектов в коллекции.
CurrentX, CurrentY. Содержат пару координат, на которых за­
вершилась работа графического метода или метода, выводя­
щего символы, который был вызван последним.
Data. Возвращает и позволяет задать код доступа к GDI-объекту или объекту в памяти, содержащему данные в заданном
формате.
Database. Содержит ссылку на объект типа Database, свя­
занный с элементом типа Data.
DatabaseName. Возвращает и позволяет задать полное имя
файла или каталога, содержащего базу данных, с которой свя­
зан или должен быть связан элемент типа Data.
DataBindings. Возвращает ссылку на коллекцию D ataBindings (см. ниже).
Свойства
■
■
■
■
■
■
■
■
■
■
■
■
■
■
481
DataChanged. Возвращает значение, свидетельствующее об
изменении содержимого элемента, связанного через элемент
Data с базой данных.
DataField. Определяет поле в наборе записей, которое должен
отображать данный элемент.
DataSource. Определяет имя элемента типа Data, через кото­
рый данный управляющий элемент связан с базой данных.
DataText. Возвращает строку, полученную от заданного объек­
та, или посылает строку заданному объекту.
Default. Разрешает или запрещает срабатывание командной
кнопки (обычно это кнопка ОК) по нажатию на клавишу [Enter].
DefaultBind. Возвращает и позволяет задать атрибут DeafaultBind для МетЬег-объектов.
DefaultCancel. Разрешает или запрещает использование уп­
равляющего элемента в качестве стандартной командной
кнопки.
DefaultCursorType (элемент Data). Определяет тип указателя
(курсора), используемого элементом типа Data.
DefaultType (элемент Data). Возвращает и позволяет задать
тип источника данных для элемента типа Data.
DeviceName. Возвращает имена устройств, поддерживаемых
драйвером.
DisabledPicture. Задает точечный рисунок или значок, отобра­
жаемый на поверхности управляющего элемента, когда тот на­
ходится в состоянии «отключен».
DisplayAsDefault. Возвращает логическое значение, позво­
ляющее определить — является ли данный управляющий эле­
мент командной кнопкой по умолчанию для своего контейнера
(и, следовательно, отображает себя на экране в качестве тако­
вой).
DisplayBind. Содержит и позволяет задать атрибут DisplayBind для МетЬег-объектов.
DisplayName. Определяет имя управляющего элемента, под
которым он будет упоминаться в случае появления сообщений
об ошибках.
І6 Заказ 3337
482
Свойства
DisplayType. Позволяет задать или прочитать значение, оп­
ределяющее, отображает элемент на экране свое содержи­
мое или же значок.
DownPicture. Определяет точечный рисунок, который должен
отображаться на поверхности управляющего элемента при
щелчке на нем.
D raglcon. Определяет значок, который должен заменять
собой указатель мыши при выполнении операции перетаски­
вания элемента.
DragMode. Возвращает и позволяет задать значение, опре­
деляющее режим выполнения операций Drag&Drop (автома­
тический или ручной).
DrawMode. Возвращает и позволяет задать вид линий для
графических элементов и методов объекта.
DrawStyle. Возвращает и позволяет задать стиль линий для
графических методов.
DrawW idth. Определяет толщину линий для графических ме­
тодов объекта.
,
Drive. Возвращает и позволяет задать имя текущего дисково­
го устройства (доступно только в период выполнения).
DriverName. Возвращает имя драйвера для объекта P rinter.
Duplex. Разрешает или запрещает печать на двух сторонах
листа.
EditAtDesignTim e. Возвращает и позволяет задать значение,
определяющее активность элемента на этапе визуального
программирования.
f
Enabled. Возвращает и позволяет задать значение, разре­
шающее или запрещающее объекту реагировать на события,
вызванные действиями пользователя.
Events. Обеспечивает возможность доступа Add-ln-утилит к
событиям Visual Basic.
.
EventsFrozen. Разрешает или запрещает элементу-контейне­
ру реагировать на события содержащихся в нем управляющих
элементов.
Свойства
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
_- —
... 483
Exclusive. Возвращает и позволяет задать значение, опреде­
ляющее режим доступа к базе данных, с которой связан эле­
мент типа Data. 1
EXEName. Содержит имя исполняемого файла.
Extender. Возвращает объект типа Extender, заключающий в
себе свойства управляющего элемента, контролируемые со­
держащим его объектом-контейнером.
FileDescription. Возвращает и позволяет задать строку описа­
ния файла, содержащего выполняемое в данный момент при­
ложение.
FileName. Возвращает и позволяет задать полное имя файла.
FileNumber. Должно содержать номер файла, присвоенный
ему при открытии. Идентифицирует файл для всех дальнейших
файловых операций.
Files. Возвращает коллекцию DataObjectFiles, представляю­
щую собой список имен файлов, которые используются объек­
том DataObject.
FillColor. Задает цвет заполнения фигуры.
FillStyle. Задает стиль заполнения фигуры (элемента Shape
или результата работы графических методов).
Font. Возвращает объект типа Font.
FontBold, Fontltalic, FontStrikeThru, FontUnderline. Опреде­
ляют атрибуты и признаки начертания шрифта.
FontCount. Возвращает общее число шрифтов, имеющихся в
распоряжении объектов P rinter или Screen.
FontName. Определяет имя шрифта, выбранного для данного
объекта.
Fonts. Содержит список шрифтов, имеющихся в распоряжении
объектов P rinter или Screen.
FontSize. Определяет размер шрифта, выбранного для данно­
го объекта.
FontTransparent. Определяет режим фона для выводимых на
экран символов шрифта. В случае значения True (прозрачный
фон) задний план символа не будет перекрывать выведенную
ранее графику или символы.
484
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
______
Свойства
Format. Возвращает и позволяет задать формат данных для об­
мена с приложением, которое создало данный объект.
Forms. Возвращает список загруженных форм приложения.
ForwardFocus. Возвращает и позволяет задать значение, оп­
ределяющее, какой управляющий элемент получит фокус кла­
виатуры при нажатии клавиши, соответствующей литере бы­
строго доступа.
G ridLineW idth. Определяет толщину линий сетки.
Handle. Возвращает код доступа для графики, содержащейся
в объекте Picture.
hDC. Содержит ссылку на контекст устройства.
Height, W idth. Определяют размеры объекта или столбцов
сетки.
HelpContextlD. Определяет идентификатор контекста справ­
ки, связанного с объектом.
HelpFile. Определяет имя файла справки, относящегося к объ­
екту.
1
:Н'
Hidden. Позволяет прочитать или задать значение атрибута
Hidden для МетЬег-объектов.
HideSelection. Определяет, будет ли показано выделение
текста при получении элементом фокуса.
hlnstance. Возвращает код доступа к экземпляру приложения.
HostName. Содержит доступное для пользователя имя прило­
жения.
ҺРаІ. Возвращает и позволяет задать код доступа к палитре
объекта Picture.
HScrollSmallChange, VScrollSmallChange. Задают шаг про­
крутки пользовательского документа.
hWnd. Возвращает код доступа к управляющему элементу или
форме.
Hyperlink. Возвращает ссылку на объект типа H yperlink.
Icon. Возвращает значок, появляющийся вместо формы при
ее минимизации.
Свойства
485
Image. Возвращает код доступа к результатам работы графи­
ческих методов, сохранившимся в памяти.
Image (ActiveX). Определяет, какой из объектов Listlm age в
списке графических образов (управляющий элемент ImageL­
ist) должен быть использован.
ImageList (ActiveX). Возвращает и позволяет задать список
графических образов ImageList, который должен быть связан
с данным элементом.
Index. Идентифицирует управляющий элемент в списке.
Instancing. Значение этого свойства определяет, можно ли
создать экземпляр данного класса с областью видимости
Public вне данного проекта, и если да, то как он будет себя
вести.
IntegralHeight. Возвращает и позволяет задать значение, оп­
ределяющее отображение не полностью видных на экране де­
талей управляющего элемента.
Interval. Определяет интервал времени (в миллисекундах)
между событиями таймера.
InvisibleAtRunTime. Определяет, должен ли управляющий
элемент быть видимым или невидимым в период выполнения.
IsBindable. Возвращает логическое значение, показывающее,
может ли свойство быть связанным с данными.
IsDataSource. Возвращает логическое значение, показываю­
щее, является ли свойство источником данных.
IsDirty / Hyperlink. Возвращает значение, позволяющее оп­
ределить — подвергалось ли содержимое элемента модифи­
кации с момента его последнего сохранения.
«курсив».
Задает
ItemData. Возвращает (по указанному номеру) содержимое
элемента списка комбинированного поля или поля списка.
KeyPreview. Разрешает или запрещает форме перехватывать
и предварительно «просматривать» нажатия клавиш, прежде
чем передавать их управляющему элементу, на котором на­
ходится фокус клавиатуры.
486
■
■
■
■
■
■
■
■
Ш
Ш
■
Ш
■
В
■
Свойства
LargeChange, SmallChange. Определяют шаг полосы про*
крутки при щелчках на кнопках и собственно полосе.
LBound Возвращает наименьший номер управляющего эле­
мента в массиве управляющих элементов.
Left, Тор. Определяют расстояния между левой и верхней гра­
ницами объекта и соответствующими границами контейнера.
LegalC opyright. Содержит строку информации о правах про­
изводителя выполняющегося приложения.
LegalTradem arks. Содержит строку информации о торговой
марке производителя выполняющегося приложения.
Lines. Возвращает строку, заключающую в себе указанный
блок строк.
Linkltem . Определяет элемент-получатель данных в приложе­
ние, с которым установлена связь по технологии DDE.
LinkM ode. Определяет тип DDE-соединения и инициирует
его. '
рЩ УЩ И
г
LinkTim eout. Задает значение промежутка времени, в течение
которого управляющий элемент должен ожидать реакции на
посланное сообщение в сеансе DDE-соединения.
LinkTopic. Определяет для элемента-получателя приложениеотправитель и группу его данных, которая должна стать пред­
метом DDE-сеанса.
List. Возвращает и позволяет задать содержимое списка, при­
надлежащего данному управляющему элементу.
ListC ount. Возвращает количество элементов в списке управ­
ляющих элементов.
Listlndex. Возвращает и позволяет задать номер выбранного
элемента в списке.
LocalelD . Возвращает значение типа Long, идентифицирую­
щее страну и язык пользователя.
Locked. Возвращает и позволяет задать значение, отобра­
жающее возможность модификации содержимого данного
элемента.
гіёйййИ ів#
Свойства
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
487
LogMode. Возвращает значение, определяющее режим реги­
страции.
LogPath. Возвращает полное имя файла, используемое для за­
писи протокола регистрации с помощью метода LogEvent.
IpOleObject. Возвращает адрес объекта.
Major. Возвращает и позволяет задать номер версии проекта.
MaskColor. Определяет цвет рисунка, служащего "маской" на
поверхности командной кнопки.
Max, Min. Определяют максимальное и соответственно мини­
мальное значение свойства Value для полос прокрутки.
MaxButton. Возвращает и позволяет задать значение, опреде­
ляющее наличие кнопки максимизации окна в титульной строке
окна формы.
MaxLength. Значение этого свойства ограничивает количест­
во символов, которые может содержать текстовое поле.
MDIChild. Возвращает и позволяет задать значение, показы­
вающее, изображается ли данная форма в качестве дочерней
внутри материнской MDI-формы.
Members. Содержит идентификаторы, которые можно рас­
сматривать в к