Кибернетика

Програмирование на Visual Basic


VISUAL BASIC 6
 
 
 
Глава 1. ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ НА VISUAL BASIC 4 В СРЕДЕ WINDOWS
1.    1. ЭКРАННЫЕ ЭЛЕМЕНТЫ
После запуска Visual Basic на экране появляются следующие окна (рис 1 1)'
    . основное окно сверху экрана Miciosoft Visual Basic Project 1 (design),
      содержащее главное меню и панель инструментов (Toolbar);
    . окно формы в центре с заголовком Form;
    . окно шаблонов (palett windows) или инструментов (Toolbox) слева от
      формы;
    . окно свойств (Properties) сверху справа;
    . окно проекта (Project 1) снизу справа
[pic]
Рис 1 1
1.    1. 1. Основное окно
Главное меню основного окна содержит стандартные для Windows меню Файл
(File), Правка (Edit), Вид (View) и меню собственно Visual Basic Вставка
(Insert), Выполнить (Run), Tools (Средства), Add-in (Дополнения), (Help)
      Файл (File) - команды для открытия, сохранения, печати и компиляции
      проекта Visual Basic
      Правка (Edit) - команды редактирования.
      Вид (View) - команды просмотра компонентов Visual Basic
      Вставка (Insert) - команды для добавления в проект новых
      форм и модулей
Выполнить (Run) - команды для выполнения и компиляции проекта
      Tools (Средства) - команды для конфигурирования среды
      программирования Visual Basic
      Add-in (Дополнения) - дополнительные средства для расширения
      возможностей Visual Basic
(Help) - доступ к справочному руководству Панель инструментов (Toolbar)
основного окна содержит кнопки-пиктограммы для быстрого вызова часто
используемых команд (рис 1 2)
[pic]
      Функции пиктограмм (слева направо) следующие-создать форму (New Form);
      создать модуль (New Module);
      открыть проект (Open Project);
      сохранить проект (Save Project),
      блокировка элементов управления на     форме (Lock
      contro s),
редактор меню (Menu Editor), свойства (Properties Windows), просмотр
объектов (Object Browser), проект (Project);
старт (Start),
прервать выполнение (Break);
поставить/убрать точку прерывания (BieakPoint), • немедленный просмотр
(Instant Watch);
    . вызовы (Calls);
    . пошаговое выполнение (Single Step);
    . выполнение по процедурам (Procedure Step).
Кнопки создания формы (New Form), создания модуля (New Module), открытия
проекта (Open Project), сохранения проекта (Save Project) позволяют создать
новый или открыть существующий проект (единый программный комплекс), ввести
в него новые диалоговые окна (формы) и сохранить проект на диске с
внесенными изменениями.
Кнопка блокировки элементов управления на форме (Lock controls) позволяет
зафиксировать положение элементов управления на форме.
Кнопка редактора меню (Menu Editor) используется для создания
пользовательского меню проекта и определения его свойств.
[pic]
Рис 1 3
Кнопка свойств (Properties Windows) используется для вывода окна со списком
свойств и их значений для формы и элементов управления.
Кнопка просмотра объектов (Object Browser) выводит окно, в котором можно
для выбранного подмножества Visual Basic или
проекта получить список его компонентов или модулей и относящихся к каждому
из них список методов и свойств (рис. 1.3). Для выбранных элементов списка
выводится краткая аннотация и можно получить развернутую справку.
Кнопка проекта (Project) активизирует окно проекта. Кнопки “Старт” (Start),
“Прервать выполнение” (Break), “Конец выполнения” (End), “Поставить/убрать
точку прерывания” (Breakpoint), “Немедленный просмотр” (Instant Watch),
“Вызовы” (Calls), “Пошаговое выполнение” (Single Step), “Выполнение по
процедурам” (Procedure Step) используются при отладке программ.
Окно проекта (рис. 1.4) содержит список всех файлов, необходимых для
выполнения создаваемой программы. Имя Forml.frm присваивается по умолчанию
первой диалоговой форме проекта (это имя можно изменить или сохранить для
дальнейшего использования). Этот файл содержит описание формы, элементов
управления (кнопок, текстовых окон и др.) и текст программ, связанных с
этими элементами.
[pic]
Файл специальных средств управления имеет расширение .ОСХ или -ВСХ и
содержит кнопки с мультипликацией, трехмерные средства управления и т.п.
Обычно хранится в каталоге WINDOWS/SYSTEM, и его можно использовать в
разных проектах.
Файл стандартных модулей имеет расширение .BAS и содержит текст программ.
Файл модулей классов имеет расширение .CLS и содержит определения классов.
Файл ресурсов имеет расширение .RES и содержит данные для проекта
(текстовые строки, битовые образы и др.).
Файл проекта имеет расширение .VBP или .МАК и содержит пути назначения
(диски и каталоги) и имена всех перечисленных файлов проекта.
Файл проекта может быть откомпилирован с целью получения исполняемого файла
программы с расширением .ЕХЕ. В окне проекта имеются также две кнопки: View
Form (Просмотр формы) и View Code (Просмотр кода). По умолчанию Visual
Basic при выборе какого-либо файла проекта показывает форму (см. рис. 1.1с
общим экраном Visual Basic).
При щелчке на кнопке View Code (Просмотр кода) открывается окно кода
(текста программы), относящегося к рассматриваемой форме (заголовок
Forml.frm) и задаваемым на ней диалоговым элементам. Окно (рис. 1.5)
содержит раскрывающиеся окна Object и Ргос и поле для записи программы. В
первом окне находится список диалоговых элементов формы, включая саму форму
(Form). Второе содержит список процедур обработки событий, относящихся к
рассматриваемому диалоговому элементу формы (в данном случае к самой форме
- Form).
[pic]
Рис 1 5
Каждому диалоговому элементу в Visual Basic поставлен в соответствие
определенный набор событий (эти события перечислены в раскрывающемся меню:
Load, LostFokus и др.), происходящих в период выполнения программы.
Например, событие Load (Загрузка) происходит при загрузке формы, событие
Clik (Щелчок) вызывается щелчком кнопки мыши, событие DblClick (Двойной
щелчок) вызывается двойным щелчком кнопки мыши и т.д.
В свою очередь, событию ставится в соответствие процедура обработки события
(процедура (procedure) в языках программирования состоит из набора
операторов, выполняемых при вызове процедуры). То есть событие может
вызывать программируемое изменение данных. Visual Basic содержит заготовки
таких процедур в поле для записи программы, соответствующие выделенному
событию (строки Sub Form_Load () и End определяют первый и
последний операторы процедуры обработки события Load (Загрузка)). В поле
ввода текста программы автоматически формируется заголовок процедуры и
конечный оператор. Имя процедуры формируется автоматически и состоит из
двух частей, разделенных подчеркиванием: имя выделенного диалогового
элемента и имя выделенного события (строки Sub Form_Load () и End
определяют первый и последний операторы процедуры обработки события Load
(Загрузка)).
1.1.3.      Окно шаблонов или инструментов
Достоинством GUI является то, что имеется стандартный набор объектов
диалога (окна, кнопки, линейки прокрутки и т.д.), позволяющий создать
стандартный Windows интерфейс программируемой системы. Диалоговые элементы
программной системы создаются на основе стандартных шаблонов или
инструментов, которые выбираются из окна шаблонов или инструментов
(Toolbox) и размещаются на форме.
Имеются следующие основные элементы управления (инструментальные средства):
[pic]
Указатель (Pointer) не является инструментальным средством. Используется
для перемещения или изменения размеров помещенных на форму элементов
управления.
[pic]
Изображение или картинка (Picture Box) используется для показа на форме
графических объектов (статических или динамических), которые получаются с
помощью графических методов.
Метка (Label) используется для вывода текста, который не должен изменяться
пользователем (например, заголовок какого-либо объекта управления).
[pic]
[pic]
Текстовое окно (Text Box) используется для ввода, вывода и редактирования
пользователем текстовой (символьной) строки информации. [pic]
Рамка (Frame) используется для функциональной или визуальной группировки
(выделения) элементов управления. Для того чтобы сгруппировать элементы
управления, сначала на форме размещается рамка, а затем внутри нее
размещаются элементы
[pic]
Командная кнопка (Command Button) используется для ввода команды
пользователем.
[pic]
Флажок (Check Box) используется в тех случаях, когда пользователь должен
выбрать или отметить на форме некоторое условие (да или нет). Условий,
которые помечаются флажками на форме, может быть несколько и они могут
выполняться одновременно (т.е. несколько флажков на форме может быть по-
мечено одновременно).
[pic]
Переключатель (Option Button) используется в тех случаях, когда
пользователь должен выбрать или отметить на форме некоторое условие (да или
нет). Условий, которые помечаются переключателями на форме, может быть
несколько и только одно из них может быть выбрано (т.е. если одно условие,
заданное переключателем, выбрано или отмечено, то другие переключатели на
форме не помечены или не выбраны).
[pic]
Комбинированный список (Combo Box) является комбинацией списка (см. ниже) и
текстового окна. Используется для вывода в специальном окне (списке)
нескольких строк текстовой (символьной) информации, из которых пользователь
может выбрать одну или несколько, а также для ввода и редактирования
пользователем текстовой (символьной) строки информации.
[pic]
Список (List Box) используется для вывода в специальном окне нескольких
строк текстовой (символьной) информации, из которых пользователь может
выбрать одну или несколько. Если в списке содержится больше элементов, чем
может одновременно быть показано в окне, возможна прокрутка списка.
[pic]
Горизонтальная линейка прокрутки (Horizontal Scroll Bar) используется для
быстрого движения по длинным спискам или строкам и отображения текущего
положения в списке или строке и увеличения скорости прокрутки списка.
[pic]
Вертикальная линейка прокрутки (Vertical Scroll Bar) аналогична
горизонтальной линейке прокрутки.
[pic]
Таймер (Timer) используется для задания моментов (интервалов) времени, в
которых должны свершиться какие-либо события. Этот элемент управления
невидим на форме во время выполнения ппиложения.
[pic]
      Список дисков (Drive List Box) используется для ото-
      браженияи выбора имеющихся в системе дисков.
[pic]
Список каталогов (Directory List Box) используется для отображения
иерархического списка каталогов в пользова-тельской системе.
Список файлов (File List Box) используется для отображения списка файлов в
пользовательской системе и управления ими (открытие, удаление, сохранение и
др.).
[pic]
[pic]
Форма (Shape) используется для отображения простых фигур (прямоугольник,
окружность, эллипс) на форме на этапе проектирования формы.
[pic]
Линия (Line) используется для отображения линий различного вида на форме на
этапе проектирования формы.
[pic]
Изображение (Image) используется для отображения на форме растровых
графических изображений, иконок или метафайлов. Эти изображения могут быть
только декоративными и требуют меньше ресурсов компьютера, чем Picture Box
[pic]
Сетка (Grid) представляет собой таблицу данных, состоящую из столбцов и
строк. Положение конкретного данного определяется координатой строки и
столбца, на пересечении которых оно находится
[pic]
OLE 2 0 реализует технологию Microsoft OLE (object linking and embending -
связь и внедрение объектов) и позволяет создавать в программе объект,
содержащий данные из другой внешней программы (приложения), например из
электронной таблицы Excel Технология OLE обеспечивает связь с внешним
приложением (при изменении данных в источнике автоматически обновляются
данные в программе на Visual Basic)
[pic]
Элемент данные (Data) позволяет получить доступ к конкретной информации в
базе данных
[pic]
Стандартное диалоговое окно (Common Dialog) включает набор диалоговых окон,
реализующих стандартные и часто используемые функции Windows (открыть,
сохранить как идр)
Кроме перечисленных имеются другие элементы управления, сведения о которых
можно получить во встроенной справочной системе Visual Basic и которые
можно добавлять к приведенному основному списку
1.1.4.      Окно свойств
Каждый шаблон (инструмент) и сама форма обладают набором специфических
свойств, параметры которых определяют их внешний вид и поведение при работе
программы Список параметров и их значений определяются в окне свойств (рис
1 6)
Раскрывающийся список объектов в верхней части содержит имена и типы
объектов (шаблонов), помещенных на форму, а также самой формы (Form] - имя
формы, Form - тип) Изначально список содержит только форму, каждый новый
шаблон, помещаемый на форму, включается в список
Для фиксированного элемента списка объектов выводится список свойств и их
значений (на рис 1 6 список свойств для формы) Значение выделенного
подсветкой свойства можно изменять Если значение имеет набор альтернатив,
то активизируется стрелка раскрывающегося списка возможных значений.
Например, свойство Enabled (Доступно) имеет два альтернативных параметра'
True и False
[pic]
В заключение отметим, что среду Visual Basic можно настроить в соответствии
с предпочтениями пользователя (пункт главного меню Tool и далее пункты
раскрывающегося меню Environment Options.., Project Options.., Format
Options...).
Рис 16
1.2. Пример разработки приложения
Создание любой программной системы (проекта) на Visuai Basic состоит из
следующих этапов”
    . создания интерфейса (создания окна диалога и размещения в нем
      элементов управления),
    . установки параметров (свойств) элементов управления;
    . ввода текста программ и их отладки;
    . сохранения проекта в удобном для последующего использования виде
Рассмотрим реализацию этих этапов на примере простого проекта для
преобразования значений температуры по Цельсию в значения по Фаренгейту и
наоборот Преобразование производится соответственно по формулам
F=(C*9/5)+32, C=(F-32)*5/9
Пользовательский интерфейс показан на рис 1 7 [pic]
При вводе значения температуры по Цельсию (окно Celsius) и нажатии клавиши
Ввода (Enter) в окне Fahreheit выводится значение по Фаренгейту.
При аналогичном вводе значения по Фаренгейту выводится значение по Цельсию.
Проект включает :
    . формы (фон, Windows, диалоговые окна);
    . элементы управления ((графические объекты, помещенные на форму);
    . программный код (процедуры и объявления).
Рис. 1.7
При запуске Visual Basic по умолчанию открывается новый проект с именем
Project 1 и относящаяся к нему форма Formi (рис. 1.8). На форме разместим
элементы управления: два текстовых окна и две метки, используя окно
шаблонов.
Задать элементы управления можно двумя способами:
      1.    Щелкните мышью на нужном элементе окна шаблонов (стрелка
      превращается в”+”), перенесите указатель в верхний левый угол формы,
      нажав и не отпуская кнопку мыши переместите указатель вправо и вниз
      формы, отпустите кнопку мыши. На форме в верхнем левом углу создается
      выбранный элемент управления соответствующего перемещению размера.
      2.    Дважды щелкнуть мышью на нужном элементе окна шаблонов. При этом
      создается элемент управления с размерами по умолчанию в центре формы.
      Выберем указанными способами два текстовых окна и разместим их на
      форме (рис. 1.9).
      Активный в данный момент элемент помечен маркерами (щелчком мыши
      элемент делается активным) и его можно перемещать мышью и изменять его
      размеры. Это позволяет отредактировать размер и положение управляющих
      элементов на форме соответственно желанию разработчика. После ввода
      всех элементов и редактирования форма принимает вид, показанный на
      рис. 1.10.
      По умолчанию последовательно вводимым одинаковым элементам
      присваиваются одинаковые имена, отличающиеся последней цифрой
      (текстовым окнам последовательно пписваивают-
      ся имена Textl и Textl, меткам последовательно присваиваются имена
      Label! и Label2).
[pic]
Рис. 1.8
Определим теперь свойства введенных элементов, используя окно свойств
(Properrties). Активизируем элемент Label], при этом активизируются
свойства в окне свойств, относящиеся к этому элементу (заголовок Labell
Label). Выберем свойство Caption (Название) и определим его как Celsiu ,
используя строку ввода. Это название появляется на форме (рис. 1.11).
Свойство Caption (Название) для Label2 зададим Fahrenheit. Остальные
оставим по умолчанию.
Определим свойства тестовых окон. Активизируем сначала первое окно, очистим
окно (удалим значение Textl свойства Text) и присвоим ему имя txtCels
(свойство Name (Имя), которое будем использовать при написании текста
программ (рис. 1.12). Очистим также второе окно и присвоим ему имя ixtFahr.
Остальные свойства обоих окон оставим по умолчанию. [pic]
[pic]
Рис 111
Для ввода текста необходимых программ щелкните мышью на кнопке View Code
окна “проекты” (окно Piojektl mak) Откроется окно FORM1 (имя проектируемой
формы по умолчанию Formi) Откроем слева раскрывающийся список Object и
выберем в нем объект txtCels (в качестве объекта выбирается верхнее
текстовое окно формы, ранее для этого было задано имя txtCels )
Откроем справа раскрывающийся список Ргос и выберем процедуру обработки
события Keypress (нажатие клавиши) В поле формы появляются первая и
последняя строки процедуры Имя процедуры txtCels_KeyPress формируется
автоматически (первая часть имени определяется именем выбранного элементом
- верхним текстовым окном, вторая - именем выбранной процедуры обработки
события) Параметром процедуры является значение кода нажатой клавиши
(KeyAscii), определенное как целый тип (Integer) (рис 1 13)
Введем теперь необходимые операторы процедуры (рис 1 14) При нажатии
клавиши Enter, ASCII-код которой равняется 13 (комментарий в тексте
программы), вычисляется значение температуры по Фаренгейту по введенному в
окне значению температуры по Цельсию и значение вычисленной температуры
выводится в другом окне
[pic]
Рис 1 12
[pic]
Рис 1 13
Функция val преобразует текстовую строку в числовое значение Составные
имена txtFahr Text и txtCels Text связаны с включением в Visual Basic так.
называемых методов для объектов (форм и командных кнопок) Введем также
описания переменных tem_Cels и tem_Fahr в раздел общих (general) описании,
что делает их доступными для обеих процедур
Форма и программы обработки событий подготовлены Теперь, щелкнув мышью на
кнопке Run панели инструментов главного меню, проект можно отправить на
выполнение Появляется спроектированная форма, в окнах которой можно вводить
информацию (рис 1 15) Кроме ввода и вывода информации, форма соответствует
стандарту Windows приложений (реагирует на кнопки минимизации и
максимизации, изменяет размеры и др )
Щелчок на кнопке Конец выполнения панели инструментов главного меню
завершает выполнение проекта
Отлаженный проект можно сохранить двумя способами • используя команду Save
Project или Save Project as... раскрывающегося меню File главного меню;
    . используя команду Make EXE File раскрывающегося меню File главного
      меню.
[pic]
Рис 1 14
В первом случае выполнить проект можно только после запуска Visual Basic.
Во втором случае программы проекта компилируются и создается ЕХЕ-файл,
позволяющий выполнить проект автономно без запуска Visual Basic, даже если
на компьютере не установлен Visual Basic.
При выполнении команды Save Project as... появляется окно (рис. 1.16),
позволяющее задать директорию для хранения и имя проекта (проект
сохраняется в директории C:\VB под именем temper, mak).
[pic]
При выполнении команды Make EXE File появляется окно (рис. 1.17),
позволяющее задать директорию для хранения ЕХЕ-файла и его имя (EXE- файл
сохраняется в директории C:\VB под именем temper.exe).
Рис 1 15
При щелчке по кнопке “Options...” появляется специальное окно (рис. 1.18)
для задания необходимой информации по готовому приложению (номер версии,
информация о компании- разработчике, имя созданного приложения (TEMPER),
иконка для формы и др.).
[pic]
Рис 1 16
Программа на любом языке программирования перед выполнением переводится на
машинный язык (набор команд процессора) специальными программами
переводчиками. Эти программы принципиально делятся на компиляторы
(compilers) и интерпретаторы (interpreters). Первые транслируют всю
программу целиком и создают законченный программный модуль на машинном
языке Вторые транслируют единовременно только одну строку программы на
языке программирования и сразу же
[pic]
Рис 1 17
[pic]
Рис 1 18
исполняют полученный фрагмент программы на машинном языке. Далее
интерпретатор возвращается к следующей строке программы на языке
программирования, транслирует ее и т. д
Visual Basic относится к языкам программирования интерпретирующего типа
           1.3.  ОТЛАДКА ПРОГРАММ
Любая программа, написанная даже квалифицированным программистом, содержит
ошибки, которые выявляются и исправляются в процессе отладки программы
Кроме того, при работе с отлаженной программой пользователь может создать
ситуацию, которая программой не обрабатывается корректно Рассмотрим процесс
отладки программ и способы обработки ошибок при выполнении программы и
имеющиеся для этого средства в Visual Basic
1.3.1.      Синтаксический контроль
При ошибке в наборе текста программы в окне кода автоматически (при
активизации в диалоговом окне Environment Options (Параметры Среды) флажка
Display Syntax Errors (Показывать синтаксические ошибки)) инверсной
подсветкой выделяется неправильный фрагмент оператора программы На этом
этапе Visual Basic отслеживает синтаксические ошибки (неправильно
написанные ключевые слова, неверный порядок операндов в операторах,
некорректную пунктуацию и т п )
Лишняя точка в операторе уже приведенной выше процедуры автоматически
показывается с разъяснением ошибки в окне
[pic]
Рис 1 19 Вызов диалогового окна Environment Options (Параметры Среды)
производится из пункта Tools Главного меню. Окно показано на рис. 1.20 и
позволяет, кроме указания на выдачу синтаксических ошибок, определить
выводимые окна среды (Toolbox, Properties, Project, Debag), задать
обязательность объявления переменных (Require Variable Declaration), показа
сетки формы (Show Grid) и ее шаг (Width, Height), выравнивания элементов
управления относительно сетки (Align Controls to Grid), автоматического
сохранения текущих версий файлов форм и проекта перед каждым запуском
программы (Save Before Run).
[pic]
1.3.2.      Контроль корректности алгоритма
Для дальнейшей отладки синтаксически правильной программы существуют
специальные средства, позволяющие контролировать значения переменных на
различных этапах выполнения программы. Окно Debug является основным
средством для поиска ошибок (рис. 1.21). В верхнем поле окна выводятся вид
выражения (колонка Expression), значение выражения (колонка Value),
местонахождение выражения (колонка Context). Кнопки Immediate и Watch
обеспечивают переключение на просмотр соответственно непосредственно
вводимого в этом поле выражения (прямой ввод выражения) или уже заданного.
В нижнем поле отображается текст программы.
Вид выражения задается в окне Add Watch (вызывается из пункта Tool Главного
меню) (рис. 1.22). Раскрывающиеся списки модулей (Module) и процедур
(Procedure) позволяют задать местоположение выражения в программе.
Выражение может быть набрано вручную в текстовом окне. Кроме того, если в
тексте программы перед вызовом окна выделен какой-либо оператор или его
часть, то оно автоматически появляется в окне (см. рис. 1.22).
Кнопки в области Watch Type определяют условия вывода выражения (Watch
Expression - наблюдение за значением в точках прерывания; Break When Value
Is True - прерывание выполнения программы, когда значение выражения равно
заданному; Break When Value Changes - прерывание выполнения программы,
когда значение выражения меняется).
[pic]
Рис. 1.22 Для вывода в окно Debug нужно также установить точки прерывания
(моменты, когда программа прекращает работу и выдает требуемую информацию в
окно Debug). Обычно такими точками являются места программы, проверяемые на
корректность работы.
Для установки точки прерывания нужно:
    . установить курсор или выделить соответствующий оператор программы;
    . щелкнуть мышью по пункту Toggle Breakpoint (Поставить точку
      прерывания) раскрывающегося меню Run (Старт) Главного меню.
Установленная точка прерывания выделится подсветкой (рис. 1.23).
После запуска программы значение проверяемого выражения выводится в окне
Debug (рис. 1.24.). Оператор прерывания выделяется рамкой, в окне
указывается место прерывания (проект, форма, процедура обработки события).
[pic]
Удалить точку прерывания можно щелкнув мышью по пункту Clear Toggle
Breakpoint (Убрать точку прерывания) раскрывающегося меню Run (Старт)
Главного меню.
При отладке программ целесообразно комбинировать постановку точек
прерывания и точек наблюдения (их установка задается кнопками Break When
Value Is True (Прерывание выполнения программы, когда значение выражения
равно заданному) и Break When Value Changes (Прерывание выполнения
программы, когда значение выражения меняется) окна Add Watch). Точки
наблюдения замедляют выполнение программы. Лучше установить точку
прерывания в подозрительном месте программы и выполнять программу с
нормальной скоростью до этой точки. Далее поставить одну или несколько
точек наблюдения и продолжать более медленный поиск ошибок в локализованной
области программы.
Если нет необходимости прослеживать изменение значения какой-либо
переменной в процессе выполнения программы, то для вывода текущего значения
вместо использования окна Add Watch можно использовать пункт меню Instant
Watch (Быстрый просмотр) раскрывающегося меню Tool Главного меню. Перед
этим, после прерывания выполнения программы, необходимо выделить переменную
в окне кода. В окне Instant Watch (рис. 1.25.) выводится имя переменной,
текущее значение и имя процедуры, в которой используется переменная.
Щелчком мыши по кнопке Add переменную можно добавить в список окна Debug
Windows.
Кнопка Immediate окна Debug (рис. 1.26) позволяет вывести переменную на
форму или изменить ее значение с помощью оператора присваивания (эти
изменения не отражаются на содержании программы). Это окно можно также
использовать для ввода команд, изменяющих свойства элементов управления
(шрифты, цвет фона и др.). Измененные значения выводятся в окне Debug (рис.
1.27).
Если проект включает много процедур, то полезным средством отладки является
трассировка вызова процедур (пункт меню Call... раскрывающегося меню Tool
Главного меню или одноименная кнопка панели инструментов). Окно (рис.
1.28.) показывает всю последовательность вызовов от исходной процедуры до
текущей (в верхней части расположена последняя вызванная процедура, в
нижней - первая). Список позволяет определить, как произошел переход в
текущую точку программы. [pic]
Рис. 1.25
[pic]
Рис. 1.27
[pic]
Рис. 1.28
Эффективным средством отладки является также пошаговое выполнение программы
и наблюдение результатов выполнения каждого оператора. После приостановки
выполнения программы (точки прерывания или кнопка Break) необходимо войти в
окно редактирования кода. Для выполнения одного оператора используется
клавиша F8. При этом будет выполнен оператор, выделенный рамкой, а
вьщеление будет перенесено на следующий оператор. Повторяя нажатие клавиши,
можно осуществлять пошаговое выполнение программы.
Если текущий оператор содержит вызов процедуры, нажатие клавиши F8, щелчок
мыши по пункту Step Into (Шаг внутрь) раскрывающегося меню Run или щелчок
мыши по пиктограмме Step Into Главного меню вызовет выполнение первого
оператора процедуры, которую можно продолжать выполнять по шагам.
Для выполнения всей процедуры (не по шагам) и переходу к оператору,
следующему за вызовом процедуры, используется щелчок мыши по пункту Step
Over (Обойти) или комбинация клавиш Shift+F8.
При пошаговом выполнении некоторый блок операторов можно обойти. Это можно
сделать, установив курсор на оператор, на котором необходимо выполнить
следующее прерывание выполнения программы, и щелкнув мышью по пункту меню
Step То Cursor или комбинацией клавиш Ctrl+F8.
Пошаговое выполнение можно комбинировать с процедурным выполнением.
Отлаженные процедуры одной программы можно выполнять по процедурно, а не
отлаженные - пошагово. Средства отладки позволяют также изменять порядок
выполнения операторов. При выполнении оператора Set Next Statement
(Установить следующий оператор) раскрывающегося меню Run можно перейти к
выполнению любого оператора (даже к тем, которые расположены перед текущим)
текущей процедуры.
1.3.3.      Контроль ошибок на этапе выполнения программы
Ошибки периода выполнения (runtime errors) могут возникать, например, из-за
нехватки памяти или дискового пространства, попытки открыть открытый другим
приложением файл, выхода индекса за пределы размерности массива и др. В
этом случае Visual Basic выводит диалоговое окно с соответствующим
сообщением и прекращает выполнение программы (рис. 1.29).
Обработчик ошибок возвращает значение кода ошибки (функция Err), список
которых находится в справочной системе (Help) и документации к Visual
Basic.
Однако такие ошибки можно обрабатывать методом перехвата ошибок (error
trapping). Перехват ошибок обеспечивается вставкой в текст процедуры
оператора
On Error GoTo метка, где метка помечает место входа в обработчик ошибок.
Если в период выполнения ошибка возникнет в одном из операторов процедуры,
расположенных за On Error GoTo метка, то управление передается обработчику
ошибок, указанному меткой. Участок обработки ошибок можно закончить
оператором On Error GoTo 0.
[pic]
Рис. 1.29
В обработчик ошибок можно включить оператор Resume и продолжить выполнение
программы после исправления ошибки операторами, вставляемыми в обработчик
ошибок. Оператор Resume имеет несколько форм:
Resume возобновляет выполнение программы с оператора, вызвавшего ошибку;
Resume ‘Next возобновляет выполнение программы со следующего оператора;
Resume метка возобновляет выполнение программы с оператора, помеченного
меткой.
Пример.
В примере в процедуре Primer происходит деление на О (оператор YY = YY/XX,
перед выполнением которого переменой XX присваивается значение 0). Этот
оператор включен в область обработчика ошибок. При делении на 0 происходит
переход на оператор, помеченный меткой Label: (обработчик ошибок),
переменной XX присваивается значение 2 и программа продолжает выполнение с
оператора, на котором была ошибка на этапе выполнения в результате деления
на 0. Программа заканчивает работу и результат распечатывается на форме
(рис. 1.30).
[pic]
Рис. 1.30
[pic]
[pic]  Таблица 2.1
|Название   |Для каких     |Описание     |Возмо  |
|свойства   |элементов     |действия     |жность |
|           |управления    |             |измнени|
|           |используется  |             |я      |
|Action     |Common dialog |Определяет   |-/+    |
|           |              |тип диалога  |       |
|Action     |OLE           |Определяет   |-/+    |
|(OLE)      |              |тип действия |       |
|Alignment  |Check box.    |Определяет   |+/-    |
|           |label, option |способ       |       |
|           |button, text  |выравнивания |       |
|           |box           |(по левому   |       |
|           |              |краю, по     |       |
|           |              |правому или  |       |
|           |              |по центру)   |       |
|Auto Redraw|Form, picture |Определяет   |+/-    |
|           |box           |возможность  |       |
|           |              |автоматическо|       |
|           |              |го           |       |
|           |              |перерисования|       |
|AutoSize   |Label, picture|Определяет   |+/-    |
|           |box           |возможность  |       |
|           |              |автоматическо|       |
|           |              |го изменения |       |
|           |              |размера при  |       |
|           |              |заполнение   |       |
|BackColor, |Form, check   |Определяют   |+/+    |
|Fore Color |box, combo    |соответственн|       |
|           |box, command  |о цвет фона и|       |
|           |button        |цвет         |       |
|           |(TWibKoBackCol|выводимой    |       |
|           |or) data      |ин4юрмации   |       |
|           |control,      |             |       |
|           |directory list|             |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |label, list   |             |       |
|           |box, OLE      |             |       |
|           |control,      |             |       |
|           |option button,|             |       |
|           |picture box,  |             |       |
|           |Printer object|             |       |
|           |(только       |             |       |
|           |ForeColor),   |             |       |
|           |shape (только |             |       |
|           |BackColor),   |             |       |
|           |text box      |             |       |
|BackStyle  |Label, shape  |Определяет   |+/+    |
|           |              |прозрачность |       |
|           |              |фона         |       |
|BorderColor|Line, shape   |Определяет   |+/+    |
|           |              |цвет рамки   |       |
|BorderStyle|Form, grid,   |Определяет   |Для    |
|           |image, label, |вид рамки    |Form и |
|           |line, OLE     |             |text   |
|           |control,      |             |box+/-+|
|           |picture box,  |             |/+     |
|           |shape, text   |             |       |
|           |box           |             |       |


 
Продолжение табл 2 I
|Название   |Для каких     |Описание     |Возможн|
|свойства   |элементов     |действия     |ость   |
|           |управления    |             |изменен|
|           |используется  |             |ия     |
|BorderWidth|Line, shape   |Определяет   |+/+    |
|           |              |ширину       |       |
|           |              |границы      |       |
|Cancel     |Command button|Определяет,  |+/+    |
|           |              |что элемент  |       |
|           |              |выполняет    |       |
|           |              |функцию      |       |
|           |              |Cancel на    |       |
|           |              |форме        |       |
|Caption    |Form, MDI     |Определяет   |+/+    |
|           |form, check   |текст,       |       |
|           |box, command  |выводимый на |       |
|           |button, data  |элемент или  |       |
|           |control,      |возле него   |       |
|           |frame, label, |Для формы    |       |
|           |menu, option  |-заголовок   |       |
|           |button        |             |       |
|CellSelecte|Grid          |Ячейка       |-/-    |
|d          |              |таблицы      |       |
|           |              |выделена     |       |
|           |              |строкой и    |       |
|           |              |столбцом     |       |
|Class      |OLE control   |Определяет   |+/-    |
|           |              |класс объекта|       |
|           |              |OLE          |       |
|ClipControl|Form, frame,  |Определяет   |+/+    |
|s          |picture box   |необходимость|       |
|           |              |перерисовки  |       |
|           |              |всего объекта|       |
|           |              |или          |       |
|           |              |появляющейся |       |
|           |              |части        |       |
|Clip       |Grid          |Определяет   |-/+    |
|           |              |содержимое   |       |
|           |              |выделенных   |       |
|           |              |ячеек таблицы|       |
|Col, Row   |Grid          |Определяет   |-/+    |
|           |              |выделенную   |       |
|           |              |колонку или  |       |
|           |              |строкуа      |       |
|           |              |таблицы      |       |
|ColAlignmen|Grid          |Выравнивание |-/+    |
|t          |              |данных в     |       |
|           |              |колонке      |       |
|           |              |таблицы      |       |
|Cols, Rows |Grid          |Определяет   |+/+    |
|           |              |число        |       |
|           |              |колонок,столб|       |
|           |              |цов таблицы  |       |
|Columns    |List box      |Определяет   |+/+    |
|           |              |число колонок|       |
|           |              |в списке     |       |
|ColWidth   |Grid          |Ширина       |-/+    |
|           |              |колонки      |       |
|ControlBox |Form          |Определяет   |+/-    |
|           |              |наличие      |       |
|           |              |кнопки       |       |
|           |              |системного   |       |
|           |              |меню на форме|       |
|CuncntX,   |Form, picture |Текущие      |-/+    |
|CurrentY   |box, Printer  |координаты по|       |
|           |object        |горизонтали и|       |
|           |              |вертикали    |       |
|           |              |(для рисующих|       |
|           |              |или          |       |
|           |              |печатающих   |       |
|           |              |методов)     |       |


Продолжение табл. 2.1
|Название    |управления    |             |жность |
|свойства    |используется  |             |изменен|
|            |              |             |ия     |
|DatabaseName|Data control  |Имя и        |+/+    |
|            |              |расположение |       |
|            |              |базы данных  |       |
|DataChanged |Check box,    |Указатель    |-/+    |
|            |image, label, |изменения    |       |
|            |picture box,  |данных в     |       |
|            |text box      |элементе при |       |
|            |              |чтении записи|       |
|            |              |(несовпадение|       |
|            |              |)            |       |
|DataField   |Check box.    |Определяет   |+/+    |
|            |image, box    |связь        |       |
|            |              |с полем      |       |
|            |              |записи файла |       |
|            |Check box,    |Определяет   |+/-    |
|            |image, label, |источник     |       |
|            |picture box,  |данных для   |       |
|            |text box      |элемента     |       |
|            |              |управления   |       |
|Default     |Command button|Определяет,  |+/+    |
|            |              |является ли  |       |
|            |              |данная       |       |
|            |              |командная    |       |
|            |              |командной    |       |
|            |              |кнопкой по   |       |
|            |              |умолчанию    |       |
|            |box. Printer  |рисуемой     |-/+    |
|            |object, shape.|линии (точки)|       |
|DrawWidth   |Form, picture |Определяет   |-/+    |
|            |box, Printer  |ширину       |       |
|            |object        |рисуемой     |       |
|            |              |линии (точки)|       |
|Enabled     |Form, MDI     |Определяет   |+/+    |
|            |form, check   |возможность  |       |
|            |box, combo    |доступа к    |       |
|            |box, command  |элементу     |       |
|            |button, data  |(элемент     |       |
|            |control,      |реагирует на |       |
|            |directory list|действия     |       |
|            |box, drive    |пользователя)|       |
|            |list box, file|             |       |
|            |list box,     |             |       |
|            |frame, grid,  |             |       |
|            |horizontal    |             |       |
|            |scroll bar,   |             |       |
|            |image, label, |             |       |
|            |list box,     |             |       |
|            |menu, option  |             |       |
|            |button,       |             |       |
|            |picture box,  |             |       |
|            |text box,     |             |       |
|            |timer,        |             |       |
|            |vertical      |             |       |
|            |scroll bar    |             |       |
|FillColor   |Form, picture |Определяет   |+/+    |
|            |box, Printer  |цвет         |       |
|            |object, shape |заполнения   |       |
|FillStyle   |box. Printer  |заполнения   |       |
|            |object,       |             |       |
|FixedCols,  |Grid          |Число        |+/+ •  |
|Fixed Rows  |              |выделенных   |       |
|            |              |колонок,столб|       |
|            |              |цов          |       |


 
Продолжение табл. 2.1
|Название   |Для каких     |Описание     |Возможн|
|свойства   |элементов     |действия     |ость   |
|           |управления    |             |изменен|
|           |используется  |             |ия     |
|FontBold,  |Form, check   |Вид          |+/+    |
|Fontltalic,|box, combo    |выводимого   |       |
|FontStriket|box, command  |текста(жирный|       |
|hr.        |button, common|, курсив,    |       |
|FontTranspa|dialog, data  |зачеркнутый, |       |
|r.         |control,      |“ясный”)     |       |
|FontUnderli|directory list|             |       |
|ne         |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |label, list   |             |       |
|           |box,          |             |       |
|           |optionbutton, |             |       |
|           |picture box,  |             |       |
|           |Printer       |             |       |
|           |object, text  |             |       |
|           |box           |             |       |
|FontNarne  |Form, check   |Тип шрифта   |+/+    |
|           |box, combo    |выводимого   |       |
|           |box, command  |текста       |       |
|           |button, common|             |       |
|           |dialog, data  |             |       |
|           |control,      |             |       |
|           |directory list|             |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |label, list   |             |       |
|           |box,          |             |       |
|           |optionbutton  |             |       |
|           |picture box.  |             |       |
|           |Printer       |             |       |
|           |object, text  |             |       |
|           |box           |             |       |
|FontSize   |Form, check   |Размер шрифта|+/+    |
|           |box, combo    |выводимого   |       |
|           |box, command  |текста       |       |
|           |button, common|             |       |
|           |dialog, data  |             |       |
|           |control,      |             |       |
|           |directory list|             |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |label, list   |             |       |
|           |box,          |             |       |
|           |optionbutton, |             |       |
|           |picture box,  |             |       |
|           |Printer       |             |       |
|           |object, text  |             |       |
|           |box           |             |       |
|BackColor, |Form, check   |Цвет фона и  |       |
|ForeColor  |box, combo    |основной цвет|       |
|           |box, command  |выводимой    |       |
|           |button (только|информации   |       |
|           |BackColor),   |             |       |
|           |data control, |             |       |
|           |directory list|             |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |label, list   |             |       |
|           |box, OLE      |             |       |
|           |control,      |             |       |
|           |option button,|             |       |
|           |picture box,  |             |       |
|           |Printer object|             |       |
|           |(только       |             |       |
|           |ForeColor),   |             |       |
|           |shape (только |             |       |
|           |BackColor),   |             |       |
|           |text box      |             |       |


Продолжение табл. 2.1
|Название   |Для каких     |             |жность |
|свойства   |элементов     |             |изменен|
|           |управления    |             |ия     |
|           |используется  |             |       |
|Format     |              |Определяет   |-/+    |
|           |              |формат       |       |
|           |              |получаемых и |       |
|           |              |пере         |       |
|GridLines  |Grid          |определяет   |+/+    |
|           |              |видимость    |       |
|           |              |сетки таблицы|       |
|GridLineWid|Grid          |Определяет   |+/+    |
|th         |              |ширину линий |       |
|           |              |сетки таблицы|       |
|Height,    |Form, MDI     |Определяют   |+/+    |
|Width      |form, check   |размеры      |       |
|           |box, combo    |объекта      |       |
|           |box, command  |(высота и    |       |
|           |button, data  |ширина)      |       |
|           |control,      |             |       |
|           |directory list|             |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |              |             |       |
|           |horizontal    |             |       |
|           |scroll bar,   |             |       |
|           |image, label  |             |       |
|Highlight  |Grid          |ку выделенной|+/+    |
|           |              |ячейки       |       |
|           |              |таблицы.     |       |
|           |              |иконки формы |       |
|           |              |в ее         |       |
|           |              |свернутом    |       |
|           |              |состоянии    |       |
|Index      |Check box,    |Определяет   |+/- .  |
|(Control   |combo box,    |индекс       |       |
|Arrays)    |command       |элемента в   |       |
|           |button, common|массиве      |       |
|           |dialog, data  |однородных   |       |
|           |control,      |элементов    |       |
|           |directory list|управления   |       |
|           |box, drive    |             |       |
|           |list box, file|             |       |
|           |list box,     |             |       |
|           |frame, grid,  |             |       |
|           |horizontal    |             |       |
|           |scroll bar,   |             |       |
|           |image, label, |             |       |
|           |line, list    |             |       |
|           |box, menu. OLE|             |       |
|           |control,      |             |       |
|           |option button,|             |       |
|           |              |             |       |
|           |box, timer,   |             |       |
|           |vertical      |             |       |
|           |scroll bar    |             |       |
|Interval   |              |миллисекунд в|+/+    |
|           |              |задаваемом   |       |
|           |              |интервале    |       |
|I tern Data|Combo box,    |Массив       |-/+    |
|           |list box      |значений     |       |
|           |              |индексов     |       |
|           |              |элементов    |       |
|           |              |списка       |       |
|           |              |(первоначальн|       |
|           |              |о значения   |       |
|           |              |индексов     |       |
|           |              |совпадают с  |       |
|           |              |позицией     |       |
|           |              |элемента в   |       |
|           |              |списке)      |       |


 
Продолжение табл. 2.1
|Название   |Для каких     |Описание     |Возможн|
|свойства   |элементов     |действия     |ость   |
|           |управления    |             |изменен|
|           |используется  |             |ия     |
|KeyPreview |Form          |Определяет,  |+/+    |
|           |              |вызываются ли|       |
|           |              |процедуры    |       |
|           |              |обработки    |       |
|           |              |события      |       |
|           |              |клавиатуры   |       |
|           |              |формы перед  |       |
|           |              |событиями    |       |
|           |              |клавиатуры   |       |
|           |              |элементов    |       |
|           |              |управления   |       |
|LargeChange|Horizontal    |Определяет   |       |
|           |scroll bar,   |изменение при|       |
|           |vertical      |щелчке мыши  |       |
|           |scroll bar    |по полю      |       |
|           |              |линейки      |       |
|           |              |прокрутки    |       |
|           |              |между движком|       |
|           |              |и стрелкой   |       |
|SmallChange|Horizontal    |Определяет   |+/+    |
|           |scroll bar,   |изменение при|       |
|           |vertical      |щелчке мыши  |       |
|           |scroll bar    |по стрелке   |       |
|Left, Top  |Form, MDI     |Определяют   |+/+    |
|           |form, check   |координату   |       |
|           |box, combo    |верхнего     |       |
|           |box, command  |левого угла  |       |
|           |button, common|элемента     |       |
|           |dialog, data  |управления   |       |
|           |control,      |(Left-       |       |
|           |directory list|расстояние до|       |
|           |box, drive    |левой        |       |
|           |list box, file|границы, Тор-|       |
|           |list box,     |расстояние до|       |
|           |frame, grid,  |верхней      |       |
|           |horizontal    |границы)     |       |
|           |scroll bar,   |             |       |
|           |image, label, |             |       |
|           |list box, OLE |             |       |
|           |control,      |             |       |
|           |option button,|             |       |
|           |picture box,  |             |       |
|           |shape, text   |             |       |
|           |box, timer,   |             |       |
|           |vertical      |             |       |
|           |scroll bar    |             |       |
|Linkltem   |Label, picture|Определяет   |+/+    |
|           |box, text box |спецификацию |       |
|           |              |данных,      |       |
|           |              |передаваемых,|       |
|           |              |в элемент от |       |
|           |              |других       |       |
|           |              |приложений   |       |
|           |              |(DDE)        |       |
|List       |Combo box,    |Определяет   |-/+    |
|           |directory list|список       |       |
|           |box, drive    |элементов    |       |
|           |list box, file|окна         |       |
|           |list box, list|             |       |
|           |box           |             |       |
|Listlndex  |Combo box,    |Определяет   |-/+    |
|           |directory list|индекс       |       |
|           |box, drive    |выбранного   |       |
|           |list box, file|элемента     |       |
|           |list box, list|списка       |       |
|           |box           |             |       |
|Max, Min   |Horizontal    |Определяет   |+/+    |
|           |scroll bar,   |максимальное |       |
|           |vertical      |и минимальное|       |
|           |scroll bar    |значение     |       |
|           |              |линейки      |       |
|           |              |прокрутки    |       |


Продолжение табл. 2.1
|            |Для каких     |Описание     |Возможн|
|            |элементов     |действия     |ость   |
|            |управления    |             |изменен|
|            |используется  |             |ия     |
|MaxButton,  |Form          |Наличие      |+/-    |
|Min Button  |              |кнопки       |       |
|            |              |максимизации |       |
|            |              |и минимизации|       |
|Max Length  |Text box      |Определяет   |+/+    |
|            |              |максимальное |       |
|            |              |число        |       |
|            |              |символов     |       |
|MousePointer|Form, check   |Определяет   |+/+    |
|            |box, combo    |тип указателя|       |
|            |box, command  |мыши при его |       |
|            |button, data  |перемещении  |       |
|            |control,      |по элементу  |       |
|            |directory list|             |       |
|            |box, drive    |             |       |
|            |list box, file|             |       |
|            |list box,     |             |       |
|            |frame,        |             |       |
|            |horizontal    |             |       |
|            |scroll bar,   |             |       |
|            |image, label, |             |       |
|            |list box,     |             |       |
|            |option button,|             |       |
|            |picture box,  |             |       |
|            |Screen object,|             |       |
|            |text box,     |             |       |
|            |vertical      |             |       |
|            |scroll bar    |             |       |
|MultiLine   |Text box      |Определяет   |+/-    |
|            |              |многострочное|       |
|            |              |текстовое    |       |
|            |              |окно         |       |
|MultiSeIect |File list box,|Возможность и|+/-    |
|            |list box      |способ       |       |
|            |              |множественног|       |
|            |              |о выбора     |       |
|Name        |Все элементы  |Определяет   |+/-    |
|            |управления и  |имя элемента,|       |
|            |формы         |используемое |       |
|            |              |при написании|       |
|            |              |программы    |       |
|Newlndex    |Combo box,    |Индекс       |-/-    |
|            |list box      |добавляемого |       |
|            |              |в список     |       |
|            |              |элемента     |       |
|Parent      |Check box,    |Определяет   |-/-    |
|            |combo box,    |форму, на    |       |
|            |command       |которой      |       |
|            |button,       |находится    |       |
|            |directory list|элемент      |       |
|            |box, drive    |             |       |
|            |list box, file|             |       |
|            |list box,     |             |       |
|            |frame, grid,  |             |       |
|            |horizontal    |             |       |
|            |scroll bar,   |             |       |
|            |image, label, |             |       |
|            |line, list    |             |       |
|            |box, menu, OLE|             |       |
|            |control,      |             |       |
|            |option button,|             |       |
|            |picture box,  |             |       |
|            |shape, text   |             |       |
|            |box, timer,   |             |       |
|            |vertical      |             |       |
|            |scroll bar    |             |       |
|            |Text box      |Определяет   |+/+    |
|            |              |шифровку     |       |
|            |              |выводимых в  |       |
|            |              |окне символов|       |


 
Продолжение табл. 2.1
|Название   |Для каких     |Описание     |Возможн|
|свойства   |элементов     |действия     |ость   |
|           |управления    |             |изменен|
|           |используется  |             |ия     |
|PasteOK    |OLE control   |Определяет   |-/-    |
|           |              |возможность  |       |
|           |              |ввода из     |       |
|           |              |Clipboard    |       |
|Path       |Арр object,   |Путь в       |-/-    |
|           |directory list|файловой     |       |
|           |box, file list|системе      |       |
|           |box           |             |       |
|Pattern    |File list box |Выводимое имя|-/+    |
|           |              |файла        |       |
|Picture    |Form, image,  |Определяет   |+/+    |
|           |OLE control,  |выводимую    |       |
|           |picture box   |картинку     |       |
|Prev       |Арр object    |Определяет,  |-/-    |
|Instance   |              |что объект - |       |
|           |              |приложение   |       |
|           |              |уже запущено |       |
|PrinterDefa|Common dialog |Определяет   |       |
|ult        |(print dialog)|выбор        |       |
|           |              |принтера по  |       |
|           |              |умолчанию    |       |
|Readonly   |Data control, |Определяет   |+/+    |
|           |file list box |указатель на |       |
|           |              |открытие базы|       |
|           |              |данных только|       |
|           |              |на чтение или|       |
|           |              |в списке     |       |
|           |              |файлов есть  |       |
|           |              |файлы с      |       |
|           |              |атрибутом    |       |
|           |              |ReadOnly     |       |
|RecordCount|Table object. |Определяет   |-/-    |
|           |Dynaset       |число записей|       |
|           |object,       |             |       |
|           |Snapshot      |             |       |
|           |object        |             |       |
|Recordset  |Data control  |Определяет   |-/+    |
|           |              |источник     |       |
|           |              |данных       |       |
|RecordSourc|Data control  |Определяет   |+/+    |
|e          |              |источник     |       |
|           |              |данных       |       |
|RowHeight  |Grid          |Определяет   |-/+    |
|           |              |высоту       |       |
|           |              |выделенной   |       |
|           |              |строки       |       |
|ScaleHeight|Form, MDI     |Определяет   |+/+    |
|,          |form, picture |число единиц |       |
|ScaleWidth |box, Printer  |измерения по |       |
|           |object        |вертикали и  |       |
|           |              |горизонтали  |       |
|ScaleLeft, |Form, picture |Определяет   |+/+    |
|ScaleTop   |box, Printer  |координаты   |       |
|           |object        |верхнего     |       |
|           |              |левого утла  |       |
|ScaleMode  |ScaleMode     |Определяет   |+/+    |
|           |              |единицы      |       |
|           |              |измерения    |       |
|           |              |координат    |       |
|Scroll Bars|MDI form,     |Определяет   |+/-    |
|           |grid, text box|наличие      |       |
|           |              |линейки      |       |
|           |              |прокрутки    |       |
|SelCount   |List box      |Определяет   |-/+    |
|           |              |число        |       |
|           |              |выделенных   |       |
|           |              |элементов    |       |
|           |              |списка       |       |


Продолжение табл 2 1
|Название   |Для каких    |Описание     |Возможн|
|свойства   |элементов    |действия     |ость   |
|           |управления   |             |изменен|
|           |используется |             |ия     |
|Selected   |File list    |Определяет   |-/+    |
|           |box, list box|выделенные   |       |
|           |             |элементы     |       |
|           |             |списка       |       |
|SelEndCol, |Grid         |Определяет   |-/+    |
|SelStartCol|             |начало и     |       |
|,          |             |конец        |       |
|SelEndRow, |             |выделенных   |       |
|SelStartRow|             |ячеек        |       |
|Sel Length,|Combo box,   |Определяют   |-/+    |
|SelStart,  |text box     |длину        |       |
|SelText    |             |выделения,   |       |
|           |             |начальную    |       |
|           |             |позицию и    |       |
|           |             |выделение    |       |
|Shortcut   |Menu         |Определение  |+/-    |
|           |             |клавиш       |       |
|SizeMode   |OLE control  |Определяет   |+/+    |
|           |             |преобразовани|       |
|           |             |е размера для|       |
|           |             |представления|       |
|Sorted     |Combo box,   |Определяет   |+/-    |
|           |list box     |упорядочение |       |
|           |             |элементов в  |       |
|           |             |списке по    |       |
|           |             |алфавиту или |       |
|           |             |по порядку   |       |
|           |             |ввода        |       |
|Source Doc |OLE control  |Имя файла    |+/+    |
|Source I   |OLE control  |Определение  |+/+    |
|tern       |             |данных       |       |
|Style      |Combo box    |Определяет   |+/-    |
|1          |             |тип          |       |
|           |             |комбинированн|       |
|           |             |ого списка   |       |
|Tablndex   |Check box,   |Определяет   |+/-    |
|           |combo box,   |индекс       |       |
|           |command      |элемента в   |       |
|           |button,      |массиве      |       |
|           |directory    |элементов    |       |
|           |list box,    |управления   |       |
|           |drive list   |             |       |
|           |box, file    |             |       |
|           |list box,    |             |       |
|           |frame, grid, |             |       |
|           |horizontal   |             |       |
|           |scroll bar,  |             |       |
|           |label, list  |             |       |
|           |box, option  |             |       |
|           |button,      |             |       |
|           |picture box, |             |       |
|           |text box,    |             |       |
|           |vertical     |             |       |
|           |scroll bar   |             |       |
|TabStop    |Check box,   |Определяет   |+/+    |
|           |combo box,   |быструю      |       |
|           |command      |установку    |       |
|           |button,      |фокуса       |       |
|           |directory    |             |       |
|           |list box,    |             |       |
|           |drive list   |             |       |
|           |box, file    |             |       |
|           |list box,    |             |       |
|           |grid,        |             |       |
|           |horizontal   |             |       |
|           |scroll bar   |             |       |
|           |list box,    |             |       |
|           |option       |             |       |
|           |button,      |             |       |
|           |picture box, |             |       |
|           |text box,    |             |       |
|           |vertical     |             |       |
|           |scroll bar   |             |       |


 
Продолжение табл. 2.1
|Название |Для каких      |Описание      |Возможно|
|свойства |элементов      |действия      |сть     |
|         |управления     |              |изменени|
|         |используется   |              |я       |
|Tag      |Form, MD1 form,|Определяет    |+/+     |
|         |check box,     |идентификацию |        |
|         |combo box,     |внешних данных|        |
|         |command button,|              |        |
|         |common dialog, |              |        |
|         |data control,  |              |        |
|         |directory list |              |        |
|         |box, drive list|              |        |
|         |box, file list |              |        |
|         |box, frame,    |              |        |
|         |grid,          |              |        |
|         |horizontal     |              |        |
|         |scroll bar,    |              |        |
|         |image, label,  |              |        |
|         |line, list box,|              |        |
|         |menu, OLE      |              |        |
|         |control, option|              |        |
|         |button, picture|              |        |
|         |box, shape,    |              |        |
|         |text box,      |              |        |
|         |timer, vertical|              |        |
|         |scroll bar     |              |        |
|Text     |Combo box, list|Определяет    |+/+     |
|         |box, text box  |данные        |        |
|         |               |текстового    |        |
|         |               |окна или      |        |
|         |               |выбранного    |        |
|         |               |элемента      |        |
|         |               |списка        |        |
|Top Row  |Grid           |Определяет    |-/+     |
|         |               |максимальное  |        |
|         |               |количество    |        |
|         |               |выделенных    |        |
|         |               |строк         |        |
|UpdateOpt|OLE control    |Определяет    |-/+     |
|ions     |               |изменение     |        |
|         |               |данных        |        |
|         |               |элемента при  |        |
|         |               |изменении     |        |
|         |               |данных в      |        |
|         |               |связанном     |        |
|         |               |объекте       |        |
|Value    |Check box,     |Значение      |-/+     |
|         |command button,|состояния     |        |
|         |field object,  |элемента      |        |
|         |horizontal     |управления    |        |
|         |scroll bar,    |              |        |
|         |option button, |              |        |
|         |vertical scroll|              |        |
|         |bar            |              |        |
|Verb     |OLE control    |Спецификация  |+/+     |
|         |               |действий при  |        |
|         |               |запуске       |        |
|         |               |OLE—объекта   |        |
|Visible  |Form, MDI form,|Определяет    |+/+     |
|         |check box,     |видимость     |        |
|         |combo box,     |элемента      |        |
|         |command button,|              |        |
|         |common dialog, |              |        |
|         |data control,  |              |        |
|         |directory list |              |        |
|         |box, drive list|              |        |
|         |box, file list |              |        |
|         |box, frame,    |              |        |
|         |grid,          |              |        |
|         |horizontal     |              |        |
|         |scroll bar,    |              |        |
|         |image, label,  |              |        |
|         |line, list box,|              |        |
|         |menu, OLE      |              |        |
|         |control, option|              |        |
|         |button, picture|              |        |
|         |box, shape,    |              |        |
|         |text box,      |              |        |
|         |vertical scroll|              |        |
|         |bar            |              |        |


Окончание табл. 2.1
|Название   |Для каких     |             |жность |
|свойства   |элементов     |             |изменен|
|           |управления    |             |ия     |
|           |используется  |             |       |
|WindowState|Form, MD1 form|Определяет   |+/+    |
|           |              |видимость    |       |
|           |              |формы при    |       |
|           |              |выполнении   |       |
|           |              |программы    |       |
|Wordwrap   |Label         |Определяет   |+/-    |
|           |              |направление  |       |
|           |              |(вертикальное|       |
|           |              |или          |       |
|           |              |горизонтально|       |
|           |              |е) изменения |       |
|           |              |поля метки   |       |
|           |              |при ее       |       |
|           |              |заполнении   |       |
|           |              |текстом      |       |
|XI, Yl, X2,|Line          |Определяют   |+/+    |
|Y2         |              |начальные и  |       |
|           |              |конечные     |       |
|           |              |координаты   |       |


Каждому диалоговому элементу (форме и элементам управления) в Visual Basic
поставлен в соответствие определенный набор событий, происходящих в период
выполнения программы. Например, событие Load (Загрузка) происходит при
загрузке формы, событие Clik (Щелчок) вызывается щелчком кнопки мыши,
событие DblClick (Двойной щелчок) вызывается двойным щелчком кнопки мыши и
т.д.
В табл. 2.2 приводится список событий, элементы управления, для которых они
определены, и краткое описание действия.
Более подробную информацию о приведенных в таблице событиях и особенностях
их использования можно найти в встроенной справочной системе Visual Basic.
Каждому приведенному в таблице событию ставится в соответствие процедура
обработки события (процедура (procedure) - в языках программирования набор
операторов, выполняемых при вызове процедуры). Событие может вызывать при
наличии в приложении процедуры обработки данного события программируемое
изменение данных. Как было показано выше. Visual Basic содержит
автоматически формируемые заготовки для таких процедур (первый и последний
операторы процедур) в поле для записи программы (вызываются из окна проекты
(Project) Главного меню). Имя процедуры формируется автоматически и состоит
из двух частей, разделенных подчеркиванием: имя выделенного диалогового
элемента и имя выделенного события.
Таблица 2.2
|Название    |Элементы       |Описание действия  |
|события     |управления, для|                   |
|            |которых        |                   |
|            |используется   |                   |
|            |события        |                   |
|Activate,   |Form, MD1 form |Активизация (окно  |
|Deactivate  |               |формы становится   |
|            |               |активным),         |
|            |               |дезак-тивизация    |
|            |               |формы              |
|Change      |Combo box,     |Изменение          |
|            |directory list |содержания         |
|            |box, drive list|элементов          |
|            |box, horizontal|управления         |
|            |scroll bar,    |(например, набор   |
|            |label, picture |символа в текстовом|
|            |box, text box, |окне)              |
|            |vertical scroll|                   |
|            |bar            |                   |
|Click       |Form (кроме MD1|Одинарный щелчок   |
|            |form), check   |мыши по            |
|            |box, combo box,|управляющему       |
|            |command button,|элементу           |
|            |directory list |                   |
|            |box, file list |                   |
|            |box, frame,    |                   |
|            |grid, image,   |                   |
|            |label, list    |                   |
|            |box, menu, OLE |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box  |                   |
|DblClick    |Form (кроме MD1|Двойной щелчок мыши|
|            |form), combo   |по управляющему    |
|            |box, file list |элементу           |
|            |box, frame,    |                   |
|            |grid, image,   |                   |
|            |label, list    |                   |
|            |box, OLE       |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box  |                   |
|DragDrop    |Form, MD1 form,|После перемещения  |
|            |check box,     |управляющего       |
|            |combo box,     |элемента мышью и   |
|            |command button,|отпускания клавиши |
|            |data control,  |мыши (определяет   |
|            |directory list |результирующую     |
|            |box, drive list|позицию элемента). |
|            |box, file list |                   |
|            |box, frame,    |                   |
|            |grid,          |                   |
|            |horizontal     |                   |
|            |scroll bar,    |                   |
|            |image, label,  |                   |
|            |list box, OLE  |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |
|DragOver t  |Form, MD1 form,|Процесс перемещения|
|•’•         |check box,     |управляющего       |
|            |combo box,     |элемента мышью     |
|            |command button,|(определяет текущую|
|            |data control,  |позицию элемента)  |
|            |directory list |                   |
|            |box, drive list|                   |
|            |box, file list |                   |
|            |box, frame,    |                   |
|            |grid,          |                   |
|            |horizontal     |                   |
|            |scroll bar,    |                   |
|            |image, label,  |                   |
|            |list box, OLE  |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |


Продолжение табл. 2.2
|Название    |Элементы       |Описание действия  |
|события     |управления, для|                   |
|            |которых        |                   |
|            |используется   |                   |
|            |события        |                   |
|Drop Down   |Combo box      |Результат выделения|
|            |(кроме случая, |элементов в        |
|            |когда свойство |комбинированном    |
|            |Style равно 1) |списке перед       |
|            |               |каким-либо         |
|            |               |действием          |
|Error       |Data control   |Ошибка при         |
|            |               |обращении к базе   |
|            |               |данных             |
|GotFocus    |Form (кроме MDI|Активизация        |
|            |form), check   |элемента управления|
|            |box, combo box,|(установка фокуса  |
|            |command button,|на элемент). В     |
|            |directory list |Windows в каждый   |
|            |box, drive list|момент только один |
|            |box, file list |элемент экрана     |
|            |box, grid,     |является активным, |
|            |horizontal     |т.е. с ним возможна|
|            |scroll bar,    |работа             |
|            |list box, OLE  |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |
|KeyDown,    |Form, check    |Нажатие или        |
|KeyUp       |box, combo box,|отпускание         |
|            |command button,|какой-либо клавиши |
|            |directory list |в момент, когда    |
|            |box, drive list|элемент управления |
|            |box, file list |находится в фокусе |
|            |box, grid,     |                   |
|            |horizontal     |                   |
|            |scroll bar,    |                   |
|            |list box, OLE  |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |
|KeyPress    |Form, check    |Нажатие и          |
|            |box, combo box,|отпускание какой-1 |
|            |command button,|либо клавиши       |
|            |directory list |                   |
|            |box, drive list|                   |
|            |box, file list |                   |
|            |box, grid,     |                   |
|            |horizontal     |                   |
|            |scroll bar,    |                   |
|            |list box, OLE  |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |
|LinkClose   |Form, MDI Form,|Конец динамического|
|            |label, picture |обмена данными     |
|            |box, text box  |(DDE) с другими    |
|            |               |приложениями       |
|LinkError   |Form, MDI Form,|Ошибка при         |
|            |label, picture |динамическом обмене|
|            |box, text box  |данными (DDE) с    |
|            |               |другими            |
|            |               |приложениями       |
|LinkExecute |Form, MDI Form |Командная строка   |
|            |               |посылается в       |
|            |               |приложение, с      |
|            |               |которым            |
|            |               |устанавливается    |
|            |               |режим динамического|
|            |               |обмена данными     |
|            |               |(DDE)              |


 
Продолжение табл. 2.2
|Название    |Элементы       |Описание действия  |
|события     |управления, для|                   |
|            |которых        |                   |
|            |используется   |                   |
|            |события        |                   |
|LinkNotify  |Label, picture |Изменение данных в |
|            |box, text box  |приложении, с      |
|            |               |которым установлен |
|            |               |режим динамического|
|            |               |обмена данными     |
|            |               |(DDE)              |
|LinkOpen    |Form, MDI Form,|Инициализация связи|
|            |label, picture |с приложением для  |
|            |box, text box  |динамического      |
|            |               |обмена данными     |
|            |               |(DDE)              |
|Load        |Form, MDI form |Загрузка формы     |
|LostFocus   |Form, check    |Дезактивизация     |
|            |box, combo box,|элемента управления|
|            |command button,|(потеря фокуса     |
|            |directory list |элементом). В      |
|            |box, drive list|Windows в каждый   |
|            |box, file list |момент только один |
|            |box, grid,     |элемент экрана     |
|            |horizontal     |является активным, |
|            |scroll bar,    |т.е. с ним возможна|
|            |list box, OLE  |работа (активизация|
|            |control, option|другого элемента)  |
|            |button, picture|                   |
|            |box, text box, |                   |
|            |vertical scroll|                   |
|            |bar            |                   |
|Mouse Down  |Form (кроме MDI|Нажатие. Отпускание|
|Mouse Up    |form), check   |кнопки мыши        |
|            |box, command   |                   |
|            |button, data   |                   |
|            |control,       |                   |
|            |directory list |                   |
|            |box, file list |                   |
|            |box, frame,    |                   |
|            |grid, image,   |                   |
|            |label, list    |                   |
|            |box, option    |                   |
|            |button, OLE    |                   |
|            |control,       |                   |
|            |picture box,   |                   |
|            |text box       |                   |
|MouseMove   |Form (кроме MDI|Перемещение мыши   |
|            |form), check   |                   |
|            |box, command   |                   |
|            |button, data   |                   |
|            |control,       |                   |
|            |directory list |                   |
|            |box, file list |                   |
|            |box, frame,    |                   |
|            |grid, image,   |                   |
|            |label, list    |                   |
|            |box, OLE       |                   |
|            |control, option|                   |
|            |button, picture|                   |
|            |box, text box  |                   |
|Paint       |Form, picture  |Новое представление|
|            |box            |на экране после    |
|            |               |изменения размера  |
|            |               |или после удаления |
|            |               |закрывающего       |
|            |               |объекта на экране  |
|PathChange  |File list box  |Изменение перехода |
|            |               |(установка нового  |
|            |               |имени файла        |
|            |               |(FileName) или     |
|            |               |перехода (Path))   |
|PattemChange|File list box  |Изменение модели   |
|            |               |названия файла     |
|            |               |(например, .)      |


Окончание табл. 2.2
|            |которых        |Описание действия  |
|            |используется   |                   |
|            |события        |                   |
|Query Unload|Form, MD1 form |Предшествует       |
|            |               |закрытию формы или |
|            |               |приложения         |
|Reposition  |Data control   |Запись становится  |
|            |               |текущей            |
|Resize      |Form, MDI form.|при изменении      |
|            |OLE control,   |размера элемента   |
|            |picture box    |                   |
|RowColChange|Grid           |Переход от одной   |
|            |               |ячейки             |
|Scroll      |Horizontal     |Перемещение движка |
|            |scroll bar.    |линейки прокрутки  |
|            |vertical scroll|                   |
|            |bar            |                   |
|SelChange   |Grid           |диапазона ячеек к  |
|            |               |другому .          |
|Timer       |Timer          |времени            |
|Unload      |Form, MD1 Form |                   |
|            |               |                   |
|Updated     |OLE control    |Изменение данных в |
|            |               |объекте OLE        |
|Validate    |Data control   |Перед тем, как     |
|            |               |другая запись      |
|            |               |становится текущей |


В языках программирования, поддерживающих объектно-ориентированное
программирование, введены так называемые методы. Несмотря на то, что Visual
Basic нельзя считать настоящим объектно-ориентированным языком, для него
включены методы для форм и элементов управления. Методы работают как
процедуры или функции (т.е. обеспечивают выполнение тех или иных действий
или изменение данных соответственно стандартному алгоритму, реализующему
данный метод), но принадлежат конкретным объектам.
Для того чтобы вызвать метод, указывается имя объекта и через точку имя
метода:
{ [имя_формы. ] 1 [имя_формы. ] имя_элемента_управления. }имя_метода
Например, Debug.Print обеспечивает вывод (печать) текста в специальном
отладочном окне (Debug - имя окна, Print - имя
           метода).
           В табл. 2.3 приводится список методов, элементы управления, для
           которых они определены, и краткое описание действия.
           Таблица 2.3
|Название    |Элементы        |Описание действия |
|метода      |управления, для |                  |
|            |которых         |                  |
|            |используются    |                  |
|            |события         |                  |
|Addltem     |List box, combo |Добавление        |
|            |box, grid       |элемента в список |
|            |control.        |(List box, combo  |
|            |                |box) или строки   |
|            |                |(grid)            |
|AddNew      |Data control    |Очистка буфера и  |
|            |                |подготовка        |
|            |                |создания новой    |
|            |                |записи            |
|Arrange     |MDI Form        |Представление окон|
|            |                |и иконок на MDI   |
|            |                |Form              |
|Circle      |Form, picture   |Рисование дуги,   |
|            |box, Printer    |эллипса или       |
|            |object          |окружности        |
|Clear       |List box, combo |Удаление всех     |
|            |box             |элементов списка  |
|Close       |Data control    |Закрытие базы     |
|            |                |данных            |
|CIs         |Form, picture   |Очистка от        |
|            |box             |графических       |
|            |                |элементов или     |
|            |                |текста            |
|DDEMetods   |Label, picture  |Динамический обмен|
|(LinkExecute|box, text box.  |данных с другими  |
|, LinkSend, |                |приложениями      |
|LinkPoke,   |                |                  |
|LinkRequest)|                |                  |
|Delete      |Data control    |Удаление текущей  |
|            |                |записи            |
|Drag        |Все, кроме Line,|Перемещение       |
|            |Menu, Shape,    |объекта           |
|            |Timer           |                  |
|Edit        |Data control    |Открытие текущей  |
|            |                |записи для        |
|            |                |редактирования    |
|EndDoc      |Printer         |Конец передачи    |
|            |                |документа принтеру|
|Execute     |Data control    |Выполнение запроса|
|            |                |к базе данных     |
|ExecuteSOL  |Data control    |Выполнение SQL    |
|            |                |запроса к базе    |
|            |                |данных            |
|FieldSize   |                |Определение числа |
|            |                |байт в тексте или |
|            |                |двоичных знаков   |
|FindFirst,  |Data control    |Определение       |
|FindLast,   |                |первой, последней,|
|FindNext,   |                |следующей или     |
|Find        |                |предыдущей записи,|
|Previous    |                |соответствующей   |
|            |                |заданному         |
|            |                |критерию. Запись  |
|            |                |делается текущей  |
|GetChunk    |                |Выделенные        |
|            |                |FieldSize число   |
|            |                |байтов или        |
|            |                |двоичных знаков   |
|GetData     |Clipboard       |Работа с буфером  |
|GetFormat   |                |обмена            |
|GetText     |                |                  |


Продолжение табл. 2.3
|Название    |Элементы        |Описание действия |
|метода      |управления, для |                  |
|            |которых         |                  |
|            |используются    |                  |
|            |события         |                  |
|Hide        |Form, MD1 form  |Спрятать форму с  |
|            |                |экрана без ее     |
|            |                |выгрузки          |
|Line        |Form, picture   |Рисование линии   |
|            |box. Printer    |или прямоугольника|
|Move        |Все, кроме timer|Перемещение       |
|            |и menu          |элемента          |
|MoveFirst,  |Data control    |Переход к первой, |
|Move Last,  |                |последней,        |
|MoveNext,   |                |следующей или     |
|Move        |                |предыдущей записи,|
|Previous    |                |соответствующей   |
|            |                |заданному критерию|
|            |                |Запись делается   |
|            |                |текущей           |
|NewPage     |Printer         |Переход при печати|
|            |                |к следующей       |
|            |                |странице          |
|Point       |Form, picture   |RGB               |
|            |box             |(red-green-blue)  |
|            |                |цвет точки        |
|PopupMenii  |Form            |Вывод всплывающего|
|            |                |меню в заданной   |
|            |                |точке формы       |
|Print       |Form, picture   |Печать строки на  |
|            |box. Debug,     |объекте           |
|            |Printer         |                  |
|PnntForm    |Form            |Побитовая         |
|            |                |распечатка формы  |
|PSct        |Form, picture   |Точка на объекте  |
|            |box. Printer    |                  |
|Refresh     |Все             |Немедленная       |
|            |                |перерисовка на    |
|            |                |экране            |
|Remove Item |List box, combo |Удаление элемента |
|            |box, grid       |списка или ячеек в|
|            |                |сетке             |
|Scale       |Form, picture   |Координаты объекта|
|            |box. Printer    |                  |
|Set Data    |Clipboard       |Запись графики в  |
|            |                |Clipboard с       |
|            |                |заданным форматом |
|SetFocus    |CheckBox,       |Установка курсора |
|            |ComboBox,       |                  |
|            |CommandButton,  |                  |
|            |DiiListBox,     |                  |
|            |DnveListBox,    |                  |
|            |FileListBox,    |                  |
|            |Form,           |                  |
|            |HScrollBar,     |                  |
|            |ListBox,        |                  |
|            |MDIForm, OLE    |                  |
|            |Container,      |                  |
|            |OptionBiitton.  |                  |
|            |PictureBox, Text|                  |
|            |Box. VScrollBar |                  |
|SetText     |Clipboard       |Запись строки в   |
|            |                |Clipboard с       |
|            |                |заданным форматом |
|Show        |Form            |Вывод формы на    |
|            |                |экран             |
|TextHcight  |Form, picture   |Высота текстовой  |
|            |box. Printer    |строки при печати |
|            |                |с текущим шрифтом |
|TextWidth   |Form, picture   |Ширина текстовой  |
|            |box. Printer    |строки при печати |
|            |                |с текущим шрифтом |


 
Окончание табл 2 3
|Название    |Элементы        |Описание действия |
|метода      |управления, для |                  |
|            |которых         |                  |
|            |используются    |                  |
|            |события         |                  |
|Update      |Data control    |Сохранение буфера |
|            |                |копирования       |
|UpdateContro|Data control    |Контроль изменения|
|ls          |                |данных            |
|Update      |Data control    |Сохранение        |
|Record      |                |изменения данных  |
|ZOrder      |App, CheckBox,  |Расположение на   |
|            |ComboBox,       |переднем или      |
|            |CommandButton,  |заднем плане      |
|            |DirListBox,     |                  |
|            |DnveListBox,    |                  |
|            |FileListBox,    |                  |
|            |Form, Frame,    |                  |
|            |Grid,           |                  |
|            |HScrollBar,     |                  |
|            |Image, Label,   |                  |
|            |Line, ListBox,  |                  |
|            |MDIForm,        |                  |
|            |OptionBiitton,  |                  |
|            |PictureBox,     |                  |
|            |Shape, TextBox, |                  |
|            |VScrollBar      |                  |


Более подробную информацию об использовании методов можно получить из
встроенной в Visual Basic справочной системы.
Рассмотрим более подробно использование свойств, процедур обработки событий
и методов для форм и элементов управления при создании графического
интерфейса приложений.
2.2.  ФОРМА
Каждая форма в период выполнения соответствует отдельному окну. Внешний вид
и поведение формы на экране определяется значением свойств. Эти свойства
определяются в окне свойств на этапе разработки формы или операторами
программы в процессе выполнения приложения. Наиболее часто используемыми
свойствами являются:
BorderStyle (Тип границ) принимает одно из четырех стандартных значений,
изменение которых допускается только на этапе разработки формы и определяют
вид и поведение формы в процессе выполнения приложения (но не влияют на вид
формы при разработке):
О - None - границы окна отсутствуют;
/ - Fixed Single - окно постоянного размера, определяемого на этапе
разработки, с одинарной линией границы; 2 - Sizeable - окно изменяемого
размера с двойной линией границы;
3 - Fixed Double - окно постоянного размера, определяемого на этапе
разработки, с двойной линией границы.
           Caption (Название) - заголовок окна.
           ControlBox (Кнопка системного меню) принимает одно из двух
           стандартных значений, изменения которых допускается только на
           этапе разработки формы:
           True - кнопка системного меню в левом верхнем углу окна;
           False - кнопка отсутствует.
Enabled (Доступ) принимает одно из двух стандартных значений:
           True - форма доступна (по умолчанию);
           False - форма недоступна (блокирована от воздействия любых
           событий, связанных с мышью или клавиатурой).
FontName (Имя), FontSise (Размер), FontBold (Полужирный), Fontltalic
(Курсив), FontStrikethru (Зачеркнутый), FontUnderline (Подчеркнутый)
определяют шрифты выводимого на форму текста.
Размер шрифта определяется в пунктах (point) - стандартная типографская
единица измерения (1 пт равен 1/72 дюйма или 0,035 см).
BackColor (Цвет фона) и ForeCoIor (Основной цвет) определяют цвет фона
формы и выводимого на форму текста или изображения.
Height (Высота), Width (Ширина) определяют высоту и ширину формы. Единица
измерения 1 twip равна 1/1440 дюйма или 0,0018 см.
MaxButton (Кнопка развернуть), MinButton (Кнопка свернуть) опеделяют
наличие на форме соответствующих кнопок.
Name (Имя) - имя формы. Используется при написании текста программы и
изменяться не может.
Тор (Верхняя координата), Left (Левая координата) определяют координаты
левого верхнего угла формы.
Visible (Видимость), WindowsState (Состояние окна) определяют видимость
формы на экране (True - видима, False - невидима) и отображение (0 -
нормальное, 1 - свернутое в значок, 2 -развернутое).
Наиболее часто используются следующие события:
Click (Щелчок) или DblClick (Двойной щелчок) мышью в любом месте формы
вызывает процедуры обработки события Form_Click или Form_DblClick.
KeyPress (Нажатие клавиши) вызывает процедуру обработки события
Form_KeyPress, на вход которой подается значение ASCII-кода нажатой
клавиши.
Load (Загрузка) - событие происходит при загрузке формы (например, при
запуске приложения) и удобна для инициализации свойств и переменных при
запуске программы.
Из методов рассмотрим:
CIs очищает форму от всех изображений и текста. Синтаксис:
           [имя формы.] CIs;
           Print выводит текст на форму и очень удобен для вывода на форму
           простой информации. Синтаксис:
           [имя формы.]Print [[выражение][{;!,}]]...
Если после выражения стоит “;”, то за последним символом предыдущего
выражения сразу выводится следующее. Если стоит “,”, то вывод производится
по зонам, каждая из которых имеет размер 14 символов. Отсутствие после
последнего выражения “;” или “,” переводит позицию вывода в начало
следующей строки.
Пример программы.
Создадим новый проект с именем project2.mak, в котором открывается форма
Forml. Используя кнопку View Code, откроем окно программы и введем тексты
программ для процедур обработки событий Click и KeyPress (рис. 2.1) для
объекта Form.
При щелчке кнопки мыши в любом месте формы исходное положение и размер
формы (заданы по умолчанию) изменяются, задается полужирный шрифт и его
размер для вывода на форму начала текста.
При нажатии клавиши Enter изменяются исходное положение и размер формы,
задается шрифт “курсив” и его размер, которым выводится на форму
продолжение текста. Запустив проект на выполнение кнопкой Run Главного
меню, увидим пустую форму. Щелкнув на ней мышью, увидим изменение положения
и размеров и начало текста. Нажав клавишу Enter, увидим измененную форму с
окончанием текста (рис. 2.2). [pic]
Рис. 2.
2.3.  МЕТКА
Label (Метка) - поле, заполняемое текстовой информацией, которая может
изменяться только программно. Наиболее часто используемыми свойствами
являются:
Alignment (Выравнивание) определяет размещение названия метки. По умолчанию
значение равно 0 - выравнивание по левой границе (Left Justify). Значение
равно / - выравнивание по правой границе (Right Justify), 2 — выравнивание
по центру (Center).
[pic]
Рис. 2.2
AutoSize (Автоподстройка размера) позволяет автоматически-подогнать размер
поля метки под размер текста, заданный свойством Caption (значение True).
При значении False размер не меняется, лишние символы отсекаются.
BorderStyle (Тип границ) принимает значение 0 (по умолчанию) - контур поля
метки отсутствует или / - контур поля метки очерчивается одинарной линией.
Caption (Название) - текст поля метки.
Enabled (Доступ) принимает по умолчанию значение True. При значении False
текст метки поблекнет и обработка событий, связанных с действием мыши,
блокируется.
FontBold, Fontltalic, FontName, FonfSize, FontUnderline определяют шрифты
текста метки.
BackColor (Цвет фона) ForeColor (Основной цвет ) определяют цвет фона поля
метки и выводимого текста.
Height (Высота), Width (Ширина) определяют высоту и ширину поля метки.
Name (Имя) - имя метки. Используется при написании текста программы и
изменяться не может. Top (Верхняя координата). Left (Левая координата)
определяют координаты левого верхнего угла поля метки.
Visible (Видимость) определяет видимость метки (True -видима, False -
невидима).
События Click (Щелчок) или DblClick (Двойной щелчок) мышью в поле метки
вызывает процедуры обработки события Label_Click или Label_DblClick.
2.4.  ТЕКСТОВОЕ ОКНО
Текстовое окно определяет область экрана для ввода или вывода информации и
обладает уже рассмотренными свойствами BorderStyle (Тип границ), Enabled
(Доступ), FontBold, Fontltalic, FontName, FontSize, FontUnderline,
BackColor (Цвет фона), ForeColor (Основной цвет ), Height (Высота), Width
(Ширина), Name (Имя), Top (Верхняя координата), Left (Левая координата),
Visible (Видимость), которые имеют те же функции и значения параметров.
MaxLength (Максимальная длина) по умолчанию принимает значение 0, что
позволяет вводить или выводить любое количество символов. Другое значение
определяет возможное число символов.
MultiLine (Несколько строк) может принимать значение False (позволяет
вводить или выводить одну строку текста) или True (позволяет вводить или
выводить несколько строк). При вводе, нажимая клавишу Enter, можно
продолжать набор текста с новой строки.
ScrollBars (Линейки прокрутки) принимает значения О (линеек прокрутки в
текстовом окне нет), 7 (появляется горизонтальная линейка прокрутки), 2
(появляется вертикальная линейка прокрутки), 3 (появляются горизонтальная и
вертикальная линейки прокрутки).
SelLenght (Количество, выделенных символов), SelStart (Начало выделеннго
блока), SelText (Выделенный текст) доступны только при написании текста
программы и не содержатся в списке свойств. Определяют соответственно число
выделенных символов, позицию первого символа выделяемого блока (О—первый
символ, 1 - второй и т.д.), выделенную строку.
Text (Текст) также не содержится в списке свойств. Определяет вводимую или
выводимую в текстовое окно строку.
[pic]
Из событий чаще используются:
Change (Изменение) вызывается изменением свойства Text пользователем или
программно. Набор каждого нового символа определяет данное событие и вызов
процедуры его обработки.
Click (Щелчок) или DblClick (Двойной щелчок) мышью в текстовом окне
вызывает соответствующие процедуры обработки события Имя_окна_С\\с\(. или
Ямя_о/сна_ОЬ1СИсР.
GotFocus (Установка фокуса) и LostFocus (Уход из фокуса) определяются тем,
что в Windows-приложениях в каждый момент может быть активен только один
объект (объект находится в фокусе). События определяются соответственно
активизацией и дезактивизацией объекта, в данном случае - активизацией или
дезактивизацией текстового окна.
Метод SetFocus позволяет установить курсор в выбранное текстовое окно.
Синтаксис: [имя текстового окна.} SetFocus
Пример программы.
Разместим на форме управляющие элементы: два текстовых окна (okhoi и окно2)
и метку (рис. 2.3).
Свойства управляющих элементов заданы по умолчанию. Введем для первого
текстового окна (Text 1) процедуры
обработки событий GotFocus и LostFocus (рис. 2.4). В первой и второй
процедурах первые два оператора изменяют размеры текстового окна. Третий
оператор изменяет цвет фона окна (функция QBColor с параметром 0 определяет
черный цвет фона окна, параметр 7 определяет белый цвет). Четвертый
оператор определяет текст метки.
Щелкнув мышью по кнопке Run Главного меню запустим программу. Если щелкнуть
мышью по первому текстовому окну (активизировать данный управляющий
элемент), то первоначальная форма на рис. 2.3 примет другой вид (рис. 2.5).
Щелчок мышью по второму окну (первое окно становится не активным) изменяет
вид формы (рис. 2.6). [pic]
Рис. 2.4
2.5.  Командная кнопка
Command button (Командная кнопка) обычно активизирует какую-то операцию
(вызывает выполнение команды) и обладает уже рассмотренными свойствами
BackColor (Цвет фона). Caption (Заголовок), Enabled (Доступ). FontBold,
Fontltalic, FontName, FontSize, FontUnderline, Height (Высота), Width
(Ширина), Name (Имя), Top (Верхняя координата). Left (Левая координата).
Visible (Видимость), которые имеют те же функции и значения параметров.
Cancel (Отмена) принимает значения True или False. Присвоение этому
свойству значение True даст при нажатии клавиши Esc тот же эффект, что и
щелчок мышью по кнопке. Значение True может иметь только одна командная
кнопка на форме.
Default (По умолчанию) принимает значения True или False. Присвоение этому
свойству значение True даст при нажатии клавиши Enter тот же эффект, что и
щелчок мышью по кнопке (например, щелчок мышью по кнопке ОК диалогового
окна эквивалентен нажатию клавиши Enter). Значение True может иметь только
одна командная кнопка на форме.
[pic]
Командная кнопка реагирует на уже рассмотренные события Click (Щелчок),
Keypress (Нажатие клавиши), GotFocus (Установка фокуса) и LostFocus (Уход
из фокуса), которые вызывают соответствующие Процедуры обработки этих
событий.
Часто используется метод SetFocns, который позволяет установить курсор в
выбранную командную кнопку. Синтаксис:
[имя_Командной кнопки.] SetFocus.
2.6.  ФЛАЖОК
Управляющий элемент Check box (Флажок) устанавливает или сбрасывает
определенный параметр: если на квадратике флажка обзднетач-зттачок X, то-
параметр включен (активен), нет значка - параметр выключен. Щелчок мышью по
флажку устанавливает или сбрасывает параметр. Любой флажок функционально
независим от других флажков.
Флажок обладает уже рассмотренными свойствами:
BackColor (Цвет фона). Caption (Заголовок), Enabled (Доступ), FontBold,
Fontltalic, FontName, FontSize, FontUnderline. Height (Высота), Width
(Ширина), Name (Имя). Top (Верхняя координата), Left (Левая координата).
Visible (Видимость), которые имеют те же функции и значения параметров.
Value (Состояние) принимает значения: 0 - флажок не помечен; 7 - флажок
установлен; 2 - флажок затенен (имеет блеклый вид и не доступен для
действия с ним).
Флажок реагирует на события Click (Щелчок), Keypress (Нажатие клавиши),
GotFocus (Установка фокуса) и LostFocus (Уход из фокуса), которые вызывают
соответствующие процедуры обработки этих событий.
Метод SetFocus позволяет привлечь внимание и установить курсор в выбранный
флажок. Синтаксис:
[имя_ Флажка.] SetFocus.
2.7.  ПЕРЕКЛЮЧАТЕЛЬ
Управляющий элемент Option Button (Переключатель) обычно задается в группе
и позволяет выбрать какой-либо вариант из нескольких возможных. Если один
из переключателей группы активен, остальные отключены.
Переключатель обладает уже рассмотренными свойствами:
BackColor (Цвет фона), Caption (Заголовок), Enabled (Доступ), FontBoId,
Fontltalic, FontName, FontSize, FontUnderline, Height (Высота), Width
(Ширина), Name (Имя), Top (Верхняя координата), Left (Левая координата),
Visible (Видимость), которые имеют те же функции и значения параметров.
Value (Состояние) принимает значения: True - переключатель активен, в
центре кружка жирная точка; False - не активен.
Переключатель реагирует на уже рассмотренные события Click (Щелчок),
DblClick (Двойной щелчок). Keypress (Нажатие клавиши), GotFocus (Установка
фокуса) и LostFocus (Уход из фокуса), которые вызывают соответствующие
процедуры обработки этих событий.
Метод SetFocus применяется аналогично рассмотренному для флажка.
Прямой вывод текста или графики на командные кнопки, флажки и переключатели
не допускается.
2.8.  РАМКА
Управляющий элемент Frame (Рамка) служит для разделения на форме различных
групп объектов. Применительно к переключателям, рамки влияют и на поведение
кнопок. Для остальных элементов формы рамки выступают в роли визуального
разделителя и функции, регулирующей доступ к группе объектов.
Рамка обладает уже рассмотренными свойствами: BackColor (Цвет фона).
Caption (Заголовок), FontBoId, Fontltalic, FontName, FontSize,
FontUnderline, Height (Высота), Width (Ширина), Name (Имя), Top (Верхняя
координата), Left (Левая координата), Visible (Видимость), которые имеют те
же функции и значения параметров.
Enabled (Доступ) принимает значение True или False (при значении False
текст в названии рамки и границы блекнут).
Рамка реагирует на рассмотренные события Click (Щелчок), DblClick (Двойной
щелчок), которые вызывают соответствующие процедуры обработки этих событий.
Прямой вывод текста или графики в рамку не допускается. Пример программы.
Гипотетическая форма предназначена для управления в диалоге платежами
(оплата наличными или с использованием кредитных карточек, вид используемой
карточки, оплата рублями). Она содержит командную кнопку для начала работы
с формой, рамку, объединяющую два переключателя для выбора наличной или
безналичной оплаты, рамку, выделяющую флажок для определения оплаты
рублями, рамку, объединяющую два переключателя для выбора вида кредитной
карточки, и имеет вид, показанный на рис. 2.7.
Названия управляющих элементов (Начало, Метод платежа, Наличными, Кредитная
карта, Наличными, Рубли, Кредитная карта, Мостбанк, VISA) заданы значением
свойств Caption перечисленных управляющих элементов формы.
Пои выводе формы на экран все элементы управления кроме командной кнопки
должны быть неактивными (не реагировать на какие-либо события). Для этого
свойству Enabled всех элементов управления, кроме командной кнопки, в окне
свойств каждого из них присваивается значение False.
[pic]  Щелчок мышью по кнопке Начало должен активизировать рамку выбора
метода платежа и находящиеся в ней переключатели. Щелчок мышью по
переключателю Наличными должен активизировать соответствующую рамку и
находящийся в ней флажок. Щелчок мышью по переключателю Кредитная карта
должен активизировать соответствующую рамку и находящиеся в ней
переключатели (рамка Наличными и находящийся в ней флажок должны при этом
стать не активными).
Такая логика работы диалоговой формы обеспечивается заданием следующего
программного кода (используемые имена управляющих элементов Commandl
(Управляющая кнопка), Checkl (Флажок), Framel, Frame2, Frame3 (Рамки),
Optioni, Option2, Option3, Option4 (Переключатели) вводятся Visual Basic по
умолчанию):
           Private Sub Commandl Click() Framel.Enabled = True
           Optioni.Enabled = True Option2.Enabled = True
           End Sub
           Private Sub Optionl_Click()
           Frame2.Enabled = True
           Checkl.Enabled = True
           Frame3.Enabled = False
           Option3.Enabled = False
           Option4.Enabled = False End Sub
           Private Sub Option2_Click()
           Frame3.Enabled = True
           Option3.Enabled = True
           Option4.Enabled = True
           Frame2.Enabled = False
           Checkl.Enabled = False End Sub
Процедура Sub Commandl_Click обработки события, связанного с щелчком мыши
по командной кнопке, обеспечивает активизацию рамки Метод платежа и
расположенных в ней переключателей.
Процедура Sub Optionl_ciick обеспечивает активизацию рамки “Наличные” и
расположенный в ней флажок “Рубли”. Процедура Sub Option2_ciick
обеспечивает активизацию рамки
“Кредитная карта” и расположенных в ней переключателей. Последние два
оператора в каждой процедуре обеспечивают деакти-визацию соответственно
рамок “Кредитная карта” и “Наличные” и элементов в них, если они ранее были
активны.
[pic]
Рис. 2.8
[pic]  Запустив данное приложение кнопкой Run Главного меню, увидим
исходную форму (неактивные элементы обозначены бледно) (рис. 2.8). Щелкнув
мышью по командной кнопке “Начало”, увидим форму (рис. 2.9). Щелкнув мышью
по переключателю “Наличными”, активизируем рамку “Наличными” и флажок
“Рубли”, который можно пометить (рис. 2.10). Щелчок мыши по переключателю
“Кредитная карта” активизирует соответствующую рамку и переключатели в ней,
один из которых можно активизировать (рис. 2.11).
2.9.  СПИСОК
Управляющий элемент List box (Список) позволяет вывести на экран список
вариантов (элементов списка—list entry), которые могут быть выбраны щелчком
мыши. Минимальная высота списка составляет три строки. Длинный список,
который не может быть выведен на экран целиком, снабжается линейкой
прокрутки (scroll bars). Содержимое списка нельзя задать на этапе
разработки формы.
Кроме уже рассмотренных свойств: BackCoIor (Цвет фона), Enabled (Доступ),
FontBold, Fontltalic, FontName, FontSize, FontStrikethru, FontUnderline,
ForeColor (Основной цвет), Height (Высота), Width (Ширина), Name (Имя), Top
(Верхняя координата), Left (Левая координата), Visible (Видимость), которые
имеют те же функции и значения параметров, специфические свойства
следующие:
Columns (Колонки) по умолчанию принимает значение 0 и элементы списка
располагаются в одну колонку. Если значение больше 0, то элементы списка
размещаются в соответствующем
числе колонок. Необходимая линейка прокрутки добавляется автоматически.
MultiSelect (Множественное выделение) определяет, сколько элементов можно
одновременно выделить в списке. Принимает значения: 0 — None - допускается
выделение толька одного дле-мента; / — Simple - допускается выделение
нескольких элементов;
2 - допускается ускоренное выделение нескольких элементов (щелчок мышью на
первом выделяемом элементе, а затем, удерживая клавишу Ctrl,—на последний
элемент).
Selected (Признак выделения) является массивом, значения которого либо True
(элемент списка выделен), либо False (элемент списка не выделен). Для
определения статуса конкретного элемента можно использовать выражение
имя списка. Selected (значение индекса).
Sorted (Сортировка) принимает значения True (элементы в списке
располагаются по английскому алфавиту) или False (элементы в списке
располагаются в порядке их ввода).
Кроме того, для списка определен ряд свойств, которые не включены в список
свойств (не могут быть определены на этапе разработки формы), но которые
можно использовать на этапе разработки программного кода:
List (Список) список (массив) из элементов списка, доступ к каждому из
которых обеспечивается записью:
имя cnucica.List (значение индекса).
ListCount (Количество элементов в списке) равно количеству элементов в
списке.
Listlndex (Индекс текущего элемента в списке) определяет номер последнего
выделенного подсветкой элемента в списке (первого — 0, второго — / и т.д.).
Если элемент не выделен, значение равно /. Установка значения в тексте
программы приводит к подсветке соответствующего элемента.
Text (Текст) содержит последний выделенный элемент списка.
Список реагирует на уже рассмотренные события: Click (Щелчок), DblClick
(Двойной щелчок), KeyPress (Нажатие клавиши), GotFocus (Установка фокуса),
LostFocus (Потеря фокуса), которые вызывают соответствующие процедуры
обработки этих событий.
Наиболее используемые методы:
Addltem включает элемент (строку текста) в список. Синтаксис:
имя спнс/co.AddItem строка {.индекс}.
[pic]  Если индекс отсутствует, то элемент (строка) автоматически ставится
в конец списка. Если значение свойства Sorted равно True, то индекс должен
отсутствовать—элемент размещается в соответствии с алфавитным порядком.
Clear удаляет из списка все элементы. Синтаксис:
имя списка.(Леш
Removelen убирает из списка элемент с заданным индексом. Синтаксис:
имя списка. Removelen индекс.
2.10. КОМБИНИРОВАННЫЙ СПИСОК
Управляющий элемент Combo Box (Комбинированный список) объединяет текстовое
окно (поле ввода) с обычным списком в один элемент управления.
Комбинированный список не позволяет размещать элементы в несколько колонок.
Комбинированный список обладает уже рассмотренными свойствами: BackColor
(Цвет фона). Enabled (Доступ), FontBold, Fontltalic, FontName, FontSize,
FontStrikethru, FontUnderline, ForeColor (Основной цвет). Height (Высота),
Width (Ширина), Name (Имя), Top (Верхняя координата), Left (Левая
координата), Visible (Видимость), Sorted (Сортировка), которые имеют те же
функции и значения параметров.
Style (Тип) определяет тип комбинированного списка и принимает значения 0
(раскрывающийся комбинированный список), 7 (простой комбинированный
список), 2 (раскрывающийся список).
Раскрывающийся список вначале отображает одну строку со стрелкой справа.
Щелчок мыши на стрелке открывает весь список, в котором можно выбрать один
из элементов, как в обычном списке. Примером раскрывающегося списка
является список Object в окне Properties. He позволяет вводить информацию в
текстовое окно.
Простой комбинированный список содержит поле для ввода и нераскрывающийся
список под этим полем в окне постоянного размера. Позволяет либо вводить
текст в поле, либо выбирать элемент из списка.
Раскрывающийся комбинированный список выглядит как раскрывающийся, но
позволяет и выбирать элемент и вводить текст.
Text определяет либо текст выделенного в списке элемента, либо текст поля
ввода.
Комбинированный список реагирует на уже рассмотренные события Click
(Щелчок), DblClick (Двойной щелчок), Keypress (Нажатие клавиши), GotFocus
(Установка фокуса), LostFocus (Потеря фокуса), которые вызывают
соответствующие процедуры обработки этих событий.
Методы:
Addltem включает элемент (строку текста) в комбинированный список.
Синтаксис:
имя списка Addltem строка [, индекс}
Если индекс отсутствует, то элемент автоматически ставится в конец
комбинированного списка. Если значение свойства Sorted равно True, то
индекс должен отсутствовать - элемент размещается в соответствии с
алфавитным порядком.
Clear удаляет из списка все элементы. Синтаксис:
имя списка. Clear
Removelen убирает из списка элемент с заданным индексом. Синтаксис:
имя списка. Removelen индекс
Пример программы.
Создадим новый проект и разместим на форме следующие управляющие элементы:
два списка наверху и три комбинированных списка внизу, снабдив их
заголовками (метки).
[pic]  Имена элементов задаются по умолчанию (последовательно слева направо
списки: List! и List2, комбинированные списки:
Combol, Combo 2, СотЬоЗ).
Значения свойства Style: для комбинированного списка Combo! зададим /, для
Combo2 - 0, для Combo 3 - 2. Размер окна для комбинированного списка Combol
нужно определить при размещении элемента на форме. Форма имеет вид,
показанный на рис. 2.12.
Определим следующие процедуры обработки событий:
Listl.AddItem List2.Text List2.Removeltem List2.Listlndex End Sub
Процедура Form_Load обеспечивает формирование исходной информации списков.
Процедуры Listl_DblClick и List2_DblClick обеспечивают при двойном щелчке
мыши по одному из элементов списка перенос этого элемента в другой список.
Процедуры Combo l_Key Press и Со mbo2_Key Press обеспечивают ввод
набранного текста в строке ввода при нажатии клавиши Enter в
соответствующий список. После запуска программы выводится исходная форма
(рис. 2.13). Двойной щелчок мыши по одному из элементов верхних списков
переносит этот элемент в другой список.
Элементы левого комбинированного списка сразу же выведены в окно. Имеется
возможность выбора элемента из списка и ввода нового элемента в список,
набрав его в строке ввода.
Элементы центрального комбинированного списка появляются в раскрывающемся
окне после щелчка мыши по стрелке. Имеется возможность выбора элемента из
списка и ввода нового элемента в список, набрав его в строке ввода.
Элементы правого комбинированного списка появляются в раскрывающемся окне
после щелчка мыши по стрелке. Имеется возможность только выбора элемента из
фиксированного списка (рис. 2.14, 2.15).
[pic]
Рис. 2.13
Private Sub Combol_KeyPress(keyascii As      Integer)
If keyascii = 13 Then
combol.Addltem combol.Text
End If End Sub
Private Sub Combo2_KeyPress(keyascii As      Integer)
If keyascii = 13 Then
combo2.Addltern combo2.Text
End If End Sub
Private Sub Form_Load ()
Listl.AddItem “Иванов И.И.” Listl.AddItem “Петров П.П.” Listl.AddItem
“Сидоров С.С.”
сотЬоЗ.Addltem “Неудовл.” combo 3.Add!tern “Удовлетв.” combo3.Addltem
“Хорошо” сотЬоЗ.Addltem “Отлично” combo2.Addltem “Михайлов М.М.”
combo2.Addltem “Николаев Н.Н.” combol.Addltem “Физика” combol.Addltem
“Математика” combol.Addltem “История” End Sub
Private Sub Listl_DblClick() List2.Addltem Listi.Text Listi.Removeltem
Listi.Listlndex
End Sub
Private Sub List2_DblClick() 2.11. ЛИНЕЙКИ ПРОКРУТКИ
Horizontal Scroll Bar и Vertical Scroll Bar (Горизонтальные и вертикальные
линейки прокрутки) позволяют задавать значение какой-либо величины в
определенном диапазоне и узнавать значение этой величины по позиции движка
на линейке.
Линейки прокрутки обладают уже рассмотренными свойствами: Enabled (Доступ),
Height (Высота), Width (Ширина), Name (Имя), Тор (Верхняя координата), Left
(Левая координата), Visible (Видимость), которые имеют те же функции и
значения параметров.
LargeChange (Постраничное изменение) определяет изменение текущей позиции
движка и соответственно задаваемую величину (Value) при щелчке внутри
линейки прокрутки.
Мах (Максимум) определяет максимальное значение задаваемой величины
(соответствует крайней правой или нижней позиции движка). Диапазон
значений: от -32768 до 32767.
Min (Минимум) определяет минимальное значение задаваемой величины
(сответствует крайней левой или верхней позиции движка). Диапазон значений:
от -32768 до 32767.
SmallChange (Построчное изменение) определяет изменение текущей позиции
движка и соответственно задаваемую величину (Value) при щелчке по одной из
стрелок направления прокрутки.
Value (Текущая позиция) отражает текущее значение и позицию движка. При
изменении свойства программным путем движок перемещается в соответствующую
позицию. При выходе за пределы, установленные Мах и Min, выводится
сообщение об ошибке.
Линейки прокрутки реагируют на уже рассмотренные события Click (Щелчок),
DblClick (Двойной щелчок), Keypress (Нажатие клавиши), GotFocus (Установка
фокуса), LostFocus (Потеря фокуса), которые вызывают соответствующие
процедуры обработки этих событий.
Scroll (Прокрутка) непрерывно генерируется при перемещении (мышью) движка
по линейке и позволяет динамически отслеживать его позицию.
Change (Изменение) возникает при изменении позиции движка и определяет его
конечное положение.
Рассмотренные ранее методы неприменимы к линейкам прокрутки.
[pic]
[pic]  Пример программы.
Откроем новую форму и разместим на ней два текстовых окна и горизонтальную
линейку прокрутки (рис. 2.16).
В окне Properties (Свойства) для объекта Hscrolll (имя присваивается по
умолчанию) зададим следующие значения свойств:
LargeChange = 10, Мах = 100, Min = 0, SmallChange = 5.
[pic]
Рис. 2.16
Определим процедуры обработки событий НScrolll_Change и HScrolll_Scroll:
           .Private Sub HScrolll_Change()
           Textl.Text = HScrolll.Value End Sub
           Private Sub HScrolll_Scroll()
           Text2.Text = HScrolll.Value End Sub
Событие Change отражается в верхнем окне, событие Scroll - в нижнем окне.
После запуска программы щелчок мыши по полю вызывает перемещение движка и
изменение значения в верхнем окне на 10 единиц (Large Change), щелчок мыши
по стрелкам вызывает перемещение движка и изменение значения в верхнем окне
на 5 единиц (Small Change). Эти изменения не отражаются в нижнем окне (рис.
2.17). Перемещение движка мышью вызывает изменение значения, которые
отражаются в обоих окнах (рис. 2.18).
2.12. ПРИМЕР СОЗДАНИЯ ФОРМЫ
Создадим форму со следующими элементами управления (рис. 2.19):
    . Комбинированный список типа 1, содержащий названия фирм-производителей
      автомобилей.
[pic]
Рис.2.17    Рис. 2.18
    . Метка с названием      “Фирма”, поясняющая назначение комбинированного
      списка.
    . Комбинированный список типа 2, содержащий названия цветов автомобилей.
    . Метка с названием “Цвет”, поясняющая назначение комбинированного
      списка.
    . Метка без названия для отображения цвета, который выбирается в
      комбинированном списке.
    . Комбинированный список типа 0, содержащий названия исполнения
      автомобилей.
    . Рамка с названием “Тип кузова”, объединяющая три переключателя для
      выбора типа кузова: “Кабриолет”, “Седан”, “Универсал”.
    . Рамка с названием “Мощность”, содержащая горизонтальную линейку
      прокрутки для изменения мощности двигателя, две метки для отображения
      мощности двигателя в киловаттах и лошадиных силах, две поясняющие
      метки с названиями “кВт” и “Л.С.” (для горизонтальной линейки
      прокрутки на этапе проектирования формы задаются значения свойств:
      минимальное значение - 30 (min = 30), максимальное значение - 500 (max
      == 500), текущее значение - 75 ( value = 75), малый шаг - 1
      (SmallChange = 1), большой шаг - 10 (LargeChage = 10), недоступна
      (enabled = false)) и командную кнопку “Зафиксировать”.
    . Рамка с названием “Список фирм - дистрибьюторов”, объединяющая список,
      флажок, метку с названием “Двухколоночный”, поясняющую назначение
      флажка, и четыре командных кнопки (“Очистить список”, “Удалить
      название “, “Добавить название”, “Зафиксировать”). [pic]
    . Флажки с названиями “Дизель” и “Металлик”.
    . Текстовое окно для описания модели с горизонтальной и вертикальной
      линейками прокрутки.
    . Метка с названием “Описание модели”.
    . Командная кнопка “Конец”.
При проектировании формы значения свойств, определяющих основные цвета,
цвета фона, вид и размер шрифтов, размеры и расположение управляющих
элементов, задаются разработчиком или определяются по умолчанию.
Элементы управления и процедуры обработки событий должны обеспечить
следующую логику работы с формой.
[pic]
На этапе загрузки формы заполняются комбинированные списки “Фирма”, “Цвет”,
“Исполнение”, а также простой список “Фирм продавцов”:
|Список     |Список |Список     |Список        |
|“Фирмы”    |“Цвет” |“Исполнение|“Фирмы-продавц|
|           |       |”          |ы”            |
|Мерседес   |Красный|Люкс       |АЗР           |
|Ауди       |Белый  |Стандарт   |Musa Motors   |
|Фольксваген|Черный |Минимум    |ЛадаИнжинеринг|
|Шкода      |Синий  |           |Sawa          |
|           |       |           |              |
|Рено       |Зеленый|           |ЛогоВАЗ       |
|Ситроен    |       |           |              |
|           |       |           |              |
|Лада       |       |           |              |
|           |       |           |              |


Заполнение производится в процедуре Form_Load с помощью методов Additem.
В той же процедуре задаются названия меток Label4 и Label5 (соответственно
значение мощности в киловаттах и в лошадиных силах). Эти названия должны
изменяться соответственно значению текущего положения движка линейки
прокрутки. Для преобразования мощности из киловатт в лошадиные силы и
обратно надо использовать соотношение: 1Л.С.=735,499 Вт.
Для определения названия метки необходимо преобразовать численное значение
свойства HScrolll. Value в текст с использованием встроенной функции Str$
(выражение Str$(HScrolll. Value)).
В таблицах приведены операторы процедур обработки событий примера и
поясняющие их комментарии.
|Процедура             |Комментарии            |
|Sub Form Load()       |                       |
|                      |                       |
|LabeM.Caption =       |Определение названия   |
|Str$(HScrolll. Value *|(свойство              |
|735.499 / 1000)       |                       |
|Label5.Caption =      |Caption) метки Label4  |
|Str$(HScrolll. Value) |Определение названия   |
|                      |метки Label5           |
|Combo 1.Add Item      |Combol - имя списка    |
|“Мерседес”            |“Фирмы”                |
|Combo 1.Add I tern    |Additem - метод,       |
|“Ауди”                |осуществляющий         |
|Combo 1.Add Item      |добавление элементов в |
|“Фольксваген”         |список с               |
|Combol.Additem “Шкода”|указанным именем       |
|Combo 1.Additem “Рено”|“Мерседес” - Значение  |
|                      |добавляемого           |
|Combol.Additem        |элемента               |
|“Ситроен”             |                       |
|Combol.Additem “Лада” |                       |
|                      |Метод Additem одинаково|
|                      |действует              |
|Combo2.AddItem        |и для комбинированных  |
|“Красный”             |списков и              |
|Combo2.AddItem “Белый”|для простых            |
|Combo2.AddItem        |                       |
|“Черный”              |                       |
|Combo2.AddItem “Синий”|                       |
|Combo2.AddItem        |                       |
|“Зеленый”             |                       |
|СотЬоЗ.Additem “Люкс” |                       |
|                      |                       |
|Combo3.AddItern       |                       |
|“Стандарт”            |                       |
|Combo3.AddItem        |                       |
|“Минимум”             |                       |
|Listl.Additem “Musa   |                       |
|Motors”               |                       |
|Listl.Additem         |                       |
|“ЛадаИнжинеринг”      |                       |
|Listl.Additem “Sawa”  |                       |
|Listl.Additem “A3P”   |                       |
|Listl.Additem         |                       |
|“ЛогоВАЗ”             |                       |
|End Sub               |                       |
|                      |                       |


 
В результате выполнения процедуры выводится форма (рис. 2.20). На форме
активны только четыре элемента: метка с названием “Фирма”, командная кнопка
“Конец”, текстовое окно “Описание модели” и комбинированный список “Фирма”.
При щелчке по списку он разворачивается и из него можно выбрать название
фирмы-производителя. После выбора фирмы её название заносится в текстовое
окно “Описание модели”, комбинированный список фирм становится неактивным
вместе с меткой “Фирма”, а метка “Цвет”, комбинированный список для выбора
цветов автомобиля и метка отображения выбранного цвета становятся
активными.
Для выполнения указанных действий процедура Combo l_Click() (обработка
события щелчок по списку) содержит следующие операторы:
|Процедура              |Комментарии            |
|Sub Combo lClick()     |Деактивизация          |
|                       |комбинированного       |
|Combol. Enabled ==     |списка путем присвоения|
|False                  |значения               |
|Label 1. Enabled =     |False( ложь ) свойству |
|False                  |Enabled                |
|                       |(Активность)           |
|                       |                       |
|                       |Добавление к значению  |
|                       |текстовой              |
|Text 1.Text = Text     |строки “Описание       |
|1.Text +               |модели”                |
|Combol.Text + Chr$(13) |значения текущего      |
|+ Chr$(10)             |(выбранного)           |
|                       |элемента из            |
|                       |комбинированного       |
|                       |списка “Фирмы”. “+” -  |
|                       |операция               |
|                       |сцепления строк        |
|                       |Chr$(10), Chr$(13) -   |
|                       |функция, ре            |
|                       |зультатом вычисления   |
|                       |которой                |
|                       |является символ с кодом|
|                       |10 и 13                |
|                       |13, 10 - комбинация    |
|                       |символов для           |
|                       |перевода курсора в     |
|                       |начало следую          |
|                       |щей строки текстового  |
|                       |окна.                  |
|                       |Активизация            |
|                       |комбинированного       |
|                       |списка “Цвета” и его   |
|                       |метки                  |
|Combo2. Enabled = True |                       |
|                       |                       |
|Label2. Enabled = True |                       |
|End Sub                |                       |
|                       |                       |


 
После завершения выполнения данной процедуры на форме изменятся элементы
(рис. 2.21). [pic]
Рис. 2.21
[pic]
Рис. 2.22
На форме активны только четыре элемента: метка с названием “Цвет”,
командная кнопка “Конец”, комбинированный список для выбора цвета и
текстовое окно “Описание модели”. При щелчке по списку он разворачивается и
из него можно выбрать цвет для машины.
После выбора цвета его название заносится в текстовое окно “Описание
модели”, комбинированный список цветов становится неактивным вместе с
меткой “Цвет”, а метка “Исполнение” и комбинированный список для выбора
варианта исполнения автомобиля становятся активными (рис. 2.22).
Для выполнения указанных действий процедура Combo2_Click() (обработка
события “Щелчок по списку”) содержит следующие операторы:
[pic]  Коды цветов приведены в следующей таблице:
|Цвет       |Кол цвета            |
|           |&Н 000000 FF&        |
|           |                     |
|           |&HOOFFOOOO&          |
|           |&НООСОСОСО&          |
|           |                     |
|           |&HOOOOFFOO&          |
|           |                     |
|Голубой    |&HOOFFFFOO&          |
|Черный     |&НООООООООО&         |
|Белый      |&HOOFFFFFF&          |
|Желтый     |&HOOOOFFFF&          |


Коды цветов заданы в шестнадцатеричной системе счисления, в которой для
представления чисел используется 16 символов: цифры от 0 до 9 и буквы от А
(эквивалент 10) до F (эквивалент 15). Значимость каждой п-й позиции в
шестнадцате-ричном числе возрастает пропорционально степени \6”n. Например,
десятичное число 419 в шестнадцатеричном представлении записывается 1АЗ:
1*16”2 + 10*16”! + 3*16^0 = 419.
В двоичной системе число 15 записывается 1111, т.е. любой символ
шестнадцатеричного числа можно кодировать четырьмя битами. Память
компьютера разделена на байты (1 байт равен 8 битам) и каждый байт может
хранить любое из 256 (16^1) шестна-дцатеричных чисел: от 0 до FF. Такое
компактное представление информации на основе шестнадцатеричной системы
счисления обусловливает ее широкое использование в программировании.
Шестнадцатеричному числу в Visual Basic предшествуют символы &Н.
Как видно из рис. 2.22, на форме активны четыре элемента:
комбинированный список, соответствующий метке с названием “Исполнение”,
командная кнопка “Конец” и текстовое окно “Описание модели”. При щелчке по
элементу комбинированного списка можно выбрать соответствующий вариант
исполнения для машины. После выбора варианта исполнения его название
заносится в текстовое окно “Описание модели”, комбинированный список
становится неактивным вместе с меткой, а рамка с названием “Тип кузова” и
три переключателя внутри неё - активными (рис. 2.23). Для выполнения
указанных действий процедура Combo3_Click() (обработка события “Щелчок по
списку”) содержит следующие операторы:
[pic]
В результате выполнения данной процедуры на форме произойдут изменения,
показанные на (рис. 2.23). На форме активны шесть элементов: кнопка
“Конец”, рамка “Тип кузова”, текстовое окно “Описание модели” и три
переключателя в рамке.
[pic]
Рис. 2.23 [pic]
В результате форма примет вид, показанный на рис. 2.25. На форме активны:
текстовое окно с названием “Описание модели”, рамка “Список фирм-
дистрибъютеров”, командная кнопка с названием “Очистить список”, командная
кнопка с названием “Добавить название”, текстовая строка для добавления
нового имени в список продавцов и кнопка “Конец”.
При щелчке по флажку “Двухколоночный” список в зависимости от состояния
флажка преобразуется в двухколоночный и обратно. Реализующая процедура
обработки события Check3_Click() содержит следующие операторы:
|Процедура            |Комментарии             |
|Sub Check3 Click()   |Свойство Value элемента |
|IfCheck3.Value = 0   |Check равно 0, если     |
|Then List!.Columns = |флажок не взведен. В    |
|1 Else List 1.Columns|зависимости от значения |
|= 2 End If           |этого свойства          |
|End Sub              |определяется свойство   |
|                     |списка.(Listl.Columns = |
|                     |1 - список              |
|                     |одноколоночный,         |
|                     |Listl.Columns = 2       |
|                     |-список двухколоночный) |


При щелчке по кнопке “Очистить список” из списка фирм удаляются все
элементы с помощью метода Clear, а затем кнопка деактивизируется.
Реализующая процедура Command l_Click() содержит следующие операторы:
|Процедура          |Комментарии               |
|Sub Command I      |Очистка списка Деактивация|
|ClickQ List [.Clear|кнопки очистки списка     |
|Command L Enabled =|Деактивация кнопки        |
|False              |удаления элемента списка  |
|Command3.Enabled = |                          |
|False End Sub      |                          |


[pic]
Рис. 2.25
При щелчке по кнопке “Добавить элемент” содержимое текстовой строки
добавляется в список с помощью метода Additem. Список обладает свойством
автосортировки (добавление происходит в соответствии с упорядоченностью по
алфавиту). Происходит очищение текстовой строки и активизация кнопок
“Удалить элемент” и “Очистить список”. Это обеспечивается следующими
операторами:
|Процедура             |Комментарии            |
|Sub CoiTimand4Click() |Добавление нового имени|
|Listl.AddItem         |в список Очистка       |
|Text2.Text Text2.Text |текстовой строки.      |
|= “” Command [.Enabled|Активизация кнопок     |
|= True Command3.      |“Удалить элемент” и    |
|Enabled = True End Sub|“Очистить список”      |


Для фиксации названия фирмы или удаления его из списка требуется
предварительно щелкнуть мышью по элементу списка. При обработке этого
события проверяется наличие элементов в списке и активизируются кнопки
“Зафиксировать”, “Удалить элемент” и “Очистить список”. Это обеспечивается
следующими операторами:
|Процедура              |Комментарии            |
|Sub Listi Click() If   |Свойство Listlndex     |
|List 1. Listi ndex >= 0|равно номеру           |
|Then                   |выделенного элемента.  |
|Command3.Enabled = True|Если ни один элемент не|
|Command6. Enabled =    |выделен, то его        |
|True End If End Sub    |значение - 0           |
|                       |Активизация кнопки     |
|                       |удаления элемента и    |
|                       |фиксации элемента      |


В результате обработки события “щелчок мыши” по элементу списка форма
примет вид на рис. 2.26.
[pic]
Рис. 2.26
При щелчке по кнопке “Удалить название” удаляется текущий выбранный элемент
из списка, деактивируется кнопка удаления списка и, при условии отсутствия
других элементов в списке, деактивируется кнопка “Очистить список”.
Проверка на пус
тоту списка осуществляется с помощью свойства     ListCount,
значение которого равно числу элементов в списке. Это обеспечивается
следующими операторами:
|Процедура              |Комментарии            |
|Private Sub Command3   |Проверка на выбор      |
|Clic() If Listi. Listi |элемента Удаление      |
|ndex >= 0 Then List 1. |элемента из списка     |
|Remove Item List 1.    |Деактивация кнопки     |
|List! ndex             |удаления элемента      |
|Command3.Enabled =     |списка, так как нет    |
|False End If           |выделенных элементов в |
|If Listi. ListCount = 0|списке Проверка списка |
|Then Command [.Enabled |на пустоту. Если список|
|= False End If End Sub |пуст, то деактивация   |
|                       |кнопки очистки списка  |


При щелчке по кнопке “Зафиксировать” выбранное название фирмы помещается в
текстовое окно “Описание модели”, деактивизируется рамка с названием
“Список фирм-дистрибьюторов” и все управляющие элементы, лежащие внутри
рамки. Процедура обработки события щелчка по кнопке “Зафиксировать” имеет
следующий вид:
[pic]
В результате выполнения этой процедуры форма примет вид, показанный на рис.
2.27. [pic]
Рис. 2.27
На форме остались активными только два управляющих элемента: командная
кнопка “Конец” и тестовое окно “Описание модели”. В текстовое окно можно
добавлять собственный текст и редактировать имеющийся.
При нажатии на кнопку “Конец” работа программы завершается. Это
обеспечивается операторами:
|Процедура            |Комментарии              |
|Sub Command2 Click() |End - оператор завершения|
|End End Sub          |программы                |


 
Тексты всех процедур обработки событий примера:
Private Sub Check2_Click() If Check2.Value = 1 Then
Textl.Text = Textl.Text +   Check2.Caption + Chr$(13) + Chr$(10)
Check2.Enabled = False End If End Sub
Private Sub Check3_Cli.ck() If Check3.Value = 0 Then
Listi.Columns = 1 Else
Listi.Columns = 2 End If End Sub
Private Sub Check4_Click () If Check4.Value = 1 Then
Check4.Enabled = False
Textl.Text = Textl.Text + Check4.Caption + Chr$(13) + Chr$(10) End If End
Sub
Private Sub Combol_Click() Combol.Enabled = False
Textl.Text = Textl.Text + Combol.Text + Chr$(13) + Chr$(10)
Labell.Enabled = False Combo2.Enabled = True Label2.Enabled = True End Sub
Private Sub Combo2_Click() Combo2.Enabled = False Label2.Enabled = False
Private Sub Cornmand4_Click () Listl.AddItem Text2.Text Text2.Text = “”
Commandl.Enabled = True End Sub
•     Private Sub Command2_Click() End End Sub
Private Sub Command5_Click() Check2.Enabled = False Check4.Enabled = False
Frame2.Enabled = False HScroill.Enabled = False Label4.Enabled = False
Label5.Enabled = False Label6.Enabled = False Label7.Enabled = False
Lab.el8 .Enabled = False Commands.Enabled = False
Textl.Text = Textl.Text + Label5.Caption + “Л.С” + Chr$(13) + Chr$(10)
Framel.Enabled = True Listi.Enabled = True Text2.Enabled = True
Command4.Enabled = True Check3.Enabled = True Commandl.Enabled = True End
Sub
Private Sub Command6_Click() ‘If Listl.ListIndex >= 0 Then
Textl.Text = Textl.Text + Listl.Text + Chr$(13) + Chr$(10)
Framel.Enabled = False Listi.Enabled = False Text2.Enabled = False
Command4.Enabled = False Check3.Enabled = False Commandl.Enabled = False
Command6.Enabled = False Commands.Enabled = False End If End Sub
Textl.Text = Textl.Text + Combo2.Text + Chr$(13) + Chr$(10)
If Combo2.Text .= “Красный” Then LabelS.BackColor = &HFF& Elself
Combo2.Text = “Белый” Then LabelS.BackColor = &HFFFFFF Elself Combo2.Text =
“черный” Then LabelS.BackColor = &HO Elself Combo2.Text = “Синий” Then
LabelS.BackColor = &HFFOOOO Elself Combo2.Text = “Зеленый” Then
LabelS.BackColor = &HCOOO&
End If
Combo3.Enabled = True
Label3.Enabled = True
End Sub
Private Sub Combo3_Click() Combo3.Enabled = False Label3.Enabled = False
Textl.Text = Textl.Text + Combo3.Text + Chr$(13) + Chr$(10)
Frame4.Enabled = True ‘ “ Optioni.Enabled = True Option2.Enabled = True
Option3.Enabled = True End Sub
Private Sub Commandl Click () Listi.Clear ~ Commandl.Enabled = False End
Sub
•     Private Sub Command3_Click() If Listl.ListIndex >= 0 Then
Listi.Removeltem Listl.ListIndex
Command3.Enabled = False End If If Listi.ListCount = 0 Then
Commandl.Enabled = False End If End Sub Private Sub Form_Load()
Label4.Caption = Str$(HScrolll.Value * 735.499 / 1000)
Label5.Caption = Str$(HScrolll.Value) Combol.Addltem “Мерседес”
Combol.Addltem “Ауди” Combol.Addltem “Фольксваген” Combol.Addltem “Шкода”
Combol.Addltem “Рено” Combol.Addltem “Пежо” Combol.Addltem “Запорожец”
Combo2.Addltem “Красный” Combo2.Addltem “Бельм” Combo2.Addltem “черный”
Combo2.Addltem “Синий” Combo2.Addltem “Зеленый” Combo3.Addltem “Люкс”
СотЬоЗ.Addltem “Стандарт” Combo3.Addltem “Минимум” Listl.Addltem
“MusaMotors” Listi.Addltem “Savva” Listl.Addltem “A3P” Listl.Addltem
“ЛогоВАЗ” Listl.Addltem “ЛадаИнжениринг” End Sub
Private Sub HScrolll_Change()
Label4.Caption = Str$(HScrolll.Value * 735.499 / 1000)
Labels.Caption = Str$(HScrolll.Value) End Sub
Private Sub Listl_Click() If Listl.Listlndex >= 0 Then Command3.Enabled =
True Command6.Enabled = True End If End Sub
Private Sub Optionl_Click() Frame4.Enabled = False Optioni.Enabled = False
Option2.Enabled = False Option3.Enabled = False
Textl.Text = Textl.Text + Optioni.Caption Chr$(13) + Chr$(10)
Check2.Enabled = True
Check4.Enabled = True
Frame2.Enabled = True
HScrolll.Enabled = True
Label4.Enabled = True
Labels.Enabled = True
Label6.Enabled = True
Label7.Enabled = True
Labei8.Enabled = True
Commands.Enabled = True End Sub
Private Sub Option2_Click() Frame4.Enabled = False Optionl. Enabled = False
Option2.Enabled = False Option3.Enabled = False
Textl.Text = Textl.Text + Option2.Caption + Chr$(13) + Chr$ (10)
Check2.Enabled = True Check4.Enabled = True Frame2.Enabled = True
HScrolll.Enabled = True Label4.Enabled = True Labels.Enabled = True
Label6.Enabled = True Label7.Enabled = True Labels.Enabled = True
Commands.Enabled = True End Sub
Private Sub Option3_Click() Frame4.Enabled = False Optioni.Enabled = False
Option2.Enabled = False Option3.Enabled = False
Textl.Text = Textl.Text + Option3.Caption > Chr$(13) + Chr$ (10)
Check2.Enabled = True Check4.Enabled = True Frame2.Enabled = True
HScrolll.Enabled = True Label4.Enabled = True Ldbel5. Ei-icioled = True
Ldnei6.EnDied = True LdDpl7 . L.Jt,ied = Tr.Je Lctbel8 . Er.dbied = True
CoiTimand . Ј.ndbled = Tru Ei-ici Sub
2.13. МЕНЮ ПОЛЬЗОВАТЕЛЯ
Важным элементом GUI является стандартное меню пользователя. Visual Basic
имеет специальное средство для создания меню пользоваюлеи приложениями -
Menu Editor (Проектировщик меню). Это срелс-жо нозволяег построить меню
соответственно общим принципам рассмо1ренного событпиного управления для
форм и элементов управления. Меню пользоваге-ля создается выстраиванием
элементов меню в соответствии с необходимой их иерархией с помощью
Проектировщика меню.
Для вызова проектировщика меню нужно вызвать команду Menu Editor... из меню
Tools или щелкнуть кнопку Menu Editor на панели инструментов Главного меню.
При этом появится окно Menu Editor (рис.2.28). элемешы которою имеюг
следующее назначение:
    . Caption примеияегся для ввода названии элементов списка меню,
      используемых в диадою (например, Фаил, Edit и т.н.):
для создания разделительной черш (разделяет функциональные группы пунктов
меню) вместо имени вводтся символ “-“;
    . Name иснользуегся для ввода имен элементов списка меню, используемых
      при написании нро1раммы (аналогично свойству Name для форм и элементов
      управления);
    . Index - индекс элемеша списка диало1а в массиве (при использовании
      массива элемента списка диалога);
    . Shortcut - раскрывающийся список комбинаций клавиш, из которого можно
      выбрагь комбинацию “горячих” клавиш эле-менюв списка меню;
    . Windows List - флажок, при установке которого меню содержит список (л
      крытых окон в многооконном приложении (MDI-приложения):
    . HelpConiextID - индекс для поиска в HelpFile;
    . Checked - флажок, при установке когорого помечается пункт выбранною
      меню;
[pic]
Рис 2 2S
    . Enabled - флажок, при установке которого пункт    меню доступен;
    . Visible - флажок, при усгановке которого пункт    меню виден;
    . кнопки     изменения уровня пунктов меню;
[pic]
    . кнопки изменения позиции пунктов меню на одном и том же уровне:
    . Кнопки Next, Insert. Delete обеспечивают переход к следующему пункгу
      меню, вставку и удаление пункта.
Рассмотрим использование проектировщика меню на примере разработки простого
редактора, который обеспечивает ввод и редактирование строк символов,
запись выделенного фрагмента в буфер и всгавку из буфера. Доступ к буферу
обмена можно получить через объект Clipboard, для которого определены
следующие методы:
    . SetText записывает копию выделенного текста в буфер обмена;
    . GetText () возвращает копию текстового содержимого буфера обмена;
    . SetData записывает копию выделенного рисунка в буфер обмена;
    . Get Data () возвращает содержимое (рисунок) буфера обмена;
    . GetFormat () определяет, является ли содержимое буфера обмена текстом
      или рисунком;
    . Clear очищает содержимое буфера обмена.
Разместим на форме (имя - Formi, Caption - Редактор) многострочное
текстовое окно (имя - txlEdilBox), размеры которого совпадают с размером
формы, для ввода и редактирования текста. Меню редактора включает
раскрывающиеся меню: Файл (Новый, Открыть..., Сохранить, Сохранить как....
Выход), Правка (Вырезать, Копировать, Вставить), Справка (О программе). В
скобках указаны пункты соответствующих раскрывающихся меню. Это меню
создается с использованием Menu Editor.
На рис. 2.29 показано окно Menu Design Windows в момент проектирования.
Выделен элемент меню “Копировать” (свойство Caption - ^.Копировать, имя -
mnuEdifCopy, “горячая” клавиша -Ctrl+C). Вставка символа “&” означает
задание “горячей” клавиши. Символы “....” обозначают переход на следующий
уровень иерархии пунктов меню (“Копировать” является подпунктом меню
“Файл”) и задаются кнопками изменения уровня пунктов меню.
Аналогично имени mnuEditCopy образуются имена остальных пунктов меню,
которые используются для записи программы (nmuEditCut, mnuEditPaste,
mnuFileExit, mnuHelpAbout, mnuFileNew, mnuFileOpen, mnuFileSave,
mnuFileSaveAs, mnu File Exit}.
Тексты процедур обработки событий следующие:
           Sub Form_Resize ()
           txtEditBox.Height = ScaleHeight txtEditBox.Width = ScaleWidth
           End Sub
           Sub mnuEditCopy_Click ()
           Clipboard.Clear 'очистить буфер
           Clipboard.SetText txtEditBox.SeiText
           'поместить 'выделенный текст в буфер End Sub
           Sub mnuEditCut_Click ()
           Clipboard.Clear 'очистить буфер Clipboard.SetText
           txtEditBox.SeiText
           'поместить 'выделенный текст в буфер txtEditBox.SeiText = “”
           'удаление выделенного
           'текста End Sub
           Sub mnuEditPaste_Click ()
           txtEditBox.SeiText = Clipboard.GetText() End Sub
           Sub mnuFileExit_Click ()
           If MsgBox(“Выход?”,1+32,”Подтвердить”)=lThen End
           End Sub
           Sub mnuHelpAbout_Click ()
           MsgBox “Мой редактор на Visual Basic”,64,”О программе” • End Sub
           Sub Form_Unload (Cancel As Integer)
           Cancel = 1
           mnuFileExit_Click End Sub
Процедура Form_Resiy (обработка события изменения размера формы)
обеспечивает автоматическое изменение размеров текстового окна при
изменении размеров формы.
Процедура mnuEditCopy_Click (обработка события щелчка мыши по пункту меню
“Копировать”) обеспечивает запись выделенного текста в буфер. Используются
рассмотренные выше методы для объекта Clipboard и методы для текстового
окна (операторы Clipboard. Clear и Clipboard.SetText txtEditBox. SeiText).
Во втором операторе txtEditBox. SeiText присваивается выделенный текст.
[pic]
Рис. 2.29
Процедура mnuEditCut_Click (обработка события щелчка мыши по пункту меню
“Вырезать”) обеспечивает перед удалением сохранение выделенного текста в
буфере.
Процедура mnuEditPaste_Click (обработка события щелчка мыши по пункту меню
“Вставить”) обеспечивает вставку текста из буфера (в данном случае
отсутствие при вставке выделения означает вставку в позицию курсора).
Процедура mniiFileExit_Click (обработка события щелчка мыши по пункту меню
“Выход”) обеспечивает выход из редактора. Оператор End обеспечивает
корректный выход из приложения (закрывает файлы и освобождает память). В
процедуре используется функция MsgBox для вывода окна сообщения. Синтаксис
ее применения следующий:
MsgBox сообщение [, тип окна] [, заголовок окна]
где
сообщение - текст сообщения;
тип окна - это сумма значений, определяющих число и тип кнопок на
диалоговом окне, стиль пиктограмм, используемых в окне, и др. спецификации.
В таблице приведены некоторые значения аргументов и их описание:
|Значение    |Описание                           |
|типа        |                                   |
|0           |Выводить только кнопку OK          |
||           |Выводить кнопки OK и Cancel        |
|2           |Выводить кнопки Abort, Retry,      |
|            |Ignore                             |
|3           |Выводить кнопки Yes, No, Cancel    |
|4           |Выводить кнопки Yes, No            |
|5           |Выводить кнопки Retry, Cancel      |
|16          |Выводить пиктограмму “Стоп”        |
|32          |Выводить пиктограмму “?”           |
|48          |Выводить пиктограмму “!”           |
|64          |Выводить пиктограмму информации    |
|0           |Кнопка по умолчанию - первая       |
|256         |Кнопка по умолчанию - вторая       |
|512         |Кнопка по умолчанию - третья       |
|0           |Программное ведущее диалоговое окно|
|4096        |Системное ведущее диалоговое окно  |


Первая группа значений (0-5) описывает номер и тип кнопок, отображаемых в
диалоговом окне; вторая группа (16, 32, 48, 64) описывает стиль пиктограммы
(иконки); третья группа (0, 256, 512) определяет кнопки по умолчанию;
четвертая группа (0, 4096) определяет выводимые окна сообщения (0 - окно
ввода для окончания работы приложения, 4096 - окно ввода для окончания
работы системы).
В качестве значения аргумента может указываться сумма значений типа по
одному из каждой группы. Например, в операторе
MsgBox “Удалить ?”, 52
значение аргумента 52 является суммой 48 и 4 (48 - вывод пиктограммы с
восклицательным знаком, 4 - кнопки “Yes” и “No”). Функция MsgBox возвращает
следующие значения:
|Константа      |           |                 |
|               |           |                 |
|vbOK           |1          |ОК               |
|               |2          |Cancel           |
|vbAbort        |3          |Abort            |
|vbRetry        |4          |Retry            |
|vblgnore       |5          |Ignore           |
|vbYes          |6          |Yes              |
|vbNo           |7          |No               |


Эти значения можно использовать для обработки результата работы
пользователя с окном MsgBox.
Процедура mnuHelpAbout_Click (обработка события щелчка мыши по пункту меню
“О программе”) обеспечивает вывод окна сообщения.
Процедура Form_Unload (Cancel As Integer) (обработка события щелчка мыши по
кнопке “Закрыть” раскрывающегося стандартного меню формы) обеспечивает
выход с подтверждением. Закрытие формы не обеспечивает корректного
завершения приложения. В этом случае присвоение Cancel =1 предотвращает
закрытие формы и обеспечивает корректный выход через процедуру
mnuFileExit_Click.
[pic]
Рис. 2.30
Разработанная программа имеет меню пользователя и обеспечивает функции
удаления, вставки и копирования при редактировании и выдачу сообщения о
программе (рис. 2.30—2.32).
[pic]
Рис. 2.31
[pic]
Рис. 2.32 Глава 3. Программирование на VISUAL BASIC 4
3.1.  АЛФАВИТ
Visual Basic является языком программирования. Как любой другой язык,
например, русский, английский или язык программирования Pascal, он имеет
свой алфавит, используемый для написания операторов или предложений Visual
Basic. Алфавит Visual Basic включает:
    . 26 латинских букв: А, В, С, D, Е, F, G, H, I, J, К, L, М, N, О, Р, Q,
      R, S, Т, U, V, W, X, Y, Z;
    . 10 арабских цифр: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0;
    . 26 символов: !#$%&л*()+-/\<>=?@_|:'.,“ ” пробел.
Другие символы, определенные на клавиатуре, включая русские, можно
использовать только в строках символов.
3.2.  ДАННЫЕ
3.2.1.      Классификация данных
      Данные характеризуются типом и организацией. Тип данных обобщает
      следующие понятия:
    . размещение в ЭВМ;
    . способ представления;
    . прикладной смысл.
Размещение. Данные и программа в момент выполнения размещаются в
оперативной памяти (ОП) ЭВМ, которая состоит из пронумерованных ячеек,
каждая из которых вмещает 1 байт данных (1 байт состоит из 8 битов, каждый
из которых может содержать элемент двоичных данных - 0 или 1). Номер
определенной ячейки называется адресом. Одного байта для хранения данного
как правило недостаточно и данное занимает непрерывную последовательность
байтов (2, 4, 8 байтов).
Способ представления. Последовательность битов в байтах данного кодирует
всю необходимую информацию, определяющую данное. Правила кодирования и их
реализация в разных ЭВМ определяют способ представления данного. Так, для
числовых данных существует способ представления с фиксированной точкой и с
плавающей точкой.
Прикладной смысл. Определяет возможность использования данных для тех или
иных целей (с арифметическими данными можно производить вычисления, из
символов можно строить слова и предложения).
В Visual Basic 4 определены следующие типы данных:
    . байт (BYTE);
    . логический (BOOLEAN);
    . дата (DATE);
    . короткий целый ( INTEGER);
    . длинный целый (LONG);
    . простой вещественный (SINGLE);
    . удвоенной точности вещественный (DOUBLE);
    . коммерческий (CURRENCY);
    . строковый (STRING);
    . объект (OBJECT);
    . переменный (VARIANT).
В табл. 3.1 приводятся характеристики этих типов данных:
Таблица 3.1
|Тип   |Описание    |Диапазон        |Занимаема|
|данных|            |значении        |я память |
|Byte  |Двоичные    |От 0 до 255     |1 байт   |
|      |данные      |                |         |
|Boolea|Логический  |True или False  |2 байта  |
|n     |            |                |         |
|Intege|Целые числа |От -32768 до    |2 байта  |
|r     |            |32767           |         |
|Long  |Целые числа |От -2 147 483   |4 байта  |
|      |(длинные)   |648 до +2 147   |         |
|      |            |483 647         |         |
|String|Символьный  |От О до         |10 байт +|
|(varia|(переменной |2000000000      |длина    |
|ble-le|длины)      |символов        |строки   |
|ngth) |            |                |         |
|String|Символьный  |От 0 до         |1 байт на|
|(fixed|(фиксированн|2000000000      |1 символ |
|-lengt|ой длины)   |символов        |         |
|h     |            |                |         |
|Curren|Число с     |От              |8 байтов |
|cy    |фиксированно|-22337203685477,|         |
|      |й десятичной|58 до           |         |
|      |точкой      |922337203685477,|         |
|      |            |58              |         |
|Date  |Дата        |От January 1,   |8 байтов |
|      |            |100 до December |         |
|      |            |31, 9999        |         |
|Object|Объект      |                |4 байта  |
|      |            |                |         |
|Single|Вещественные|От± 1.4* Ю-45 до|4 байта  |
|      |числа       |+ 3.4*104-38    |         |
|Double|Вещественные|От+ 4.94* Ю-324 |8 байтов |
|      |числа       |до+ 1.79* Ю-“308|         |
|Varian|Произвольный|Любой из        |Зависит  |
|t     |тип         |перечисленных   |от       |
|      |            |выше            |значения |


Data (Дата) - определяет дату (месяц, день, год).
           Object (Объект) - ссылка на объект (OLE).
           String (Строка) - последовательность ASCII-символов.
           Саггепсу (Валюта) предназначен для финансовых расчетов и имеет
           фиксированную точность до четвертого знака после запятой
           (округляется).
Variant (Варьируемый) способен принимать любые значения (состоят из двух
частей: собственно значения и кода, указывающего исходный тип данного).
Под организацией данных понимается независимость отдельных данных (хранятся
в отдельных непоследовательных ячейках памяти) или их связанность (хранятся
в связанной последовательности ячеек памяти).
Связанными данными в Visual Basic 4 являются массивы (совокупность
связанных данных одного типа) и записи (совокупность связанных данных
разных типов).
3.2.2.      Константы
Константа - данное, значение которого однозначно определяется написанием и
не может быть изменено.
Пример:
3.1415926 6.02ЕЗ (значение 60200) 123 “Visual Basic “ “Иванов “
Для хранения постоянных величин Visual Basic позволяет объявить константы,
т.е. выделить участки памяти, содержимое которых не меняется (при попытке
модификации выдается сообщение об ошибке). Объявление констант
осуществляется оператором
[Public | Private] Const имя [As type] = выражение Имя констант принято
записывать прописными буквами (правила записи имен см. ниже).
Значения ключевых слов следующие:
Public - константу можно использовать в любых процедурах и функциях;
Private - константу можно использовать только внутри модуля (см. ниже), в
котором она определена.
Пример:
           Const /V= 3.1415926
           Const MY_NAME = “Юра “
Тип константы можно не объявлять (устанавливается на основе значения —
Const CODE = 35 автоматически получит тип integer). Однако константа PI в
примере может быть любого из трех типов: single, double или currency. По
умолчанию принимается тип, занимающий наименьший объём памяти. Поэтому
лучше явно указывать тип специальными символами в операторах объявления
констант. Используемые символы показаны в таблице:
|Символ         |Тип данных    |
|объявления типа|              |
|%              |integer       |
|&              |long          |
|1              |single        |
|#              |double        |
|@              |currency      |
|$              |string        |


 
Пример:
           Const ONE& = / (резервирует 4 байта)
           Const ONE# = 1 (резервирует 8 байтов, хранится    в виде числа
           двойной точности с плавающей точкой).
В Visual Basic имеется большое число встроенных констант, значения которых
определены заранее и их можно использовать без предварительного
определения. Примерами таких констант являются:
vbOKCancel = 1 — аргумент функции MsgBox для вывода в диалоговом окне
командных кнопок ОК и Cancel;
vbYesNoCancel = 3 — аргумент функции MsgBox для вывода в диалоговом окне
командных кнопок Yes, No, Cancel;
vbOk = 1 — значение, которое возвращает MsgBox, если пользователь щелкнул
по кнопке ОК в диалоговом окне;
    . vbCancel = 2 - значение, которое возвращает MsgBox, если пользователь
      щелкнул по кнопке Cancel в диалоговом окне.
Полную информацию о встроенных константах можно найти в Object Browser.
Кроме того, в комплекте Visual Basic имеется файл CONSTANT.TXT, содержащий
десятки часто используемых констант. Необходимые константы могут быть
скопированы в программу. 3.2.3. Имена
Имена используются для обозначения объектов в программе (константа является
объектом программы). Правила образования имен:
    . первым символом имени должна быть латинская буква;
    . имя может включать только латинские буквы, цифры и знак подчеркивания
      (_);
    . имя может содержать не более 40 символов;
    . ключевые слова или Reserved word (Зарезервированные слова) не могут
      использоваться в качестве имен (список ключевых слов содержится в
      справочной системе Visual Basic в разделе Reserved word).
Примеры:
Правильные имена Неправильные имена StartTime CM*PER*INCH
А2 23В
color File (ключевое слово) • VariableName BMW_360
Хорошим тоном при программировании на любом языке является осмысленный
выбор имен для объектов программы (присваивать объектам имена,
соответствующие контексту и несущие описательную нагрузку). В качестве
примера можно привести имя процедуры обработки события, связанного с
щелчком мыши по командной кнопке, запускающей программу btnStart_CUck:
первая часть имени состоит из сокращения слова кнопка (button — btn) и
слова Start, вторая часть определяет событие — Click.
3.2.4.      Оператор объявления
Оператор объявления резервирует в памяти место для хранения данных
определенного типа и организации и присваивает ему имя, по которому
производится обращение к данным.
Оператор имеет вид:
{Dim | Global} имя [({описатель})} [As [New] тип} [, имя [([описатель])]
[As [New]w“n] ] . . .
Dim, Global, As, New — ключевые слова (Global используется для объявления
глобальных данных (см. ниже). New используется для создания нового объекта
на основе существующих объектов, например формы);
           имя — имя объекта (имя переменной, массива);
           тип - тип данных;
           описатель — определяет организацию данных    (например, массива,
           см. ниже).
Пример:
Dim Name, YourName As String, N   As   Integer, Money   As Currency,
SiirName As String* 15
(переменная SurName определена как символьная фиксированной длины в 15
символов).
При описании имен прописные и строчные буквы воспринимаются одинаково.
Однако после определения ссылки на эту переменную должны соответствовать
последней форме записи (производится автоматическое преобразование текста
программы).
Visual Basic допускает использование имен без объявления их типа (в этом
случае автоматически определяется тип, требующий для размещения минимальной
памяти), однако целесообразно и является признаком хорошего тона явно
объявлять типы используемых данных.
Из рассмотренных в предыдущей главе примеров программ для работы с формами
и управляющими элементами известно, что любая программа состоит из формы и
элементов управления, которым поставлены в соответствие процедуры. Более
сложные программы могут включать несколько форм.
Существует понятие области действия (scope) данных, определяющее
возможность доступа к тем или данным (например, к переменной) в отдельных
процедурах одной формы или в процедурах, относящихся к разным формам одной
программы.
Если оператор объявления какой-либо переменной находится внутри процедуры
обработки события, то доступ к этой переменной (возможность ее
использования) возможен только в рамках данной процедуры. Такая переменная
называется локальной (local).
Для того чтобы одна и та же переменная могла использоваться в разных
процедурах одной формы, оператор объявления переменных должен быть помещен
в раздел общих объявлений (general), доступ к которому открывается щелчком
мыши по элементу “general” раскрывающегося списка окна Object формы.
Объявленная таким образом переменная имеет статус действующей на уровне
модуля (modul-level variable) и может использоваться (доступна) в любой
процедуре данной формы. Для того чтобы одна и та же переменная могла
использоваться в процедурах разных форм одной программы она должна быть
объявлена как глобальная переменная (global variable). Используется
ключевое слово Global вместо Dim.
Пример:
Global Name, YourName As String, N As Integer, Money As Currency,
SurName As String* 75
Операторы объявления глобальных переменных помещаются в-модулях кода (code
modules, см. ниже) и эти переменные могут использоваться во всей программе.
Схема, иллюстрирующая области действия переменных, показана на рис. 3.1.
В Форме 1 переменная Р объявлена в разделе общих объявлений (general) формы
и может быть использована как в Процедуре X, так и в Процедуре Z. Изменение
значения переменной в одной из процедур влечет за собой изменение и в
другой процедуре.
[pic]
Рис. 3.1
Объявленные переменные И в Процедуре Х и G в Процедуре Z Формы 1 определены
только внутри этих процедур, аналогично переменной G в Процедуре_У Формы 2.
Эти переменные определены только в рамках своих процедур. Более того, для
одноименных переменных G в Процедуре Z и в Процедуре Y выделяются разные
ячейки памяти и изменение значения переменной
G в одной из процедур не влечет изменения значения в другой процедуре.
Переменные А и В определены как глобальные для всей программы и доступны во
всех процедурах Формы 1 и Формы 2. Изменение значения переменных в одной из
процедур одной из форм влечет изменение значений в других процедурах и
формах.
Рассмотренные области действия переменных справедливы и для других
объявляемых данных (констант, пользовательских типов данных, массивов и
др.).
Как было сказано выше, описания глобальных данных помещаются .в модуль
кода. Определения формы и все связанные с ней программы хранятся в
отдельном файле с расширением .FRM. Программы, состоящие из нескольких форм
и соответственно из нескольких таких файлов, размещаются в файлах модулей
кода с расширением. Такие файлы создаются при выборе в меню Insert
(Вставить) команды Module (Создать модуль) или при щелчке мыши на
одноименной кнопке панели инструментов.
3.2.5.      Пользовательские типы данных (записи)
Данные различных типов можно сгруппировать по какому-либо признаку в
удобную для использования одну структуру. В ряде языков программирования
такие структуры называются записями (records).
Оператор объявления пользовательского типа данных (записи) помещается в
модуль и имеет вид:
Type имя записи имя элемента записи [(описатель)} As тип
[имя элемента записи [(описатель)} As тип}
End Type
[pic]  Оператор создает указанную структуру данных, но не выделяет под неё
память. Память выделяется рассмотренным оператором описания, в котором в
качестве типа указывается имя записи (имя пользовательского типа данных).
Пример:
Dim Student_l, Student_2 As Student Описаны два имени (Student_l, Student_2
), для каждого из которых определены заданные в структуре компоненты
(Familia, Name, Voyast, Birthdate, Length, Wegith) и для хранения значений
которых выделяется память соответственно заданному типу (длине и способу
представления).
Для обращения к конкретному свойству (элементу структуры) определенного
объекта используется составная запись
имя переменной.элемент структуры
Например, Student'_]. Birthdate определяет дату рождения студента
Student_7.
3.2.6.      Массивы
Массив - упорядоченный набор однотипных данных, обозначенный одним именем.
Массив может строится из однотипных переменных, однородных пользовательских
типов данных (одинаковых записей), однотипных элементов пользовательских
типов данных.
Массив объявляется уже рассмотренным оператором
{Dim | Global [ Static) имя [({описатель})} [As [New] тип} [, имя
[([описатель])} [As [NewJ/гаил] ] . . . где описатель имеет следующий
синтаксис:
[нижняя граница То ]верхняя граница[,[нижняя граница То] верхняя граница] .
.
нижняя граница определяет минимальное значение индекса массива (целого
типа);
верхняя граница определяет максимальное значение индекса массива (целого
типа);
То — ключевое слово.
Количество повторений [нижняя граница То [верхняя граница определяет
размерность массива (количество индексов, используемое для определения
элементов массива). Максимальное число индексов равно 60.
Static в процедурах и функциях позволяет сохранить значения элементов
объявленного таким образом массива между вызовами этих процедур или
функций.
Пример различного способа объявления одного и того же массива:
    . Dim A(8,3) As Double Dim A(6>To 8, О То 3) As Double Dim A(8, OTo 3}
      As Double
           Объявляется двухмерный массив (два индекса). Нижняя граница
           обоих индексов равна 0 (принимается по умолчанию). Верхняя
           граница первого индекса равна 8, второго — 3. Массив состоит из
           36 элементов (9*4=36) одинакового типа (вещественный) и каждый
           элемент занимает 8 байтов.
           Границы значений индексов: от —32768 до 32767.
Примеры:
           Dim A(—4 То 10} As Integer
           Dim B(—99 То —5, —3 То 0) As String
Элементы массива занимают связанную последовательную область в памяти
машины. Массив А в примере занимает в памяти машины последовательность из
15 ячеек памяти, каждая из которых имеет длину 2 байта (тип Integer имеет
длину 2 байта, рис. 3.2).
[pic]
Многомерные массивы также занимают линейную последовательную область
памяти. При этом важное значение имеет способ упорядочения элементов
многомерных массивов, который отличается для различных языков
программирования.
В Visual Basic многомерные массивы упорядочиваются в памяти машины так, что
быстрее всего меняется левый индекс. Например, двумерный массив (в
прикладных математических программах матрицы представляются двумерным
массивом) А (2,3), состоящий из 12 элементов, располагается в памяти машины
следующим образом: А(0,0), А(1,0), А(2,0), А(0,1), А(1,1), А(2,1), А(0,2),
А(1,2), А(2,2), А(0,3), А(1,3),   А(2,3) (если данный
массив представляет матрицу, то в памяти     машины она упорядочивается по
столбцам).
Для рассмотренного пользовательского типа данных (записи) Student можно
также объявить массив оператором Dim MasStudent (25) As Student
Объявляется одномерный массив MasStudent, состоящий из 26 элементов, каждый
из которых является одной записью:
Type Student
Familia As String * 20 Name As String * 10 Voyast As Integer Birthdate As
Double Length As Integer Wegith As Integer End Type
рассмотренной выше. Записи располагаются последовательно в памяти машины и
занимают каждая 44 байта. 20 байт занимает Familia (один символ занимает 1
байт), 10 байт - Name, 2 байта -Voyast (целый тип занимает 2 байта), 8 байт
- Birthdate (вещественный двойной точности занимает 8 байт) и по 2 байта
-Length и Wegith (целый тип).
Элемент пользовательского типа данных (записи) может являться массивом.
Например, можно объявить массив записей для хранения результатов экзаменов
студентов группы. Туре Rezultat
Familia As String * 20 NameExam (4) As String * /5 RewltExam (4) As Integer
End Type Dim Sesia(25) As Reyiltat
Объявлен пользовательский тип данных Rewltat, элементами которого являются
Familia фиксированной длины 20 символов (фамилия студента не может состоять
более чем из 20 символов), массив NameExam (4) из пяти элементов (число
экзаменов в сессии не более 5) для хранения названия экзаменов (название
каждого экзамена не может состоять более чем из 15 символов), массив
RewltExam (4) из пяти элементов для хранения оценок по каждому экзамену
(целого типа). Длина записи Rewltat 105 байтов.
На базе пользовательского типа данных Requital объявлен массив Seпъ1 |                 |
|          |               |                 |
|Binary    |Двоичные       |До 1,2 Гбайт     |
|OLE       |OLE — объекты  |До 1.2 Гбайт     |


Кроме механизма Jet можно также использовать драйверы связи открытых баз
данных (ODBC — Open Database Connectivity) для доступа к другим базам
данных. Существуют также разнообразные механизмы баз данных других фирм,
которые можно использовать с Visual Basic.
Система Visual Basic позволяет хранить и использовать информацию в
реляционных системах управления базами данных (английская аббревиатура —
RDBMS).
      5.2.  РЕЛЯЦИОННАЯ СТРУКТУРА ДАННЫХ
В подавляющем большинстве существующие СУБД построены на основе реляционной
модели данных, которая, несмотря на свою внешнюю простоту, базируется на
прочном фундаменте масштабных теоретических исследовании, основы которых
были заложены Э. Коддом в 1969 г. Результаты этих теоретических
исследований позволяют сделать данные полными непротиворечивыми и не
избыточными, чтобы все факты оказав лись учтены, но при этом каждый из них
хранился только один' раз. Специалисты в области создания и сопровождения
баз данных должны знать и уметь использовать эту теорию.
Реляционная база данных это такая база данных, которая состоит из таблиц (и
ничего иного, кроме таблиц). Ссылка из одной таблицы на другую через какое-
нибудь общее поле (common field) называется отношением (relation) ( отсюда
и название реляционная).
Рассмотрим пример реляционной базы данных состоящей из трех таблиц или
отношений, таблица поставщиков, таблица деталей и таблица поставки деталей.
Таблица поставщиков
|Номер     |Фамилия    |Состояние  |Город  |
|постав    |           |           |       |
|щика      |           |           |       |
|si        |Смит       |20         |Лондон |
|s2        |Джонс      |10         |Париж  |
|s3        |Блеик      |30         |Париж  |
|s4        |Кларк      |20         |Лондон |
|s5        |Адаме      |30         |Атенс  |


Каждый поставщик имеет уникальный номер, фамилии могут повторяться. Каждый
поставщик находится только в одном городе.
Таблица деталей
|Номер   |Название|Цвет    |Вес  |Город  |
|детали  |        |        |     |       |
|Pi      |Гайка   |Красный |12   |Лондон |
|р2      |Болт    |Зеленый |17   |Париж  |
|РЗ      |Винт    |Голубой |17   |Рим    |
|р4      |Винт    |Красный |14   |Лондон |
|р5      |Кулачок |Голубой |12   |Париж  |
|Р5      |Заклепка|Красный |19   |Лондон |


Каждый вид детали имеет уникальный номер. Город — место хранения детали.
Предполагается, что каждый вид детали имеет только один цвет и хранится на
складе только одного города.
Таблица поставки деталей
|Номер       |Номер детали  |Количесшо      |
|поставщика  |              |               |
|Si          |Pi            |300            |
|Si          |Р2            |200            |
|si          |РЭ            |400            |
|sl          |Р4            |200            |
|si          |Р5            |100            |
|sl          |р6            |100            |
|s2          |Р'            |300            |
|s2          |Р2            |400            |
|s3          |Р2            |200            |
|s4          |Р2            |200            |
|s4          |Р4            |300            |
|s4          |Р5            |400            |


Таблица поставки деталей служит для связи между собой двух первых таблиц.
Например, первая строка этой таблицы связывает поставщика “sl” из таблицы
поставщиков с деталью “р1” из таблицы деталей (представляет поставку детали
вида “р1” поставщиком с номером “sl” в количестве 300 деталей).
Предполагается, что в каждый момент существует только одна поставка для
заданного поставщика и заданной детали, т.е. комбинация Но-мер_поставщика,
Номер_детали является уникальной для заданной поставки относительно
множества поставок в данный момент.
Принципиальной особенностью таблиц является следующее:
    . данные в таблицах имеют только явные значения, т.е. не существует
      каких-либо связей или указателей, соединяющих одну таблицу с другой.
      Связь, например, между поставщиком и деталью задана наличием
      конкретного номера поставщика (sl) и конкретного номера детали (р1).
      Такие ссылки из одной таблицы на Другую через какое-нибудь общее поле
      (Common field) называется отношением;
    . таблица состоит из строки заголовков столбцов и нуля или более строк
      значений данных;
    . строка заголовков столбцов специфицирует один или более столбцов,
      определяя также тип данных для каждого из них (все значения в данном
      столбце одного типа. Например, имя поставщика типа строки символов,
      число деталей некоторого арифметического типа и т.п.);
    . значения данных являются атомарными, т.е. в каждой ячейке таблицы
      всегда только одно значение.
Строка таблицы также называется записью. Элемент записи называется полем
(наименьшая единица информации в базе данных)
Прикладная информация может по-разному задаваться таблицами (т.е количество
таблиц и их содержание могут быть различными для одной и той же прикладной
информации). Например, можно было бы вместо трех таблиц “Таблица
поставщиков” “Таблица деталей” и “Таблица поставки деталей” сделать одну
объединенную таблицу. В этом случае происходило бы дублирование информации
(для каждой детали повторялась бы информация о поставщике). Если бы
изменилась какая-либо информация по поставщику (например, состояние), то
эту информацию необходимо бы было изменить во всех записях.
Для правильной организации данных в таблицы используется понятие
нормализации. Нормализация данных — процесс исключения избыточной
информации, при которой достигается то что каждый элемент информации
запоминается только один раз. Теория и практические рекомендации по
нормализации рассматриваются в книгах по реляционным базам данных.
Связь между таблицами реализуется с использованием ключей данных. Ключи
обычно называют первичными и внешними ключами. Первичный ключ однозначно
определяет запись в таблице (в таблице поставщиков таким первичным ключом
является номер поставщика) и должен быть уникальным. Внешним ключом
является ключ, используемый для связи с первичным ключом другой таблицы (в
таблице поставок такими внешними ключами являются номер поставщика и номер
детали, которые используются для связи с другими таблицами). Таблицы
связываются между собой с помощью ключевых полей.
Ключевое поле может иметь содержательный смысл (например, фамилия, но в
этом случае фамилии не могут повторяться) или полем, которое служит
специальной цели обеспечения уникальности записи (например, номер
поставщика или счетчик для первичного ключа). Поле счетчика является
целочисленным полем, которое автоматически увеличивается на единицу
системой управления базами данных, когда добавляется новая запись. При этом
механизм создания уникальных полей перекладывается на систему.
Приведенные таблицы являются исходными (базовыми) для задания данных и
связей между ними. Такие таблицы физически существуют в памяти ЭВМ, хотя их
вид необязательно соответствует приведенному (физическое представление
данных, т.е. то, как данные реально хранятся на носителях данных,
отличается от их логического представления в виде рассмотренных таблиц и
зависит от типа ЭВМ и носителя данных).
Кроме того, на основе базовых таблиц могут быть созданы производные от них
или представления. Например, таблица поставщиков деталей в количестве
больше 200 имеет вид:
|Номер       |Номер    |
|поставщика  |детали   |
|si          |Pi       |
|si          |P3       |
|s2          |pi       |
|s2          |?2       |
|s4          |P4       |
|s4          |?5       |


Такая таблица является производной или виртуальной таблицей, те. таблицей
которая непосредственно не существует в физической памяти, но для
пользователя, получающего информацию, выглядит существующей.
В результате информационного запроса (query) к реляционной базе данных
также получается некоторая таблица, которая является представлением
существующих данных. Заложенные в исходных таблицах отношения позволяют
конструировать различные логические представления данных. В частности
приведенная таблица является результатом запроса о поставщиках и деталях,
поставляемых в количестве более 200.
Для более эффективной работы с реляционной базой данных (повышение скорости
получения информации и модификации данных) используется индексирование
(аналогично рассмотренному индексированию записей файла). Индекс создается
для одного или нескольких заданных столбцов таблицы (для одной таблицы и
группы столбцов может быть создано несколько индексов) и для заданного
упорядочения (например, по убыванию) и автоматически поддерживается
средствами СУБД при изменении информации. Для приведенных таблиц могут
быть, например, созданы индексы по столбцу “Номер поставщика” таблицы
поставщиков, по столбцу “Номер детали” таблицы деталей, по двум столбцам
“Номер поставщика” и “Номер детали” таблицы поставки деталей.
Для работы с реляционными базами данных существует стандартный язык
запросов SQL (Structured Query Language — язык структурированных запросов).
Этот язык используется для создания исходных таблиц базы данных (создание
базы данных) формирования запросов, управления базами данных, позволяя
использовать стандартные средства для работы с различными базами данных.
Visual Basic позволяет использовать язык SQL для работы с базами данных.
5.3.  ИСПОЛЬЗОВАНИЕ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ Data и Grid
Элемент управления Data служит для установления связи между базой данных и
другими элементами управления, используемыми .зля отображения данных из
базы данных. Поддерживается связь с базами данных Access, FoxPro, dBase,
Paradox (список поддерживаемых связей определяется версией Visual Basic).
Один элемент управления Data всегда обеспечивает доступ только к одной
записи в данный момент (такая запись называется текущей (current)),
позволяя отображать содержимое текущей записи на форме.
Кроме стандартных свойств, элемент управления Data обладает следующими
специфическими свойствами:
    . BOFAction (Beginning Of File — начало файла), EOFAction (End Of File —
      конец файла) возвращает или устанавливает значение, указывающее
      действие при значении BOF или EOF, равном True.
Свойство BOF равно True, если указатель текущей позиции в файле расположен
до какой-либо записи (обычно возникает при удалении первой записи).
Свойство EOF равно True, если указатель текущей позиции в файле расположен
за существующими данными. Если любое из этих свойств равно True, то текущая
запись имеет недопустимый номер. Если оба свойства равны True, то в файле
не содержится данных.
Синтаксис:
объект. BOFAction [= значение} объект. EOFAction f= значение}
BOFAction =1 — переход к первой записи, если BOF = True. EOFAction =1 —
переход к последней записи, если EOF =
True.
    . Connect (Подключение) определяет тип (формат данных) используемой базы
      данных (Access, FoxPro, dBase, Paradox и др.).
    . Database объект “описатель базы данных” (профессиональная версия
      Visual Basic)
    . DatabaseName (имя базы данных) определяет имя файла базы данных или
      переход.
    . EditMode возвращает значение, определяющее состояние редактирования
      для текущей записи.
    . Exclusive определяет использование базы данных одни или несколькими
      пользователями (True — использование одним пользователем. False (по
      умолчанию) — несколько пользователей).
    . Readonly определяет возможность редактирования ото-// бражаемого
      данного в элементе управления (False (по умолчанию) — редактирование
      возможно, True — невозможно).
    . Recordset возвращает или устанавливает объект Recordset, определенный
      свойствами элемента управления Data или существующим объектом
      Recordset.
Элемент Data автоматически инициализируется при запуске приложения. Если
свойства Connect, DatabaseName, Options, RecordSource, RecordSource,
Exclusive, ReadOnly и RecordsetType установлены или, если они
устанавливаются на этапе выполнения при использовании метода Refresh,
механизм баз данных Jet пытается создавать новый объект Recordset,
основанный на этих свойствах. Этот объект Recordset доступен через свойства
элемента управление Data.
Важно: ссылаться на свойства объекта Recordset, создаваемого элементом
управления Data, можно только используя свойство Recordset самого элемента
Data. Синтаксис такого определения свойства следующий:
о^бетс/и/.свойствоА.свойствоБ определяет свойствоБ некоторого объекта,
адресуемое через свойствоА объекта!.
Объект Recordset представляет запись в основной таблице или запись, которая
является результатом выполнения запроса. Когда используются объекты доступа
к данным, то это происходит с использованием объектов Recordset. Таблица.
Recordset есть представление основной таблицы. Dynaset-тип.Recordset —
динамический набор записей. Кадр. Recordset — статическая копия множества
записей (может содержать поля из одной или более таблиц в базе данных, но
не может модифицироваться).
    . RecordsetType определяет тип набора записей, который можно
      использовать для доступа к данным. Существует три типа наборов
      записей: таблица. Dynaset (динамическое множество) или кадр
      (моментальный снимок). Соответственно свойство принимает значения 0,
      1,2.
При использовании Data для доступа к базе данных по умолчанию создается
набор записей динамического типа, который является набором указателей на
информацию. Динамический набор является очень гибким, но имеет ряд
ограничений при использовании (в частности не поддерживает созданные
индексы, что не позволяет динамически изменять порядок представления
записей в наборе).
При задании типа набора “Таблица” возможен доступ только к одной полной
таблице с использованием индекса для упорядочения, но обновление данных
отображается медленно.
При задании типа набора “Кадр” работа выполняется с копией данных.
Достоинством является быстрота, но требует ресурсов памяти и невозможно
обновление данных.
    . RecordSource (источник данных) определяет, откуда извлечь данные. Это
      может быть имя таблицы либо конкретное логическое представление данных
      (запрос).
Для объекта Data при работе с базами данных существует понятие базовых
элементов управления — непосредственно связаны с единственным полем в
наборе записей и не требуют дополнительного определения, кроме имени поля,
задаваемого для некоторого свойства элемента управления. Например, для
текстового окна (TextBox) присвоение свойства Text может содержать значение
поля базы данных (тип данных: строка символов, арифметический тип, дата) и
определяется заданием свойств DataSource (указывается имя объекта Data) и
DataField (указывается имя поля таблицы, установленной свойством Data-
Source объекта Data). Окна изображений и рисунков можно использовать для
показа картинок, хранящихся в базе данных, флажок — для отображения булевых
значений.
В комплекте Visual Basic имеется база данных B1BLIO.MDB, содержащая
библиографические сведения по Visual Basic. Она состоит из трех таблиц.
Таблица Авторы (Authors) с полями идентификационный номер (Au_lD) и фамилия
автора (Authors). Таблица издательств (Pablishers) с полями
идентификационный
номер (PubID), название (Name), компания владелец (Company Name), адрес
(Address), город (City), штат (State), код (Zip), теле-tboH (Telephone).
Таблица Названия книг (Titles) содержит список опубликованных книг:
название (Title), год публикации (Year published) и ссылки на первые две
таблицы.
Используем элемент управления Data для доступа к этой базе данных. Создадим
форму (рис. 5.1) с элементом управления Data, с тремя метками и с тремя
текстовыми окнами для вывода соответствующей информации из базы данных
B1BLIO.MDB. Свойствам объекта Data присваиваются следующие значения:
      DataBaseName = C:\VB4\BIBLIO.MBD
      RecordSourse = Pablishers
      Connect = Access.
      Для подключения базы данных (задание значения свойства DataBaseName =
      C:\VB4\BIBLIO.MBD) используется специальное окно (рис. 5.2).
[pic]
Свойствам объекта Textl (текстовое окно с заголовком “Издательство”)
присваиваются значения:
DataSourse = Datal (имя элемента Data — Datal), DataField = Name (Name —
имя поля таблицы издательств). *
Рис. 5.
Свойствам объекта Text2 (текстовое окно с заголовком “Город”) присваиваются
значения: DataSourse = Datal (имя элемента Data — Datal), DataField = City
( City — имя поля таблицы издательств).
Свойствам объекта Text3 (текстовое окно с заголовком “Телефон”)
присваиваются значения: DataSourse = Datal (имя элемента Data — Datal),
DataField = Telephone (Telephone — имя поля таблицы издательств).
Созданное приложение позволяет просматривать базу данных, получая из нее
указанную информацию. Элемент управления Data обеспечивает движение по
записям (последовательное Движение к последующей записи или к предыдущей
записи при щелчке мышью по правой или левой стрелке объекта и переход “
первой или последней записи при щелчке мыши по левой или правой кнопке
окна) (рис. 5.3).
Аналогичные действия можно проделать без использования мыши, а программно.
Для этого применяются методы объекта Data.
[pic]
phl 5 2
[pic]
Такгцуж методам являются:
    . Refresh — открытие и закрытие базы данных;
    . MoveFirst — текущей становится первая запись из множества записей:
    . MoveNext — текущей становится следующая запись из множества записей;
Рис 53
    . Move Previous — текущей становится предыдущая запись из множества
      записей;
    . MoveLast — текущей становится последняя запись из множества записей;
    . Update — редактированное поле записывается в базу данных ( этот можно
      применять только для таблиц и динамических множеств);
    . FindFirst найти первую запись для заданного условия поиска;
    . FindNext найти следующую запись для заданного усло-„ия поиска:
    . FindLast найти последнюю запись для заданного условия
поиска;
    . FindPrevious найти предыдущую запись для заданного условия поиска.
Последние четыре метода требуют задания критерия поиска записи. В общем
случае критерием является строка символов, которая может включать
логические выражения. Переменной типа строки символов, являющейся
критерием, присваивается значение Следующие примеры показывают задание
критериев:
Dim Criteriy As String
Criterly = “State = ' NY ' “ ' значение поля State (Штат) таблицы должно
быть равно NY Criteriy = “Title > ‘A’ And Title < 'В' “ ' первой буквой
поля Title таблицы должна быть буква А Criteriy = “Name =” & “'” & Poisk &
“'” ' значение поля Name таблицы должно быть равно значению переменной
Poisk
Следует обратить внимание на то, что задаваемое значение в условиях берется
в апострофы “ символ — '”. В последнем примере эти апострофы специально
задаются.
При использовании методов для поиска записей используется также свойство
NoMath, применяемое для таких объектов, как таблица, динамическое
множество, кадр или Recordset. Синтаксис использования свойства следующий:
Объект. NoMath
Свойство принимает значение True (требуемая запись не найдена) или False
(требуемая запись найдена). Если поиск оказался безрезультатным, то
свойство имеет значение True и положение текущей записи (в момент
применения одного из указанных выше методов поиска) не меняется.
Как было сказано выше, ссылаться на свойства объекта Recordset,
создаваемого элементом управления Data, можно только используя свойство
Recordset самого элемента Data (синтаксис см. выше). Таким образом, при
использовании перечисленных методов вставляется свойство Recoidset элемента
Data. Например,
Datal.Recordset.MoveLast Datal.Recordset.MoveNext Datal.Recordset.FindFirst
FindCriterly
Пример программы.
Модифицируем приведенную выше форму, добавив командные кнопки и текстовую
строку (рис 5 4) Свойству Visible для элемента управления Data присвоим
значение False (т е на этапе выполнения окно Data не видимо и его нельзя
использовать для диалогового доступа к базе данных) Функции движения по
записям базы данных, действии с записями, поиска программируются
процедурами обработки событии соответствующих командных кнопок Критерии
поиска требуемой записи вводится в текстовом окне, которое активизируется
командной кнопкой “Поиск” (отрицательный результат поиска также выводится в
этом текстовом окне). В процедурах используются выше рассмотренные свойства
и методы
[pic]
      Процедуры обработки событий-
      Option Explicit Dim Pri, Pr2 As Boolean
      Private Sub Commandl Click()
If Not Datal.Recordset.EOF  Then Pr2 = True
Commandl.Enabled = True Datal.Recordset.MoveNext
If Not Pri Then Pri = True: Command2.Enabled = True Else Pr2 = False
Datal.Recordset.Move Previous Commandl.Enabled = False End If End Sub
Private Sub Command2_Ciick() If Not Datal.Recordset.BOF Then Pri - True
Command2.Enabled = True Datal.Recordset.Move Previous
If Not Pr2 Then Pr2 True: Commandl.Enabled = True Else Pri - False
Datal.Recordset.MoveNext Command2.Enabled = False End If End Sub
Private Sub Command3 Click(\
Datal.Recordset.Move First
Pr2 = True
Command2.Enabled False
Commandl.Enabled - True
Pri - False End Sub
Private Sub Command4 Click(
Datal.Recordset.MoveLast
Pri = True
Commandl.Enabled = False
Command2.Enabled = True
Pr2 - False End Sub
Private Sub Command5_ClickI
Datal.Recordset.Delete
Datal.Recordset.MoveNext End Sub Private Sub Command6_Click()
Datal.Recordset.Update End Sub
Private Sub Command7_CiicK ( i
Text4.SetFocus End Sub
Private Sub Form_Load()
Pri = True
Pr2 = True End Sub
Private Sub Text4_KeyPress(KeyAscil As Integer)
Dim FindCriteriy, Poisk As Variant
If KeyAscil = 13 Then
Poisk = Text4.Text
FindCriteriy = “Name =” & “’” &   Poisk & “’”
Datal.Recordset.FindFirst FindCriteriy
If Datal.Recordset.NoMatch Then Text4.Text = “Такой записи нет”
End If
End If End Sub
Примеры работы с формой показаны на рис. 5.5 — 5.7. Обратите внимание, что
элемент Data на форме не виден. При попытке удаления записи с
использованием Delete срабатывает защита целостности базы данных (выдается
окно предупреждения на рис. 5.7). База данных включает три связанные
таблицы. Удаления записи из одной таблицы, на которую ссылается запись в
другой таблице, приводит к разрушению информации.
В рассмотренных выше примерах база данных, необходимые таблицы и поля
записей определялись на этапе разработки приложения. Однако Visual Basic
позволяет открывать при работе некоторого приложения любую существующую на
компьютере базу данных, определять состав ее таблиц и записей и выводить
для анализа всю таблицу или информацию из нее по запросу (такой способ
подключения к базе данных на этапе выполнения приложения называется
динамическим доступом).
[pic]
[pic]
[pic]
Для дальнейшего изложения рассмотрим еще одно понятие—наборы (collections)
Набор — это несколько связанных объектов, для которых определены общие
свойства. Общим для всех наборов является свойство Count, определяющее
число объектов в наборе (аналогично индексации элементов массива индексы
объектов в наборе имеют значения от о до Count — 1). Обращаться к элементам
набора можно или с использованием индекса или по именам.
Например,
Datal.Recordset.Fields(“Name”)
Data 1.Recordset.Fields(0)
В первом случае используется имя “Name” для обращения к нужному объекту
набора Fields. Во втором случае используется индекс для обращения к первому
элементу этого набора.
В приведенных примерах используется уже рассмотренный способ определения
свойств одного объекта через свойства другого (объект /.свойствоА.свойствоБ
— определяет свойствоБ некоторого объекта, адресуемое через свойствоА
объекта!).
Рассмотрим некоторые наборы, объекты набора и их свойства, которые
используются для анализа структуры базы данных, подключаемой к приложению
элементом управления Data, и выбора из нее информации.
Свойство Database возвращает ссылку на базу данных, определенную элементом
управления Data. Синтаксис:
Объект. Database.
Свойство Name возвращает имя объекта. Синтаксис:
Объект.^ате. Например, для используемого выше элемента управления Data с
именем Datal выражение Datal. Database. Name определит файл базы данных
C:\VB4\BIBLIO.MBD.
Свойство RecordCount возвращает число записей объекта RecordSet или
TableDef.
TableDefs определяет набор таблиц базы данных (объект TableDef является
одной присоединенной таблицей набора). Например, выражение
Datal.Database.TableDefs.Count определит число таблиц в базе данных.
Выражение Datal. Database.Table Defs(O). Name определит имя первой таблицы
в базе данных.
Fields определяет набор полей присоединенной таблицы базы данных (объект
Field является одним элементом (полем присоединенной таблицы) из набора
полей).
Выражение Datal.Database.TableDefs(0).Fields.Count определит число полей в
первой таблице базы данных.
Выражение Datal. Database. Table Defs(l).Fields(0). Name определит имя
первого поля второй таблицы присоединенной базы данных.
Выражение Datal. Recordset. RecordCount определит число записеи в текущем
множестве записей, к которому получен доступ.
Выражение Datal. Recordset. Fields.Count определит число полей множества
данных (текущее множество записей, к которому получен доступ).
Выражение Datal. Recordset. Fields(2). Name определит имя третьего поля на
множестве данных.
Выражение Datal. Recordset. Fields(2). Value определит значение третьего
поля на множестве данных.
Для отображения информации из присоединяемой на этапе выполнения базы
данных удобно использовать элемент управления Grid (Сетка). Сетка является
двумерной таблицей, позволяющей эквивалентно отображать таблицы реляционных
баз данных. Рассмотрим свойства сетки, необходимые для отображения таблиц
базы данных:
    . Cols (Колонки) — число колонок в сетке.
    . Rows (Строки) — число строк в сетке.
    . GridLines — изображение линий сетки (True — линии сетки изображаются.
      False — нет).
    . GridLinesWidth — ширина сетки таблицы.
    . Col, Row пределяет или устанавливает активную ячейку (номера колонки и
      строки). Синтаксис: имя_сетки.Со\ [= номер], 11мя_сетки.Ро^/ [=
      номер}. Доступны только на этапе выполнения.
    . HighLight определяет подсветку выделенной ячейки сетки (True —
      подсветка есть. False — нет).
    . FixedCols (Фиксированные колонки) — количество фиксированных колонок
      (отсчет от левого края) для отображения заголовков таблицы. Эти
      колонки нельзя прокручивать и они выделяются серым фоном.
    . FixedRows (Фиксированные строки) — количество фиксированных строк
      (отсчет сверху вниз) для отображения заголовков. Эти строки нельзя
      прокручивать и они выделяются серым фоном.
• • ScrolBars (Линейки прокрутки) — горизонтальная и вертикальная линейки
прокрутки для отображения невидимых колонок и строк. ScrolBars = 0 — нет
линеек прокрутки, 1 — горизонvbOFNPathMiistExist — возможность ввода только
существующего пути и др
Например, следующий оператор определяет возможность ввода только имени
существующего файла и существующего пути
чмя_станд _окна Flags = vbOFNFileMustExist Or \bOFNPathMustExist
Пример программы.
Приводится пример приложения, которое открывает существующую на компьютере
базу данных, выдает список таблиц базы данных и выводит выбранную
пользователем таблицу в сеточную форму Будет использоваться уже
рассмотренная выше база данных B1BLIO MDB Используются элементы управления
Data (имя — Datal), Gild (имя — Giidl, командная кнопка (имя — Commandl).
комбинированный список (имя — Combol) и Common Dialog (имя — CommonDialog)
Форма на этапе разработки имеет вид, показанный на рис 5 9
[pic]
Рис 5 9
Алгоритм работы приложения следующий При щелчке мыши по командной кнопке
“Подключить”, появляется стандартное диалоговое окно для выбора файла базы
данных. После выбора файла базы данных программно формируется список таблиц
выбранной базы данных, который выводится в комбинированное окно После
выбора элемента списка (таблица базы данных) ч
нажатия клавиши “Ввод”, содержимое таблицы выводится на сетку Линейки
прокрутки сетки позволяют просматривать все  поля сетки
      Текст программ'
      Option Explicit
      Const vbOFNPAlhMUSTEXIST - &H800&
      Const vbOFNFILEMUSTEXIST &H1000&
      Private Sub Commandl_Click() Combol.Clear
      CommonDiaiog.DefaultExt - “MDB” CommonDialog . FileName - “”
      CommonDialog.Filter =
“Базы данных MS Access(*.MDB)I*.MDB” CommonDialoci. Flags
vbOFNPATHMUSTEXIST CommonDiaiog.Action - 1
If CommonDiaiog.FileName “” Then Exit Sub OpenDataBase
CommonDialog.FileName End Sub
      Public Sub OpenDataBase(ByVal DataFile As String)
      Dim I As Integer
      Datal.Connect - “”
      Datal. Dat-abaseName = DataFile
      Datal.Refresh
      For I = 1 To Datal.Database.TableDefs.Count - 1
      Combol.Addltem Datal.Database.TableDefs(I).Name
      Next
      Combol.Text = “”
      End Sub
      Private Sub Combol Keypress(KeyAscii As Integer)
      If KeyAscii = 13 Then FillGrid Combol.Text
      End If End Sub
Private Sub FillGrid^ByVal TableName As String) Dim I As Integer, CellWidth
As Integer Datal.RecordSource = TableName Gridl.Cols =
Datal.Database(TableName).Fields.Count
Gridl.Row = 0 For I =, 0 To Datal.Database(TableName).Fields.Count-1
Gridl.Col = I Gridl.Text = Datal.Database(TableName).Fields(I).Name
Gridl.ColWidth(I) = TextWidth(Gridi.Text) + 100 Next
Datdl.Refresh
Datal.Recordset.MoveLast
Gridl.Rows = Datdl.Recordset.RecordCount + 1
Datal.Recordset.Move First
Gridl.Row ^ 0
Do While Not Datdl.Recordset.EOF
Gridl.Row = Gridl.Row +• 1 For I = 0 To
Datal.Database(TableName).Fields.Count-1
Gridl.Col = I If IsNull(Datal.Recordset.Fields(I)-Value) Then
Gridl.Text = “” Else Gridl.Text - Datal.Recordset.Fields(I).Value
End If
CellWidth = TextWidth(Gridi.Text) + 100
If CellWidth > Gridi.ColWidth(I) Then
Gridi.ColWidth(I) = CellWidth
End If Next I
Datal.Recordset.MoveNext Loop End Sub
Процедура Commandl_Click обеспечивает очистку комбинированного списка и
обращение к стандартному окну “Открыть файл” с заданным расширением (*.MDB)
(рис. 5.10). После выбора файла происходит обращение к процедуре Open
DataBase, в которую передается имя выбранного файла
(CommonDialog.FileName).
Процедура OpenDataBase обеспечивает подключение к базе данных через элемент
управления Data (по умолчанию оператором Datal.Connect = “” выбирается
Формат MS Access, имя базы данных определяется передаваемым в процедуру
значением Datal. DatabaseName = DataFile) и заполнение комбинированною
списка именами таблиц (цикл). Из этого списка можно выбрать нужную таблицу
(рис. 5.11).
[pic]
Рис 5 10
После выбора таблицы, процедура обрабогки события Combo l_KeyPress вызывает
процедуру FillGrid заполнения сетки, в которую передается имя выбранной
таблицы Combol.Text.
В процедуре FillGrid инициализируется множество записей (оператор
Datal.RecordSoui-ce = TableName) и определяется количество колонок таблицы
(оператор Gridi.Cols = Datal.Database(TableName).Fields.Count), первая
строка сетки (Gridl.Row = 0) заполняется названиями колонок выбранной
таблицы (операторы
For I = 0 То Datal.Database(TableName).Fields.Coiint-l
Gridl.Col = 1
      Gridl.Text = Data].Database^TableName).Fields(I).Name
      Gridi.ColWidth(l) = TextWidth(Gridl.Text) + 100
      Next I)
В этих операторах для задания ширины каждой колонки используется обращение
к функции TextWidth, которая возвращает длину выводимого текста.
      Количество записей и соответственно количество строк сетки
      определяется операторами
      Datal. Refresh
      Datal .Recordset.Move Last
      Gridl.Rows = Datal. Recordset. RecordCount + 1 (первая строка
      заполнялась названиями полей).
Возврат на первую запись и к первой строке сетки производится операторами
Datal. Recordset. MoveFirst и Gridl.Row = 0. [pic]
Рис 511
Цикл Do-Loop обеспечивает движение по записям (оператор Data I. Recordset.
MoveNext) и выполняется пока функция EOF имеет значение False (т.е. до
последней записи). На каждом шаге цикла производится переход к новой строке
(Grid I. Row = Grid 1. Row + 1), для которой выполняется цикл (Gridl.Col =
I) заполнения всех ее ячеек. Если поле таблицы базы данных не содержит
значения (проверяется функцией IsNull(Datal. Recordset. Fields(I). Value)),
то соответствующая ячейка сетки заполняется пустой строкой.
Последние операторы обеспечивают согласование ширины ячеек таблицы с
максимальной возможной длиной поля записи (операторы
CellWidth = TextWidth(Gridl.Text) + 100 • If CellWidth > Gridl.ColWidth(I)
Then
Gridl.ColWidth(I) = CellWidth).
Заполненная сетка показана на рисунке 5.12.
      5.4.  СОЗДАНИЕ БАЗ ДАННЫХ
Создание новой базы данных может быть выполнено программно или с помощью
специальной встроенной подсистемы Data Manager, позволяющей в диалоговом
режиме создавать и модифицировать базы данных механизма Jet. Подсистема
Data Manager запускается из раскрывающегося меню Add-Ins Главного меню
Visual Basic.
[pic]
Рис 5 12
Рассмотрим использование подсистемы Data Manager на примере создания базы
данных по товарам на складе и их поставщикам. Таблицы База данных включает
две таблицы (таблица товаров на складе, таблица поставщиков).
Таблица товаров на складе
|Номер|Номер   |HilJBBUHe |Стоимость,|Количест|
|товар|поставщи|roB.tpJ   |руб /hit  |во на   |
|а    |ка      |          |          |СКЛаДе  |
|1    |2       |Магнитола |150000    |20      |
|2    |2       |Приемник  |200000    |5       |
|3    |1       |Плеер     |350000    |15      |
|4    |3       |Кофеварка |175000    |34      |
|5    |3       |Элсктрочаи|120000    |57      |
|     |        |ни к      |          |        |
|6    |1       |CD — Плеер|750000    |8       |


 
Таблица поставщиков
|Номер  |Название  |Город   |Адрес    |Телефон|
|постав-|фирмы     |        |         |       |
|шика   |          |        |         |       |
|1      |ЗАО       |Тверь   |ул.      |12345  |
|       |“Посредник|        |Космонавт|       |
|       |”         |        |ов 12    |       |
|2      |“Импульс” |Москва  |Пр Мира, |2334455|
|       |          |        |5        |       |
|3      |“Старт”   |Серпухов|ул       |345678 |
|       |          |        |Зеленая  |       |
|       |          |        |11       |       |


Таблица товаров на складе связана с таблицей поставщиков через поле “Номер
поставщика” (внешний ключ для таблицы товаров).
После щелчка мыши по пункту Data Managei раскрывающегося меню Add-Ins
Главного меню появляется окно Data Manager, в меню “Файл” нужно выбрать
пункт “New DataBase” (создание новой базы данных). Появляется окно для
создания файла базы данных (рис. 5.13). По умолчанию задано расширение
файла .mbd (файл базы данных Access).
[pic]
Рис 5 13
После задания имени файла появляется окно проектирования для задания
таблиц, полей таблиц, отношений и индексов (рис. 5.14).
Кнопка “New” используется для создания новой таблицы, “Open” — открытие
существующей таблицы для ввода данных, “Delete” — удаление таблицы,
“Design” — задание параметров полей таблицы, “Attach” — для подключения
используемой СУБД (по умолчанию — СУБД Access). “Relations” — построение
отношений между таблицами.
[pic]
Щелчок мыши по кнопке “New” открывает окно проектирования таблицы для ввода
имен полей и задания их свойств (рис. 5.15).
Рис 5 14
[pic]
Рис 515
В поле Field Name вводятся имена полей таблицы и в раскрывающемся киже меню
задается их тип (при задании типа полей “Номер товара” и “Номер поставщика”
следует выбирать Long Integei, так как эти поля будут использоваться в
качестве счетчика для первичного ключа). Стрелки “ > ” и “ < ” обеспечивают
соответственно добавление введенных имен полей или их удаление. Кнопки “Up”
и “Down” позволяют изменять последовательность полей таблицы. Аналогично
может быть введена таблица поставщиков.
Когда таблицы созданы и выбрана одна из них, активизируются кнопки Design
(проекгирование таблиц). Open (открытие таблиц для ввода или редактирования
информации). Delete (удаление таблиц) и Relations (отношения между
таблицами). Проектирование таблиц должно предшествовать заданию отношений
между таблицами и вводу данных
При щелчке по кнопке Design открывается окно редактирования (рис 5 16),
содержащее список параметров полей и командные кнопки
[pic]
Рис 5 16
Для выбранного поля таблицы (на рисунке выбрано поле “номер поставщика”)
при щелчке по кнопке “Edit” открывается окно редактирования параметров (рис
5 17). На рисунке для поля таблицы “Номер поставщика” задан параметр
“Counter” (Счетчик) Это поле является ключевым и должно иметь уникальные
значения При задании параметра “Counter”, СУБД автоматически поддерживает
уникальность этого поля, увеличивая значение счетчика при вводе новой
записи Другие параметры имеют следующий смысл DefaultValue — значение по
умолчанию, DataUpdatable — возможность изменения. Required — обязательность
ввода, AllowZeioLenght — возможность задания строки нулевой длины,
ValidationText и ValidationRule — правила корректности, Fixed или Variable
Length — фиксированной или переменной длины.
[pic]
Рис 5 17
[pic]
Кнопка “Indexes..” позволяет перейти к созданию и редактированию индексов
таблицы (рис 5 18) Для создания или
добавления нового индекса нужно щелкнуть по кнопке “Add ” открывается окно
для создания индекса (рис. 5.19).
Рис 5 18
В окне нужно задать имя индекса. Затем выбрать поля таблицы (“Fields in
tdble”), которые включаются в индекс. Выбранные поля кнопками Add(ASC) или
Add(DEC) (в зависимости от того, упорядочиваются записи по возрастанию или
убыванию) Добавляются в индексный список (“Fields in index”). Кнопка Remove
позволяет удалить поле индекса Индикаторы в окне позволяют также определить
индекс как первичный (Plimary Index) [pic]
или внешний (Foieign Index), уникальный (Unique) или кластерный
(Clustered). Соответствующий требованиям индекс сохраняется кнопкой ОК и
отображается в окне Indexes (рис. 5.18) Для удаления индекса используется
кнопка Remove
Кнопка “Keys. .” окна Table Editor позволяет перейти к созданию ключей
таблицы (рис. 5 20). В раскрывающемся списке полей таблицы выбирается поле
“Номер поставщика”, которое будет использоваться в качестве первичного
ключа. Для таблицы “Товары” первичным ключом определим поле “Номер товара”.
[pic]
Кнопка “Relations...” окна Table Editor позволяет перейти к созданию
отношений между таблицами. В окне Relations” (рис. 5.21) нужно выбрать из
раскрывающегося списка первичную таблицу (Prymary Table) и связанную
таблицу (Related Table) и установить связь между ними В рассматриваемом
примере первичной таблицей является таблица поставщиков, поле “Номер
поставщика” которой используется в качестве внешнего ключа для таблицы
“Товары”. Ключевое поле первичной таблицы (Номер поставщика) оюбражается на
поле окна Поле для связи связанной таблицы выбирается в раскрывающемся
списке (“Select Matching Fields). Связующие поля отображаются в окне.
[pic]
Вид отношения “один ко многим” (один поставщик может поставлять различные
товары) задается переключателем “Many”. Переключатель “One” определяет
отношение “один к одному”.
Флажок “Enfoice Refeiential Integrity” позволяет установить, нужно ли
обеспечивать целостность отношении (средства СУБД автоматически проверяют
целостность базы данных при модификации информации) Кнопка “Add” вводит
заданное отношение в базу данных.
Таблицы и связи между ними созданы и отображаются в списке таблиц базы
данных (рис. 5 22). При выборе таблицы становятся доступны кнопки “Open”,
“Design”, “Delete”, “Relations” Кнопка “Open” открывает выбранную таблицу
для ввода или редактирования данных (рис. 5.23). Данные приведенных выше
таблиц примера могут быть введены в базу данных.
[pic]
Рис. 5.22
[pic]
Рис. 5.23
К недостаткам подсистемы Data Manager можно отнести ограниченные
возможности по заданию отношений между таблицами. Подсистема позволяет
задать отношения только для ключевых полей “Counter” (Счетчик) и не
позволяет задать составных ключей. Базы данных сложной структуры
целесообразней создавать непосредственно в СУБВ Access, которая имеет
развитые и очень удобные средства проектирования баз данных.
Приведенная база данных может быть создана и программно. Приводится текст
программы для создания таблиц примера. задания ключей, индексов и отношений
между таблицами.
Текст программы:
•
Global Const DB_LANG_GENERAL =
“;LANGID-Ox0809;CP=1252;COUNTRY=0’ Global Const DB_BOOLEAN = 1 Global Const
DB_BYTE = 2 Global Const DB_INTEGER = 3 Global Const DB_LONG = 4 Global
Const DB_CURRENCY = 5 Global Const DB_SINGLE = 6 Global Const DB_DOUBLE = 7
Global Const DB_DATE = 8 Global Const DB_TEXT = 10 Global Const
.DB_LONGBINARY =11 Global Const DB_MEMO = 12
Private Sub Form_Click()
CreateNewDB End Sub
Sub CreateNewDB ()
Dim Db As Database, Dbname As String Dbname = “C:\VB\PRIMER.MDB” If
Dir(Dbname) <> “” Then Kill Dbname Set Db = CreateDatabase(Dbname,
DB_LANG_GENERAL) NewProduktTabie Db NewProviderTable Db Relations Db
MsgBox “Ваша база данных , “ & UCase(Dbname) & “, создана” End Sub
Sub NewProduktTabie(D As Database)
Dim Td As New TableDef, Fld() As New Field Dim Idx() As New Index, I As
Integer ReDim Fld(l To 5), Idx(l To 2) Td.Name = “Товары” ' Имя таблицы.
‘ Создание полей таблицы. Fid(I).Attributes = DB_AUTOINCRFIELD For I = 1 To
5 ‘ Задание свойств полей таблицы.
Fld(I).Name = Choose(I, “Номер_товара”, “Номер_поставщика”,
“Название_товара”, “Стоимость”, “Количество”)
Fid(I).Type = Choose (I, DB_LONG, DB_LONG, DB_TEXT, DB_CURRENCY, DB
INTEGER) Fld(I).Size = Choose(I, 4, 4, 30,   4,   4) Td.Fields.Append
Fid(I) Next I ‘ Создание индексов. Idx(l).Name = “PrimaryKey” Idx (1) .
Fields = “Номера/товара” • Idx(l).Primary = True
Idx(1).Unique = True   • Idx(2).Name = “Name” Idx(2).Fields =
“Название_товара” For I = 1 To 2
Td.Indexes.Append Idx(I) Next I
D.TableDefs.Append Td ‘ Создание таблицы. End Sub
Sub NewProviderTable(D As Database)
Dim Td As New TableDef, Fid() As New   Field
Dim Idx() As New Index, I As Integer
ReDim Fld(l To 5), Idx(l To 2)
Td.Name = “Поставщики” ' Имя таблицы. ‘ Создание полей таблицы.
For I = 1 То 5 'Задание свойств полей таблицы.
Fld(I).Name = Choosefl, “Номер_поставшика”, “Название_фирмы”, “Город”,
“Адрес”, “Телефон”)
Fld(I).Type = Choose(I, DB_LONG, DB_TEXT, DB_TEXT, DB_TEXT, DB_TEXT)
Fld(I).Size = Choose(I, 4, 30, 15, 30, 10)
Next I
Fid(l).Attributes = DB_AUTOINCRFIELD
For I = 1 To 5
Td.Fields.Append Fld(I)
Next I ‘ Создание инде^ов.
Idx(l).Name == “PrimaryKey”
Idx(1).Fields = “Номер_поставщика”
Idx(1).Primary = True
Idx(1).Unique = True
Idx(2).Name = “Fi rmNarne”
Idx(2).Fields = “Название_фирмы”
For I = 1 To 2
Td.Indexes.Append Idx(I)
Next I
D.TableDefs.Append Td ‘ Создание таблицы. End Sub
Public Sub Relations (D As Database) Dim MyField As Field, MyRelation As
Relation
Set MyRelation = D.CreateRelation(“MyRelation”) MyRelation.Table =
“Поставщики” MyRelation.ForeignTable = “Товары” Set MyField =
MyRelation.CreateField(“Номер_поставщика”) MyField.ForeignName =
“Номер_поставщика” MyRelation.Fields.Append MyField D.Relations.Append
MyRelation End Sub
Константы в программе скопированы из входящего в состав Visual Basic файла
DATACONS.TXT. Обращение к процедуре CreateNewDB создания базы данных
помещено в процедуру обработки события Form_Click, из которой производится
обращение к процедуре NewProduktTable, создающей таблицу товаров на складе,
к процедуре NewProviderTable, создающей таблицу поставщиков товаров и к
процедуре Relations, создающей отношения между таблицами. Следует обратить
внимание на удобство использования встроенной функции Choose для задания
свойств полей таблиц.
5.5.  ИСПОЛЬЗОВАНИЕ ЯЗЫКА SQL ДЛЯ
СОЗДАНИЯ И РАБОТЫ С БАЗАМИ ДАННБ1Х
Язык структурированных запросов (SQL) является стандартным средством для
работы с базами данных и может использоваться как для интерактивной работы
с базами данных, так и включаться в языки программирования. Применительно к
Visual Basic SQL позволяет:
    . создавать, модифицировать или удалять таблицы в базе данных Access;
    . создавать или удалять индексы для таблиц в базе данных Access;
    . вставлять, удалять или модифицировать записи таблиц;
    . получать сводную информацию о данных в таблицах (число записей, суммы,
      средние, минимальные, максимальные значения и др.);
    . поиск данных в одной или более таблицах по запросу. Язык SQL
      используется совместно с элементом управления DATA или с объектами
      доступа к данным (DAO) механизма Jet. Объект Database содержит объекты
      доступа к данным TableDef, определяющие таблицы, объекты Field,
      определяющие поля, объекты Index, определяющие индексы и др.
В ранее рассмотренных параграфах данной главы через элемент управления Data
подключалась одна таблица (свойству Re-cordSource элемента управления Data
присваивалось значение имени таблицы). При использовании языка SQL запрос
вводится в свойство RecordSource. В случае использования элемента
управления Data, это позволяет работать с информацией из нескольких таблиц.
Следует отметить, что каждое выполнение оператора запроса изменяет набор
записеи. В связи с этим необходимо применять метод Refresh для элемента
управления Data после каждого присвоения SQL-запроса свойству RecordSource.
Рассмотрим операторы и использование языка SQL для работы с базами данных.
Для поиска информации в базе данных используется оператор SELECT. Синтаксис
оператора следующий:
SELECT список имен полей FROM список имен таблиц где SELECT, FROM —
ключевые слова;
список имен полей — список имен полей, которые выбираются из одной или
нескольких 1аблиц. Для выбора всех полей можно использовать символ “*”,
вместо перечисления имен всех полей. Если имя поля таблицы содержит пробел,
то это имя должно заключаться в квадратные скобки;
список имен таблиц — список имен таблиц, из которых производится выбор.
Имена полей и таблиц нечувствительны к регистру клавиатуры.
' Примеры:
SELECT * FROM Titles — выбор всех полей из таблицы Titles рассмотренной
выше базы данных по библиографии по Visual Basic.
SELECT Title, /Year Published/ FROM Titles — выбор полей заголовков (Title)
и года издания (Year Published) из таблицы Titles. Имя поля года издания
берется в квадратные скобки (имеет пробел).
Для поиска информации, соответствующей некоторому условию, используется
дополнение к оператору SELECT — WHERE, которое имеет следующий синтаксис:
SELECT список имен полей FROM список имен таблиц WHERE условие где условие
определяет критерии поиска информации.
В условии используются имена полей, операции сравнения (<> <=, =, >, >=,
<>) и специальные операции сравнения IN, LIKE, BETWEN. Эти операции могут
объединяться с помощью логических операций и задавать сложные условия
поиска информации.
Примеры:
SELECT /Year Published/, Title FROM Titles
WHERE /Year Published/ > 1991 определяет выбор названий книг, год выпуска
которых позже 1991.
SELECT I Last Name], /First Name/ FROM Employees
WHERE /Last Name/ = ‘King’ определяет выбор полей имен и фамилий из таблицы
служащих, фамилии которые совпадают с фамилией King.
Операция IN сравнивает содержимое поля со списком значений, определяющих
критерий поиска информации.
Примеры:
SELECT /Year Published/, Title FROM Titles
WHERE /Year Published/ IN (1995, 1996) определяет выбор книг,
опубликованных в 1995 и в 1996 гг.
SELECT /Last Name/, /First Name/, City FROM Employees
WHERE City In (‘Interlaken ', ‘New York’, ‘Frankfurt’) определяет выбор
служащих, живущих в городах Interlaken, New York или Frankfurt.
Операция LIKE сравнивает содержимое поля со значением образца. Для записи
образца используются строковые константы, символы шаблона и списки
диапазона символов.
Символы шаблона следующие: *, ?, #. * — соответствует цепочке символов, ? —
соответствует одному символу, # — соответствует одной цифре.
Примеры:
      R* — возможные результаты поиска right, Roza.
      А? — возможные результаты поиска and, any.
      12345# — возможные результаты поиска 123455. 123457.
Список диапазона заключается в квадратные скобки и первый и “последний
символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем
порядке.
Примеры:
SELECT /Last Name/, /First Name/ FROM Employees WHERE /Last Name/ Like ‘S*’
определяет выбор служащих, фамилии которых начинаются с буквы S. SELECT
Author FROM Authors WHERE Author LIKE fA-K/ определяет выбор авторов,
фамилии которых начинаются с букв от А .до К.
SELECT Title FROM Titles
WHERE Title LIKE “database*” AND [Year Publisher/ = 1996 определяет выбор
названий, в которых присутствует слово “database” и выпущенных в 1996 году.
Операция BETWEEN проверяет принадлежность значения поля диапазону значении
и является включающим значением (выбираются записи, содержащие поле со
значением, равным границе диапазона). Границы значений объединяются
операцией AND.
Примеры:
SELECT lOnler IDI, I Order Dale/
FROM Orders WHERE /Order Date/ Between # I-1-94” And #6-30-94# определяет
выбор документов первой половины 1994 г. С
SELECT /Last Name/, Salary FROM Employees '
WHERE [Last Name] Between ‘Lon’ And To/’ определяет выбор зарплаты
служащих, начальные буквы фамилий которых, расположенные в алфавитном
порядке, находятся в диапазоне 'Lon' и 'ТоГ.
Для определения порядка, в котором представляются результаты поиска
записей, используется дополнение ORDER BY, синтаксис которого следующий:
SELECT список имен полей FROM список имен таблиц WHERE условие ORDER BY имя
поля [DESC] [имя поля [DESC]] где имя поля — поле, по которому производится
упорядочение. Опция DESC устанавливает обратный порядок сортировки.
Упорядочение может вестись по нескольким полям (сортировка, например, по
фамилии, а затем по имени)
Пример:
SELECT Title FROM Titles WHERE Title LIKE
“*database*” AND [Year Publisher] = 1996 ORDER BY Title определяет выбор
названий книг, в которых присутствует слово “database” и выпущенных в 1996
г., и упорядочивает названия в алфавитном порядке.
При работе с несколькими таблицами, каждое из рассмотренных дополнений
условий выбора может быть применено для любой из таблиц. В общем случае при
формировании запроса для
нескольких таблиц указывается таблица, в которой ведется поиск полей и
связь между таблицами. Синтаксис запроса для нескольких таблиц следующий:
SELECT список имен полей FROM список имен таблиц, список связей
где список связей определяет, как таблицы в списке имен таблиц связаны
между собой. В частности для задания связи используется рассмотренное
дополнение WHERE (WHERE имя_табмщы1.1шя_поля1 = 1шя_таблицы2.имя_поля2).
Примеры:
    . SELECT Tities.Title, Publishers. [Company Name} FROM Titles.
      Publishers WHERE Titles. Pubid = Publishers. Pubid определяет выбор
      названий книг (Title) из таблицы названий (Titles) и названий
      издательств (Company Name) из таблицы издательств (Publishers).
      Дополнение WHERE определяет связь между таблицами (выбирается название
      книги и номер издательства из таблицы Titles, по номеру издательства в
      таблице издательств Publishers находится название издательства).
SELECT Tities.Title. Authors. Author, Publishers. [Company Name]
FROM Titles, Authors. Publishers WHERE Titles.auJd = Authors. au_id AND
Tilles.pubid = Publishers. Pubid определяет выбор из всех трех таблиц
полной информации по книге (название, автор, издательство).
В целом, язык SQL имеет широкий набор средств для организации различных
запросов, о которых можно более подробно узнать из встроенной системы
помощи Visual Basic.
Пример программы.
Модернизируем приведенную выше программу для просмотра таблиц баз данных
для ввода SQL-запросов и отображения полученной информации. Добавим на
форму текстовое окно для ввода SQL-запроса (нажатием клавиши ввода запрос
вводится). Полученная информация динамически (соответственно запросу)
формируется и отображается элементом управления Grid.
Форма показана на рис. 5.24, пример ввода запроса и таблица с информацией —
на рис. 5.25. [pic]
[pic]
Текст программы:
      Option Explicit
Const vbOFNPATHMUSTEXIST =  &H800&
Const vbOFNFILEMUSTEXIST =  S.H1000&
      Private Sub Coinmandl_Click () Combol.Clear
      CommonDialogI.DefaultExt = “MDB” CommonDiaiogI.FiieName = “”
      CommonDialogI.Filter = “Базы данных Access(*.MDB)|*.MDB”
      CommonDialogI.Flags = vbOFNPATHMUSTEXIST
      CommonDialogI.Action = 1
      If CommonDialogl.FileName = “” Then Exit Sub
OpenDataBase CommonDialogI.FileName End Sub
Public Sub OpenDataBase(ByVal DataFile As String)
Dim I As Integer
Datal.Connect = “”
Datal.DatabaseName = DataFiie
Datal.Refresh
For I = 0 To Datal.Database.TableDefs.Count - 1
Combo 1.Addltem Datal.Database.TableDefs(I).Name
Next
Combol.Text = “”
End Sub
Public Sub FillGrid(ByVai Zapros As String)
Dim I As Integer, CellWidth As Integer
Datal.RecordSource = Zapros
Debug.Print Zapros
Datal.Refresh
Gridl.Cols = Datal.Recordset.Fields.Count
Debug.Print Gridl.Cols
Gridl.Row •= 0 ‘
For I = 0 To Datal.Recordset.Fields.Count - 1
Gridl.Coi = I
Gridl.Text = Datal.Recordset.Fields(I).Name Gridl.ColWidth(I) =
TextWidth(Gridi.Text) + 100 . Next Datal.Refresh Datal.Recordset.MoveLast
Gridl.Rows = Datal.Recordset.RecordCount + 1 Datal.Recordset.MoveFirst
Gridl.Row = 0
Do While Not Datal.Recordset.EOF Gridl.Row = Gridl.Row + 1
For I = 0 To Datal.Recordset.Fields.Count - 1 Gridl.Coi = 1 If
IsNuil(Datal.Recordset.Fields(I).Value) Then
Gridl.Text =• “” Else
Gridl.Text = Datal.Recordset.Fields(I).Value End If
CellWidth =.TextWidth(Gridi.Text) + 100 If CellWidth > Gridi.ColWidth(I)
Then Gridl.ColWidth(I) = CeilWidth
End If Next I
Datal.Recordset.MoveNext Loop End Sub
Private Sub Textl_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then FillGrid Textl.Text
End If End Sub
ЗАКЛЮЧЕНИЕ
Автор надеется, что прочитавший эту книгу до конца и самостоятельно
выполнивший на компьютере приведенные в ней примеры получил достаточные
знания и навыки программирования на Visual Basic, позволяющие
самостоятельно создавать программные системы.
Вы получаете в свои руки относительно простой, но очень эффективный
инструмент для создания программ, работающих в операционной системе
Windows. Эти программы могут иметь любую прикладную направленность: от
простых баз данных для личного использования на работе и дома до
профессиональных систем автоматизации производственной, торговой,
банковской, страховой и других видов деятельности.
Вы делаете первые шаги, чтобы стать специалистом в области информационных
технологий. Технологий, которые прокладывают дорогу в XXI век и в
значительной степени определят дальнейшее развитие человечества.
Желаю Вам успехов на этом сложном, но очень перспективном пути.


смотреть на рефераты похожие на "Програмирование на Visual Basic"