Учебные материалы по математике | Отладка программы в visual basic | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Отладка программы в visual basic


Лекция 14
Отладка

Различают ошибки программы:

1.  Синтаксические ошибки (состоят в нарушении правил синтаксиса инструкций).

2.  Ошибки периода выполнения программы.

3.  Логические ошибки.

О синтаксических ошибках и ошибках периода выполнения среда сообщает на этапе ввода программного кода или его выполнения соответственно. Это упрощает обнаружение и исправление ошибок. Самым "крепким орешком" среди всех возможных являются логические ошибки. При их появлении код выполняется корректно, но желаемый результат не достигается.

Для выявления причин логической ошибки и ее устранения требуется обширное тестирование. VB предлагает некоторые эффективные инструменты для поиска источников ошибок.

Среда VB может находиться в трех режимах:

— разработка – design;

— выполнение – run;

— отладка – break.

1. Режим отладки

Набор команд меню Run и назначение многих кнопок панели инструментов зависит от состояния среды разработки. В режиме проектирования приложение можно только запустить, все же остальные возможности недоступны. При запуске можно выбрать один из двух вариантов: без полной компиляции или полную компиляцию всех процедур. Приложение запускается нажатием клавиши F5 или кнопки Start в среде разработки VB.

Переход в режим отладки выполняется нажатием клавиш Ctrl+Break или щелчком на кнопке Break панели инструментов. В режиме отладки можно выбирать один из вариантов: продолжать программу или перейти в режим разработки.

В режим выполнения можно перейти, нажав повторно клавишу F5 или щелкнув на кнопке Continue. Обратите внимание, что в режиме отладки кнопка Start носит название Continue.

Название текущего режима отображается в квадратных скобках в строке заголовка VB.

В режим отладки Вы попадаете и тогда, когда во время выполнения программы, запущенной из среды разработки, возник­ла необрабатываемая ошибка выполнения. При этом выдается сообщение об ошибке с возможностью выбора одного из вариантов: завершение выполнения или переход в режим отладки.

Большое преимущество режима отладки заключается в том, что выполнение программы приостанавливается в месте возникновения ошибки. Другим важным моментом является то, что при этом сохраняются значения всех текущих переменных и их можно увидеть. Для этого достаточно навести указатель мыши на имя соответствующей переменной.

В среде разработки VB инструменты поиска ошибок объединены в меню Debug. Воспользовавшись командой Toolbars меню View, можно отобразить панель инструментов Debug для доступа к основным средствам отладки.

2. Точка останова

Есть еще одна возможность переключения приложения в режим отладки. Это возможно благодаря точке останова (Breakpoint). Точка останова – это выделенная строка программы, на которой автоматически останавливается выполнение программы. По достижении этой строки программы Visual Basic также переходит в режим отладки.

Если щелкнуть левой кнопкой мыши на полосе индикатора (серая вертикальная полоса слева от программного кода), то в этом месте появится красная точка и находящаяся рядом строка закрашивается красным цветом. Установить и удалить точки останова можно также с помощью контекстного меню или кнопки Toggle Breakpoint панели инструментов.

Точки останова можно поместить в любой строке кода, кроме строк комментариев или пустых строк.

Среда разработки предоставляет еще ряд других возможностей установки и удаления точек останова. При этом текстовый курсор всегда должен находиться в соответствующей строке кода.

На панели инструментов Debug находится кнопка Toggle Breakpoint, позволяющая установить или удалить точку останова на текущей строке. Это можно сделать также нажатием клавиши F9. В меню Debug есть команда Set Next Statement. После ее выполнения строка кода, в которой находится курсор, становится следующей выполняемой строкой. Для вызова этой команды используется также комбинация клавиш Ctrl+F9.

Установку или удаление точки останова для текущей строки можно выполнить и с помощью команды Toggle Breakpoint меню Debug. Удалить все точки останова во всем проекте можно с помощью команды Clear All Breakpoints меню Debug.

Точки останова предназначены для принудительной остановки программы в нужном месте и перехода в режим отладки. В резуль­тате становятся доступными все средства отладки.

В режиме отладки VB особым образом выделяет строку, которая должна выполняться следующей. Сама строка выделяется желтым цветом, а на полосе индикатора рядом с ней появляется желтая стрелка.

Если выполнение программы прерывается в точке останова, то оба выделения комбинируются.

Чтобы продолжить выполнение программы с любой другой строки, необходимо желтую стрелку полосы индикатора просто перетащить мышью на нужную строку.

Если попытаться установить желтую стрелку на строку, которая не может быть выполнена, курсор мыши примет вид, указывающий на невозможность переноса. После отпускания кнопки мыши данная строка не выделяется.

Если при просмотре программы вы потеряли из виду текущую строку выполнения, то с помощью команды меню Debug, Show Next Statement можно вернуть ее в поле зрения в окне кода.

3. Пошаговое выполнение программы

Если программа находится в режиме отладки, то она будет работать медленнее, так как все строки выполняются по шагам. При этом можно непосредственно наблюдать за результатами выполнения каждой строки. Пошаговое выполнение является важным средством поиска ошибок и отладки программы. Сущест­вует несколько различных команд пошагового выполнения.

Команды пошагового выполнения можно вызвать из меню Debug либо из панели инструментов Debug.

3.1. Шаг с заходом (Step into)

Для выполнения следует нажать кнопку Step into на панели инструментов Debug или клавишу F8. При пошаговом выполнении строки кода выполняются одна за другой. После выполнения одной строки кода маркер следующей строки перемещается на одну строку.

Логическая последовательность строк программы сохраняется. Благодаря этому можно отслеживать последовательность выполнения строк при вызове процедуры, например, в операторах ветвления.

3.2. Шаг с обходом (Step Over)

Шаг с обходом подобен шагу с заходом. Различие проявляется только при вызове текущей процедурой других процедур. Если при шаге с заходом осуществляется переход в вызываемую процедуру, то шаг с обходом выполняет вызов процедуры как единичный оператор.

Шаг с обходом выполняется нажатием кнопки Step Over на панели инструментов Debug или комбинации клавиш Shift+F8. Этот вид пошагового выполнения представляет интерес при поиске ошибки в процедурах, содержащих вызовы других процедур. Сначала можно протестировать текущую процедуру без захода в вызываемые процедуры. Если же выяснится, что ошибка возникает в вызы­ваемой процедуре, то при следующем проходе следует войти в эту процедуру.

3.3. Шаг с выходом (Step Out)

Команда Step Out меню Debug позволяет выполнить оставшуюся часть текущей процедуры и возвратиться в точку вызова.

Для вызова команды Step Out можно воспользоваться также кнопкой панели инструментов Debug либо комбинацией клавиш Ctrl+Shift+F8. Эта команда доступна только в режиме отладки. Если текущая строка находится в вызванной процедуре, то с помощью команды Step Out остальная часть процедуры не выпол­няется по шагам. Отличие команды Step Out от команды Continue состоит в том, что после выхода из процедуры переключение в режим выполнения не происходит, если эта процедура была вызвана другой. Если же текущая процедура не была вызвана другой процедурой, то происходит переход в режим выполнения и VB ожидает возникновения события, выполнение процедуры обработки которого начнется в режиме отладки.

3.4. Выполнить до текущей позиции (Run To Cursor)

Команда Run To Cursor меню Debug позволяет выполнить программу от текущей выполняемой строки до строки с установ­ленным в ней текстовым курсором. Для вызова команды Run To Cursor используется также комбинация клавиш Ctrl+F8.

Команда Run To Cursor может помочь, если проверяемая процедура содержит циклы. В этом случае их просмотр командой Step Into может занять слишком много времени, что особенно неприятно, если большая часть цикла выполняется корректно. Эта команда используется всегда, когда нужно пропустить пошаговое выполнение некоторых частей кода.

3.5. Список вызовов

При поиске ошибок часто нужно знать последовательность вызова процедур. В окне Call Stack отображается список имен всех выполняемых в данный момент процедур. Первым отображается имя текущей процедуры. За ним следует список процедур в той последовательности, в которой они были вызваны. Имя процедуры обработки события указывается в конце списка. Таким образом, образуется список всех вызванных процедур или функций. После завершения процедура удаляется из списка.

Окно Call Stack позволяет отобразить команда Call Stack… меню View, которая доступна только в режиме отладки. Для открытия окна можно воспользоваться также комбинацией клавиш Ctrl+L или соответствующей кнопкой на панели Debug.

С помощью кнопки Show этого окна осуществляется переход в окно кода к выбранной в списке процедуре.

Кроме этого, на полосе индикатора зеленым треугольником отмечается строка, содержащая вызов процедуры.

4. Окна режима отладки

Кроме контроля хода выполнения программы важной задачей инструментов отладки VB является проверка значений выражений. Для реализации механизма просмотра (watch) VB предлагает несколько способов. Контроль значений возможен только в режиме отладки. Более того, контролируемое выражение доступно только в определенных местах; например, значение локальной переменной можно прове­рить только в процедуре, в которой она объявлена. При попытке проверить значение выражения за пределами области определения появляется сообщение "Out of context" ("Вне контекста").

4.1. Окно подсказки Data Tips

Самый простой вариант просмотра значения переменной или выражения – использование окна Data Tips. Для открытия этого окна достаточно в режиме отладки установить курсор мыши на соответствующем выраже­нии в окне кода.

Если же необходимо увидеть значение выражения, его следует выделить, а затем установить на нем курсор мыши.

4.2. Окно контрольного значения (Watch Window)

Это окно открывается с помощью команды меню View, Watch Window. Окно контрольного значения позволяет прослеживать изменение контролируемых значений, которыми могут быть значения переменных, выражений, а также свойств объектов. Контролируемые значения сначала следует добавить в окно контролируемо значения.

Проще всего для добавления контролируемых значений в окно воспользо­ваться методом Drag & Drop (перетащить и бросить). Для этого в окне кода следует выделить контролируемое значений, затем навести на него указатель мыши, нажать левую кнопку мыши и, удерживая ее нажатой, перетащить контролируемое значение в окно контролируемого значения, после чего отпустить левую кнопку мыши (бросить).

В первом столбце окна отображается контролируемое выражение и пиктограмма, отражаю­щая способ просмотра контролируемого выражения, который устанавливается в диалоговом окне Add Watch.

Рис. 14.1. Окно контрольного значения

Пиктограмма, изображающая очки (тип просмотра Watch Expression), показывает, что будет отображаться только текущее значение выражения, которое будет автоматически обновляться при переходе в режим отладки. Пиктограмма руки со знаком равенства (тип просмотра Break When Value Is True) показывает, что если значение контролируемого выражения становится равным True или ненулевым, то осуществляется автоматический переход в режим отладки. Пиктограмма руки с треугольником (знак Δ (дельта), или символ приращения) обозначает, что выполнение программы прерывается при изменении значения выражения. Для изменения способа просмотра контролируемого выражения следует щелчком правой кнопки на окне контрольного значения раскрыть контекстное меню и выполнить команду Edit Watch.

Выражение, отображаемое в первом столбце окна контрольного значения, можно не только просматривать, но и редактировать.

Во втором столбце отображаются текущие значения выражений. Обратите внимание, что текущее значение отображается только в режиме отладки. В этом режиме можно изменять и значение выражения (если это допускается). Для этого достаточно щелкнуть на нужном значении, а затем внести изменения.

Третий столбец отображает тип соответствующего выражения.

В последнем столбце указывается объект, которому принадлежит выражение или переменная. Это значит, что значение отобра­жается, если при просмотре область действия указанного объекта больше или равна текущей области действия.

Окно контрольного значения может отображать не только значения переменных и выражений, но и сложные структурированные объекты. Если перед именем объекта отображается знак плюс, то после щелчка на плюсе отображаются значения всех свойств объекта.

4.3. Окно локальных переменных (Local Window)

Окно локальных переменных функционирует аналогично окну контрольного значения. Однако если в окно контрольного значения необходимо явно добавлять выражения, то в окне локальных пере­менных все локальные переменные отображаются автоматически.

Для открытия этого окна следует вызвать команду Locals Window меню View или щелкнуть на соответствующей кнопке панели инструментов Debug.

Рис. 14.2. Окно локальных переменных

В первом столбце (см. рис. 14.2) отображаются имена локальных объектов и переменных. В первой строке приводится главный объект (форма, модуль или модуль класса), т. е. объект, которому принадлежит выполняемая процедура или функция.

Преимуществом этого окна по сравнению с окном контрольного значения является то, что все локальные переменные и объекты отображаются автоматически.

4.4. Окно отладки (Immediate Window)

В режиме отладки в это окно можно вводить и выполнять код VB. Однако многострочные конструкции, например For. . .Next, использовать нельзя.

Для открытия окна отладки следует вызвать команду Immediate Window меню View или воспользоваться комбинацией клавиш Ctrl+G.

В этом окне (см. рис. 14.3) можно не только изменять содержимое переменных или свойств, но и применять методы объектов, что позволяет, например, имитировать логическую ошибку или вызывать проце­дуру. Для выполнения инструкции нужно поставить в ней курсор и нажать на клавишу Enter. Текстовый курсор при этом может не находиться в конце строки.

Рис. 14.3. Окно отладки

После выполнения строка из окна не удаляется, поэтому ее можно выполнять несколько раз с измененными, при необходимо­сти, значениями. В окне отладки можно осуществлять не только ввод, но и вывод, воспользовавшись инструкцией Print. Для этого инструкции Print передается требуемое выражение, и после нажатия клавиши Enter результат отобразится в следующей строке.

С помощью перетаскивания можно перемещать выражения из окна кода в окно отладки и наоборот.

4.5. Инструкция Print

Вместо инструкции Print в окне отладки можно использовать вопросительный знак (?), как это было в старых версиях Basic (см. рис. 14.3). В окне отладки сохраняются последние 200 строк, которые можно редактировать или выполнять повторно.

Окно отладки можно использовать и по-другому. В этом случае, используя объект Debug и его метод Print, сообщения окну посылают из программного кода. Например, на рис. 14.3 можно увидеть результат работы находящейся в программном коде инструкции

Debug. Print "Число 2 = "; lblЧисло2.Caption

Возможность такого вывода в окно отладки имеет несколько преимуществ. Во-первых, таким образом выводить контрольные значения можно не только в режиме отладки, но и в режиме выполнения, что позволяет выводить выражения, не останавливая выполнение программы. Во-вторых, выведенные значения, отображаемые в окне отладки, можно просмотреть даже после остановки программы. Это важно в случаях, когда поведение программы при пошаговом выполнении отличается от поведения при нормальном выполнении, например при приеме данных в режиме реального времени.

5. Обработка ошибок времени выполнения

В идеальном случае программа не должна бороться с ошибками в период выполнения. Однако разработчик должен предусмотреть вероятность появления сбойных файлов, переполнения памяти или ввода пользователем некорректных данных. Все это может послу­жить причиной возникновения ошибок при выполнении программы.

При обнаружении такой ошибки VB выводит соответствующее сообщение и приостанавливает выполнение программы.

Если приложение было запущено из среды разработки, то сущест­вует возможность переключиться в режим отладки с помощью кнопки Debug либо в режим проектирования с помощью кнопки End. Среда разработки относительно "мягко" реагирует на ошибки периода выполнения.

Если же такая ошибка возникает после запуска выполняемого ЕХЕ-файла, то приложение немедленно закрывается. Хотя сообщение об ошибке и появляется, если не предусмотреть перехват ошибок, то перейти в режим отладки невозможно. Это драматическая реакция, возможно, на совершенно безобидную ошибку.

Перехват ошибок периода выполнения следует предусмотреть на этапе разработки приложения. Для этого создаются специальные процедуры-обработчики ошибок. Все ошибки периода выполнения можно разделить на две группы: ожидаемые, обработка которых предусмотрена разработчиком, и неожиданные, появление которых не всегда могут предвидеть даже опытные программисты.

Обработка ожидаемых ошибок времени выполнения производится в три этапа:

• перехват ошибки;

• проверка и устранение ошибки;

• продолжение выполнения программы.

5.1. Перехват ошибки

В VB для этого предназначена инструкция On Error, которая обычно помещается в начале процедуры или функции.

On Error GoTo Метка

On Error Resume Next

On Error GoTo 0

Выполнение инструкции On Error активизирует режим обработки ошибок. Это означает, что при возникновении ошибки периода выполнения после ввода в программу этой строки выполняются предусмотренные в программе инструкции обработки ошибки. Выполнение программы не прерывается и стандартное сообщение об ошибке не выводится.

Метка, указанная в инструкции GoTo, должна находиться в той же процедуре, что и инструкция On Error. Она указывается в отдельной строке и представляет собой имя, после которого ставится двоеточие. При возникновении ошибки управление будет передано на инструкцию, стоящую ниже метки.

Инструкцию Resume Next можно использовать вместе с инструкцией On Error, и тогда каждая строка, вызвавшая ошибку, игнорируется, так как управление передается на следующую инструкцию.

Если в качестве метки указан ноль (0), то предусмотренная разработчиком обработка ошибок отключается и включается стандартный механизм обработки ошибок.

5.2 Проверка и устранение ошибки

Инструкция On Error не выполняет непосредственно никакой обработки ошибок, а лишь передает управление ответственному за обработку ошибок фрагменту программы. Обычно метка находится в конце процедуры и перед ней помещается инструкция Exit Sub или Exit Function. Благодаря этой инструкции, при безошибочном выполнении процедура в этом месте завершает свою работу, и фрагмент процедуры после метки выполняется только после возникновения ошибки.

Обработка ошибки должна выполняться сразу после ее обнаружения. Сначала следует установить тип ошибки. Для этого в Visual Basic существует объект Err, свойство которого Number содержит код последней возникшей ошибки. Свойство Description этого окна содержит текстовое сообщение о последней ошибке.

Пример.

Dim ErrNum1 As Integer

ErrNum1 = Err. Number

Список кодов ошибок, которые можно перехватывать и обрабатывать, вы найдете в системе справок VB. После определения типа ошибки по ее коду (свойство Number объекта Err) следует попытаться устранить ошибку или обработать ее так, чтобы она не мешала выполнению программы. Например, при делении на нуль это может быть прекращение текущих вычислений. При ошибках обращения к диску может отображаться диалоговое окно для принятия пользователем решения о прекращении операции или повторном выполнении.

5.3 Продолжение выполнения программы

Завершив обработку ошибки, следует продолжить нормальное выполнение программы. Инструкция Resume позволяет вернуться в строку, вызвавшую ошибку, для ее повторного выполнения, а оператор Resume Next возвращает в следующую строку за строкой с ошибкой.

Процедура с обработчиком ошибок может выглядеть следующим образом:

Sub Error_Test()

Dim E As Single

On Error GoTo ErrLabel

‘Включает обработку ошибок

For i = 4 То 0 Step -1

Е = 2 / I

‘Вызывает деление на нуль

Next

Exit Sub

ErrLabel: ‘Метка

Select Case Err. Number ‘Проверка ошибки

Case 11 ‘Деление на нуль

i = -1

Err. Clear

Resume ‘Возврат

Case Else

MsgBox (Err. Description)

Stop

End Select

End Sub

Свойство Description объекта Err возвращает текст системного описания ошибки. Это можно использовать для вывода текста сообщения об ошибке в обработчике ошибок, поскольку системный вывод сообщения об ошибке при использовании обработчика ошибок не производится.

Лекция 15

Пользовательский тип данных

Кроме встроенных типов данных, таких как Integer, Long и т. п., VB поддерживает также типы данных, определяемые пользователем. Они могут быть созданы как на основе стандартных типов данных, так и на основе ранее определенных пользователем типов данных.

Для определения пользовательского типа данных используется ключевое слово Type:

[Private / Public] Type Имя_типа

ИмяЭлемента1 [([Размерность])] As Тип

[ИмяЭлемента2 [([Размерность])] As Тип]

End Type

Определив собственный тип данных, вы можете использовать его для объявления переменных этого типа. Эти переменные могут быть локальными, глобальными или переменными контейнера (подробнее):

Пример

Type Товар

Название As String

Цена As Currency

Код As String

End Type

Dim Инструмент As Товар

.

.

.

Инструмент. Название = "Отвертка"

Инструмент. Цена =120

.

.

.

В этом примере определяется тип данных Товар. Затем объявляется переменная Инструмент типа Товар, и устанавливаются конкретные значения составляющих этой переменной.

Доступ к элементам переменной пользовательского типа осу­ществляется, по аналогии с доступом к свойствам, путем указания точки после имени переменной. При этом переменные одинакового типа можно присваивать не поэлементно, а напрямую:

Type Субъект

Фамилия As String

ТабельныйНомер As Integer

End Type

Читатель As Субъект, Пользователь As Субъект

Private Sub Commandl_Click()

Пользователь. Фамилия = "Иванов И. И."

Пользователь. ТабельныйНомер = 218739

Читатель = Пользователь

End Sub

Переменные Читатель и Пользователь относятся к одному типу Субъект. Поэтому они присваиваться напрямую, а не поэлементно.

Пользовательские типы данных могут быть составными. В этом случае важна последовательность определения типов. Сначала нужно определить базисный тип, который будет использоваться далее в составных типах. Если не соблюдать это правило, то после запуска программы появится сообщение об ошибке. Ниже приводится пример использования составных пользовательских типов данных:

Type Персона

Имя As String

Фамилия As String

End Type

Type Клиент

Идентификатор As Персона

ДеньРождения As Date

End Type

Dim Покупатель As Клиент

Private Sub Command1_Click()

Покупатель. Идентификатор. Имя = "Иван"

Покупатель. Идентификатор. Фамилия = "Петров"

End Sub

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

Инструкция With

Инструкция With позволяет указывать объект только один раз для последовательности инструкций. Инструкция With ускоряет выполнение процедур и помогает избежать повторного задания имени объекта.

Command1.Caption = “Вычислить”

Command1.Font. Bold = True

Command1.Visible = False

С применением инструкции With этот программный код следовало бы записать так:

With Command1

.Caption = “Вычислить”

.Font. Bold = True

.Visible = False

End With

Для увеличения эффективности программы возможно создание вложенных инструкций With. Это показывает следующий пример.

Command1.Caption = “Вычислить”

Command1.Font. Name = "Arial"

Command1.Font. Bold = True

Command1.Font. Size = 15

Command1.Visible = False

Эквивалентный по результату действия программный код:

With Command1

.Caption = “Вычислить”

With .Font

.Name = "Arial"

.Bold = True

.Size = 15

End With

.Visible = False

End With

Использование в качестве аргументов процедур и функции имен форм и элементов управления

Список аргументов процедур и функций может включать имена форм и элементов управления (в качестве описателей типа для них применяются соответственно Form и Control). Это позволяет создавать универсальные алгоритмы для работы с форма­ми и управляющими элементами. Например, для привлечения внимания пользователя к одной из надписей формы можно создать одну универсальную процедуру, изменяющую шрифт и его цвет:

Sub Внимание (lbl As Control)

lbl. FontItalic = True

lbl. ForeColor = vbRed

End Sub

Аргументом процедуры является имя надписи. Обращение к данной процедуре с указанием в качестве значения имени какой-либо конкретной надписи приведет к изменению ее шрифта и цвета.

Знаки типов

Указывать название типа данных при объявлении не обязательно. Тип данных при объявлении может устанавливаться просто добавлением знака типа в конце имени переменной.

Знаки типов переменных:

Тип переменной

Знак типа

Пример

Integer

%

a%

Long

&

sum&

Single

!

sigma!

Double

#

b#

Currency

@

betta@

String

$

x$

Примеры объявлений переменных со знаками типов:

Dim Отчество$

Dim Процент@

Dim Счетчик%

Не все типы данных имеют собственные знаки. Применение знаков для объявления типов – устаревшая традиция, применение которой не рекомендуется.

В отличие от других языков программирования VB не требует явного объявления типа переменной. Если переменная появляется в инструкции в программном коде впервые, то тип будет объявлен автоматически. Это так называемое неявное объявление типа переменной.

Исходя из этого, следующие инструкции эквивалентны:

Dim a As Currency

a = 276

или

a@ = 276

Графика

В VB есть три графических объекта, которые позволяют работать с графикой, это:

*  форма (Form);

*  управляющий элемент графическое поле (PictureBox);

*  рисунок (Image).

Форма и графическое поле – это два объекта-контейнера, которые:

*  способны содержать в себе точечный рисунок из графического файла;

*  обладают графическими методами и позволяют с помощью графических методов рисовать на своей поверхности;

*  способные содержать в себе другие управляющие элементы.

Объект Image (рисунок) может только содержать в себе точечный рисунок, не обладает графическими методами и не не может включать управляющих элементов, т. е. не является контейнером.

1. Система координат

Как форма, так и графическое поле обладают системой координат (см. рис.15.1), которая применяется при любом выводе на поверхности формы или графического поля текста, графики и рисунков.

Рис. 15.1. Система координат

По умолчанию начало отсчета находится в левом верхнем углу объекта. Ось Х направлена вправо, ось Y – вниз.

Системой координат можно управлять как на этапе разработки так и при выполнении программы.

1.1 Свойство ScaleMode

Единицу измерения координат можно выбрать на этапе проектирования. За это отвечает свойство ScaleMode. По умолчанию в качестве единицы измерения выбран твип. Эта единица соответствует 1/1440 дюйма или 0,0176 миллиметра. В одном сантиметре примерно 567 твипов. Можно также выбрать в качестве единицы измерения пиксели (размер точки на рисунке), пункты или символы (применяется для текста), дюймы, сантиметры или миллиметры.

1.2. Свойства ScaleLeft и ScaleTop

Значения этих свойств определяют числовые значения координат левого верхнего угла объекта. Значения этих свойств не влияют на положение контейнера.

Рис. 15.2. Установка значения координат левого верхнего угла

Если в программном коде задать, например, инструкции ScaleLeft = 50 и ScaleTop = 100, то значения координат верхнего левого угла контейнера будут соответствовать рисунку, который расположен на рис. 15.2.

Если для контейнера (формы или поля рисунка) задать значение свойства ScaleTop = 100, то помещенный в этом контейнере объект управления, значение свойства Top (значение координаты Y объекта) которого равно 100 будет помещен под верхнюю кромку контейнера.

Лекция 16

1.3. Свойства ScaleWidth и ScaleHeigt

Эти свойства задают масштаб при существующей высоте и ширине объекта имеются в виду внутренние размеры. Например:

ScaleWidth = 1000

ScaleHeigt = 100

Эти инструкции определяют единицу горизонтальной оси как 1/1000 внутренней ширины объекта, и единицу вертикальной оси как 1/100 текущей внутренней высоты объекта. Если размеры формы при выполнении программы изменяются, единицы остаются теми же.

1.4. Метод Scale

Позволяет определить систему координат и единицу измерения на форме, графическом поле и объекте Printer. Он задает координаты начала и конца отсчета по вертикали и горизонтали. Эту систему координат можно будет использовать, если свойство ScaleMode имеет значение 0.

Синтаксис метода:

[объект].Scale [(x1, y1) – (x2, y2)]

x1, y1 – координаты левого верхнего угла определяемой системы координат объекта;

x2, y2 – координаты правого нижнего угла определяемой системы координат объекта.

Если координаты опущены, то на рабочей поверхности объекта будет принята система координат по умолчанию (с единицей измерения – твип).

Метод Scale не изменяет размеры объекта, а задает значения координат его левого верхнего и нижнего правого углов.

2. Графические изображения

Изображение складывается из множества отдельных точек, которые называются пикселями. Изображение на экране является образом видеопамяти (специальный блок памяти, с которым работает видеоконтрол­лер). Количество точек на экране и информация по каждой из точек определяют режим работы дисплея и требуемый объем видеопамяти. В монохромных дисплеях один пиксель требует один бит видеопамяти (бит содержит 1 – соответствующая ему точка экрана светится, бит содержит 0 – не светится). В цветных дисплеях любой цвет создается смеше­нием красного, зеленого и синего цветов различной интенсивно­сти. На один пиксель отводится до 4 байта. В трех первых байтах кодируется интенсивность (от 0 до 255) соответственно красного, зеленого и синего цветов. Четвертый байт не используется.

R

G

B

Не используется

Цветовые возможности конкретного компьютера зависят от видеоадаптера и от выбранного в Windows видеорежима. Возможны видеорежимы 16-, 32-, 64-, 256-, 65536-цветные и с 16,7 миллионами цветов.

Для задания цвета графических объектов в VB используется специальная функция RGB, название которой образовано по первым буквам английских слов Red (красный), Green (зеленый) и Blue (синий). Функция использует три целочисленных аргумента RGB(R, G, B), которые могут принимать значения от 0 до 255. Первый параметр определяет интенсивность красного цвета, второй – интенсивность зеленого, третий – интенсивность синего. При значении параметра 0 – соответствующий цвет полностью отсутствует, 255 – максимальная интенсивность.

Ниже в таблице приводятся значения параметров RGB-функции для наиболее распространенных цветов.

Цвет

Красный компонент

Зеленый компонент

Синий компонент

Черный

0

0

0

Синий

0

0

255

Зеленый

0

255

0

Циан

0

255

255

Красный

255

0

0

Мажента

255

0

255

Желтый

255

255

0

Белый

255

255

255

3. Графические управляющие элементы

Это два элемента управления: Line (линия) и Shape (фигура). Элемент Shape за счет выбора соответствующих значений его свойства Shape способен превращаться в одну из шести геометрических фигур (окружность, овал, прямоугольник, квадрат, а также прямоугольник и квадрат со скругленными углами). С применением этих трех элементов управления можно создавать графику проще, чем посредством графических методов.

4. Работа с рисунками

Рисунки могут быть помещены в форме, в элементе управления графическое поле (PictureBox) и в элементе управления рисунок (Image). VB позволяет загружать в приложение файлы. jpg и. gif, а также. bmp, .dib, .ico, .cur, .wmf и. emf.

Во время разработки точечный рисунок может быть добавлен в форму или элемент управления двумя способами:

*  из графического файла с помощью свойства Picture;

*  через буфер обмена.

В последнем случае следует скопировать рисунок из другого приложения в буфер обмена, вернуться в VB, выбрать форму, рисунок или графическое поле и в меню Edit (правка) выбрать Paste (вставить).

Для удаления рисунка из объекта следует выделить этот объект, затем в окне свойств выбрать свойство Picture, двойным щелчком на значении этого свойства выделить его и, наконец, нажать клавишу Delete.

В период выполнения можно выполнить загрузку изображения тоже несколькими способами.

Например, можно использовать функцию LoadPicture для присвоения полного имени файла свойству Picture. Следующий оператор загружает файл bmp1.bmp в элемент управления pic1:

pic1.Picture = LoadPicture(“c:Pictbmp1.bmp”)

Можно также скопировать изображение из одного объекта в другой. Следующий оператор копирует графику из элемента управления – рисунок img1 в элемент управления – графическое поле pic1:

pic1.Picture = img1.Picture

Для удаления изображения в период выполнения без замены его другим изображением можно воспользоваться функцией LoadPicture.

Следующий оператор удаляет изображение из графического поля img1:

img1.Picture = LoadPicture(“”)

5. Графические методы

Для создания графики VB, в дополнение к графическим элементам управления, имеет несколько графических методов для применения в форме и графическом поле (PictureBox), приведенных далее в таблице:

Имя метода

Назначение метода

Line

Рисует линию, прямоугольник или заполненное окно

Circle

Рисует круг, эллипс или дугу

Cls

Очищает всю графику и вывод метода Print.

PaintPicture

Закрашивает графику в произвольно выбранных местах

Point

Возвращает значение цвета выбранной точки

PSet

Устанавливает цвет отдельной точки

Очистка области рисования выполняется применением метода Cls:

[Объект.] Cls

Объект в этом и в последующих синтаксических определениях графических методов можно не указывать. Если объект опущен, то действие метода относится к текущей форме.

Для нанесения точки применяется метод PSet

:

[Объект.]PSet(x, y)[,Цвет]

где х и y – координаты точки.

Например, нанесет точку синего цвета инструкция:

PSet(300,400), RGB(0,0,255)

Здесь и в следующих определениях аргумент Цвет можно задавать функцией RGB(R, G, B). Эта функция определяет цвет как смесь трех цветов: красного (R), зеленого (G) и синего (B), интенсивность каждого из которых задается числом из диапазона от 0 до 255.

Стереть точку можно инструкцией, которая задает для нее цвет фона:

PSet(300,400), BackColor

Для рисования линии, соединяющей точку (x1, y1) с точкой (x2, y2), следует применить метод Line:

[Объект.]Line [(x1, y1)] – [Step](x2, y2)[, Цвет]

Линия включает первую точку, но не включает вторую, конечную точку. Это полезно при рисовании замкнутого контура. Последнюю точку линии можно обозначить инструкцией

PSet Step (0, 0)[, Цвет]

Слово Step перед координатами означает, что они отсчитываются относительно последней точки рисования.

Например, инструкция Line (100, 200)–(150, 250) эквивалентна инструкции Line (100, 200)–Step(50, 50).

Если первая пара координат опущена, то линия будет нарисована от позиции текущей точки, которой является последняя точка рисования, до точки с координатами (x2, y2). Текущая точка может быть также задана с помощью ее координат CurrentX и CurrentY.

Например, следующие инструкции нарисуют треугольник:

CurrentX = 500

CurrentY = 1500

Line –(2000, 3000)

Line –(1000, 3000)

Line –(500, 1500)

Если аргумент Цвет опущен, то цвет линии определяется значением свойства ForeColor объекта.

Для рисования прямоугольников вместе с методом Line используется аргумент B, например инструкция

Line (200, 200)–Step(1000, 1000), , B

нарисует квадрат со стороной 1000 твипов. Две запятые перед аргументом B указывают, что аргумент Цвет опущен.

Для рисования окружностей, эллипсов, дуг и секторов может быть применен метод Circle. Ниже показан синтаксис этого метода:

[Объект.]Circle [Step](x, y), Радиус[, [Цвет][, [Нач], [Кон][, Вид]]]

Здесь приняты некоторые новые обозначения:

x, y – координаты центра;

Радиус – радиус окружности, для эллипса – размер более длинной полуоси;

Нач и Кон – выраженный в радианах угол начала и угол конца дуги, которые присутствуют или отсутствуют в обращении к методу только вместе;

Вид – отношение вертикальной полуоси эллипса к горизонтальной полуоси (по умолчанию равен 1).

Например, процедура Form_Click в режиме выполнения после щелчка на форме нарисует на форме дугу окружности с центром в точке с координатами 2000, 1500, радиуса 1000 твипов, от начальной точки, расположенной под углом pi / 2, против часовой стрелки, до конечной точки, находящейся под углом pi / 3:

Private Sub Form_Click()

Const pi = 3.14159265

Circle (2000, 1500), 1000, , pi / 2, pi / 3

End Sub

Если перед началом или перед концом дуги поставить знак минус, то при рисовании дуги эта точка дуги будет соединена прямой с центром окружности.

Обращение Circle (600, 1000), 800, , , , 2 нарисует эллипс, вертикальная ось которого равна 1600, а горизонтальная ось равна 800.

При рисовании прямоугольника, круга или эллипса эти фигуры могут быть заполнены сплошным цветом или цветными линиями.

Свойство FillStyle отвечает за вид заполнения рисуемой фигуры, предлагая на выбор один из восьми видов заполнения. По умолчанию имеет значение 1 – Transparent (прозрачное, фигура выглядит незаполненной). Значение этого свойства 0 – Solid обеспечивает заполнение фигуры сплошным цветом, установленным свойством FillColor. Остальные значения 2 – 7 предлагают заполнение вертикальными, горизонтальными, наклонными линиями или в клетку.

Толщина линии при выводе задается значением свойства DrawWidth объекта.

Будет линия сплошной или различного вида прерывистой – определяет значение свойства DrawStyle объекта.

Свойство AutoRedraw формы или графического поля разрешает (при его значении, равном True) или запрещает (при его значении, равном False) перерисовывание результатов работы графических методов, например при изменении размеров окна.

Методы, осуществляющие вывод информации на форму, позволяют направлять ее непосредственно на принтер. Принтер (объект Printer) рассматривается как особая форма, размер кото­рой совпадает с размером печатаемой страницы. Метод Scale применим для объекта Printer и позволяет установить нужную систему координат.

6. Построение графиков функций

Построим график функции у = -0.25х3 + 0.14х2 + 0.25 х – 25 на отрезке значений аргумента
[-10,+10]. Анализ показывает, что область значений функции на этом отрезке: -270 < у < +270.

Option Explicit

Function Primer(x As Single) As Single

Primer = -0.25 * x ^ 3 + 0.14 * x ^ 2 + _

0.25 * x — 25

End Function

Private Sub Form_Click()

Dim x As Single

Scale (-10, ­­-270)-(10, 270) ‘установка масштаба

Cls ‘очистка экрана

DrawWidth = 1 ‘установка толщины линии

Line (-10, 0)-(10, 0) ‘рисование оси Х

Line (0, -270)-(0, 270) ‘рисование оси Y

CurrentX = -10 ‘текущее значение Х

CurrentY = Primer(-10) ‘текущее значение Y

For x = -10 To 10 Step 0.5

Line -(x, Primer(x)) ‘построение графика

Next

End Sub

Построенный график показан на рис. 16.1.

Рис. 16.1. Результат работы программы

Лекция 17
Файлы

Современные компьютеры имеют оперативную и внешнюю память. В оперативной памяти находятся одна или несколько открытых программ и обрабатываемые ими данные. После закрытия программы ее данные в оперативной памяти не сохраняются, так как используемые ячейки памяти выделяются для данных другой программы. Объем оперативной памяти ограничен, ее стоимость относительно высока, информация не сохраняется при выключении питания компьютера – все это не позволяют ее применять для постоянного хранения больших объемов информации. Для этой цели используется внешняя память. Это жесткие и гибкие магнитные диски, оптические диски, магнитные ленты, позволяющие хранить сотни мегабайт и гигабайты информации, стоимость которых относительно невелика.

Хранение больших объемов информации на внешних носи­телях с учетом того, что время доступа к данным на внешних носителях на один, два порядка ниже времени доступа к данным в оперативной памяти, требует их хорошо продуманной организации. Данные на внешних носителях информации хранятся в виде файлов.

Под файлом понимается именованная часть внешней памяти, предназначенная для хранения совокупность данных. Файл состоит из записей. Запись характеризуется длиной, выраженной в байтах.

Запись состоит из данных, которые передаются между оперативной и внешней памятью за одну операцию чтения или записи данных.

Чтение данных – это передача данных из внешней памяти в оперативную память, запись данных – это передача данных из оперативной памяти во внешнюю память.

Работа с файлами включает этапы:

получение номера свободного канала ввода-вывода, с которым будет связан файл;

открытие файла;

чтение или запись данных;

закрытие файла;

удаление файла.

Номер файла

Каждому открытому файлу система VB ставит в соответствие канал ввода-вывода с определенным номером. При выполнении операции ввода и вывода имеет значение не имя файла, а номер связанного с ним канала.

Номер свободного канала, который можно использовать для работы с файлом может быть получен с помощью функции FreeFile:

FreeFile [(RangeNumber)]

Необязательный параметр RangeNumber может принимать значение 0 (по умолчанию) и 1. Если его значение равно 0, то возвращается номер канала из диапазона 1– 255, если 1, то из диапазона
256 – 511.

Пример

n = FreeFile

Типы доступа к файлам

В VB предусмотрены три типа доступа к файлам:

последовательный доступ (Sequential) – для чтения и записи текстовых файлов, которых могут состоять из записей переменной длины;

произвольный доступ (Random) – для чтения и записи файлов с записями, которые могут быть только одинаковой длины;

двоичный доступ (Binary) – для чтения и записи отдельных байтов файла.

При последовательном доступе для доступа к какой-либо записи должны быть пройдены все предыдущие записи. При произвольном доступе можно сразу перейти к нужной записи. Все внешние устройства позволяют использовать последовательный доступ к записям файла. Произвольный доступ позволяют использовать только магнитные и оптические диски.

Последовательный доступ

Последовательный доступ используется главным образом при работе с текстовыми файлами. Текстовый файл может содержать коды символов, признак перевода строки ( vbCrLf или Chr(13) & Chr(10)), признак табуляции (vbTab или Chr(10)) и признак конца файла. Здесь записи – это строки переменной длины, отделенные друг от друга символом перевода строки.

Файл последовательного доступа должен быть открыт инструкцией Open:

Open ИмяФайла For [Input / Output / Append] As НомерФайла

Ключевое слово

Описание

Input

Открытие только для чтения из файла

Output

Открытие для записи в файл

Append

Открытие для добавления к файлу

Если файл не существует и открывается для чтения (Input), то VB выдает сообщение об ошибке, а если для записи или добавления (Output или Append), то создается новый файл. Если файл с указанным именем существует, то в режиме Output его содержимое удаляется, а в режиме Append файл открывается для добавления:

В конце строки указывается номер файла НомерФайла.

Пример.

Open "С:Readme. txt" For Append As fh1

Инструкция Close #НомерФайла предназначена для закрытия открытого файла. Если номер файла указан, то закрывается соответствующий файл, если нет, то закрываются все открытые файлы. Примеры:

Close #fh ‘закрывает файл, описываемый номером fh;

Close fh ‘использование # необязательно;

Close ‘Закрывает все файлы, открытые приложением

Чтение из файла последовательного доступа

Для считывания данных из файла, открытого для последова­тельного доступа, существует несколько возможностей. В общем случае это осуществляется с помощью инструкции Input, имеющей несколько разновидностей:

1.  Инструкция Line Input # считывает одну запись.

Line Input #НомерФайла, ИмяПеременной

где Line Input – ключевое слово;

НомерФайла – это номер файла;

ИмяПеременной имя переменной типа String или Variant, которая принимает значение записи файла.

При выполнении инструкции считывается одна запись файла и помещается в ячейку оперативной памяти, адрес которой соот­ветствует имени переменной в инструкции ввода (переменная по­лучает значение, совпадающее с введенной записью файла). По­следовательное выполнение инструкций ввода обеспечивает по­следовательное считывание записей файла.

2.  Инструкция Input$ — считывает заданное количество символов (байтов).

Может применяться как инструкция и как функция, например:

Строка = Input$ (КоличествоБайтов, НомерФайла)

Прочитать всю информацию из файла можно несколькими способами:

Private Sub Form_Click()

Dim S As String, T As String

Dim fh As Integer

fh = FreeFile

Open “c:ReadMe. txt” For Input As fh

‘ 1-ый вариант

Do Until EOF(fh)

Line Input #fh, S

T = T & S & vbLf

Loop

‘ 2-ой вариант

‘ T = Input$(LOF(fh),fh)

Close #fh

Print T

End Sub

Оба варианта приводят к одинаковому результату. В первом варианте инструкция Input: выполняется в цикле, пока не будет достигнут конец файла. Функция EOF (сокращение End Of File) возвращает значение True при достижении конца файла. При этом на каждом шаге цикла считывается отдельная строка и к ней добавляется символ конца строки, который отбрасывается инструкцией Line Input.

Во втором варианте весь файл считывается функцией Input$. Функция LOF (сокращение Length Of File) позволяет определить длину файла в байтах.

3. Инструкция Input # — применяется для чтения файлов, записанных инструкцией Write #.

Запись в файл последовательного доступа

В VB для записи информации в файл используются инструкции Print # и Write #.

Инструкция Print # функционирует почти так же, как ее "коллега" для экрана, с той лишь разницей, что данные не выводятся на экран, а сохраняются в файле, открытом для записи или добавления. Для вывода информации в последовательный файл исполь­зуется инструкция:

Print #НомерФайла, [ (Spc(n) / Tab[(n)])] [ Выражение] [ , или ;]

Print # — обеспечивает вывод в последовательный файл в формате дисплея (т. е. аналогично выводу на печать, например, на форме).

Выражение выражение, значение которого записывается в файл.

Если выражения разделяются «;», то в файл они записыва­ются без пробелов слитно.

Если выражения разделяются «,», то в файл они записыва­ются в фиксированные зоны длиной 14 символов (зонный формат).

Если в конце выражения не стоит «;» или «,», то выведенная в файл строка дополняется символами <CR>, обозначающими переход к началу строки (ASCII-код равен 13), и <LF>, обозначающими переход на другую строку (ASCII-код равен 10). Таким образом, каждому значению соответствует одна запись или одна строка при выводе в формате дисплея.

Spc(n) и Таb(n) определяют соответственно вставку n пробе­лов между выводимыми выражениями и табуляцию на n колонок перед списком выражений.

Примеры

Print #fh, Text1.Text

Print #fh, "Фрагмент 1", " Фрагмент 2"

Print #fh, "Это составляет "; "единое целое"

Инструкция Write # имеет такой же синтаксис, что и Print #. Отличие состоит только в форматировании вывода. Если Print # сохраняет данные в виде обычного текста, то Write # заключает текстовые строки в кавычки, а цифры выводятся без кавычек:

Print #fh,”Москва”, ”Киев”, 85

‘ в файле будет: Москва Киев 85

Write #fh, “Москва”,”Киев”, 85

‘ в файле будет: “Москва”, “Киев”, 85

Данные, сохраненные с помощью инструкции Write #, можно считать инструкцией Print #.

Для удаления с дискового пространства неиспользуемого файла используется инструкция

Kill ИмяФайла

где Kill – зарезервированное слово.

Произвольный доступ

В отличие от последовательного доступа, при котором записи не структурированы, произволь­ный доступ предполагает, что записи имеют постоянную структуру, а следовательно и одинаковую длину. Это позволяет считывать данные в произвольном порядке. Обычно эти данные имеют пользовательский тип.

Открытие файла

Файл произвольного доступа должен быть открыт инструкцией Open.

Open ИмяФайла For Random [Access Доступ] [Блокировка] As [#] НомерФайла [Len = ДлинаЗаписи]

Параметр Len определяет длину записи. Если это значение меньше, чем реальная длина записи, то возникает ошибка, если больше — то при записи файла используется больше дискового пространства, чем необходимо.

Параметр Access позволяет задать права доступа к открывае­мому файлу:

Доступ

Пример

Без указания

Ореn “Date. dat” For Random As НомерФайла

Чтение (Read)

Ореn “Date. dat” For Random Access Read As НомерФайла

Запись (Write)

Ореn “Date. dat” For Random Access Write As НомерФайла

Чтение и запись

(Read Write)

Ореn “Date. dat” For Random Access Read Write As НомерФайла

Если права доступа не указаны, то по умолчанию используется Read Write.

Обычно с файлами с произвольным доступом пользуются многие приложения и многие пользователи при работе в сети. Для обеспечения целостности данных при коллективном использовании файла следует установить значение параметра блокировки, определяющего права доступа к открытому файлу. Этот параметр может принимать значения:

*  Shared Файл может использоваться всеми процессами для считывания и записи.

*  Lock Read Никакой другой процесс не может считывать данные из файла.

*  Lock Write Никакой другой процесс не может записывать данные в файл.

*  Lock Read Write Никакой другой процесс не может считывать или записывать данные.

Пример

Open "c:ADDRESS. DАТ" For Random Access Write As 1 Len = 27

Ввод и вывод (Get — чтение, Put — запись)

Для чтения и записи данных используются соответственно инструкции Get и Put.

Get #НомерФайла, НомерЗаписи, Переменная

Put #НомерФайла, НомерЗаписи, Переменная

В примере в файл записываются данные из переменной Address, причем номер записи равен 7, а затем в переменную Address считывается вторая запись файла.

Put #fh, 7, Address ‘сохраняет 7-ую запись

Get #fh, 2, Address ‘считывает 2-ую запись

Для того чтобы в одной записи сохранить несколько значений различных типов, следует использовать пользовательские типы данных:

Type Person

FirstName As String * 20

Name As String * 20

CustomerN As Integer

End Type

Dim Customer As Person

Private Sub Command1_Click()

Dim fh As Integer

fh = FreeFile

Open "C:LORE. DAT" For Random As fh Len = Len(Customer)

Get #fh, 2, Customer

Close #fh

End Sub

Двоичный доступ

Двоичный доступ незначительно отличается от произвольного доступа. Разница состоит только в том, что двоичный доступ возможен не к определенному набору данных, а к отдельному байту внутри любого файла.

Открытие файла для двоичного доступа

Для открытия двоичного файла также используется инструкция Open:

Open ИмяФайла Fоr Binary [Access Доступ] [Блокировка] As [#] НомерФайла

Формат инструкции Open при двоичном доступе похож на формат этой инструкции при произвольном доступе. Главное отличие состоит в том, что вместо ключевого слова Random указывается Binary, а параметр Len отсутствует, так как записи имеют фиксированную длину – 1 байт.

Пример

Open “SPOCK. VUL” For Binary As fh

Ввод и вывод

Для считывания и записи в файл используются также инструкции Get и Put. Синтаксис их такой же, как при произвольном доступе, только вместо номера записи указывается номер байта:

Get #fh, 12, Var ‘считывает 12-й байт

Put #fh, 4, Var ‘записывает 4-й байт

Если данные считываются в строку, то будет считано такое количество байтов, равное длине строки:

Dim strOutput As String

str0utput = String(24, " ")’Создана строка длиной 24 байта

Get #fh, 26, str0utput

В данном примере в строку считывается 24 байта, начиная с 26-го байта файла

Лекция 18

События

Система Windows генерирует события (сообщения для приложения), которые предназначены для управления работой приложения. Приложение может реагировать или не реагировать на событие. Для того чтобы приложение реагировало на событие, программист должен поместить программный код в заготовке соответствующей событийной процедуры.

Некоторые события поддерживают почти все управляющие элементы. Такими событиями, например, являются:

*  GotFocus (Получил фокус) – генерируется в момент получения объектом фокуса клавиатуры. Пока объект обладает фокусом, все события клавиатуры происходят для него.

*  LostFocus (Потерял фокус) – генерируется, когда фокус перемещается на другой объект.

Форма поддерживает события, некоторые из которых используются особенно часто.

Наиболее часто применяемые события формы

Имя события

Когда происходит

Load

При загрузке формы. Удобно использовать для инициализации элементов формы

Paint

При перерисовывании формой своего содержимого

QueryUnlload

Перед выгрузкой формы. Используется для отмены выгрузки формы

Resize

При любом изменении размеров формы, при первом ее появлении на экране, свертывании и восстановлении

Terminate

При прекращении существования формы. Из памяти удаляются все ссылки на форму, она больше не может быть загружена

Unload

При выгрузке формы из памяти. Ссылки на форму сохраняются, она может быть загружена заново

Источником некоторых событий может быть мышь.

События мыши

Имя события

Когда происходит

Click

При нажатии и отпускании кнопки мыши (щелчок)

DragDrop

При окончании перетаскивания объекта

DragOver

При перетаскивании объекта

MouseDown

При нажатии кнопки мыши. Аргументы событийной процедуры позволяют определить, какая из кнопок мыши была нажата и не происходит ли это при нажатой клавише Shift или Ctrl или Alt

MouseMove

При перемещении мыши

MouseUp

При отпускании ранее нажатой кнопки мыши

Клавиатура также является источником событий. События клавиатуры происходят для того управляющего элемента, который в данный момент обладает фокусом клавиатуры. В случае, если ни один управляющий элемент не обладает фокусом, это событие получит форма. Но если свойству KeyPreview формы присвоить значение True (по умолчанию оно имеет значение False), то каждое событие клавиатуры будет происходить сначала для формы, затем для управляющего элемента, обладающего фокусом клавиатуры.

События клавиатуры

Имя события

Когда происходит

KeyDown

При нажатии клавиши. Применяется для отслеживания нажатия функциональных клавиш, клавиш навигации и других, используемых для управления программой

KeyPress

При нажатии и затем отпускании одной из символьных клавиш. При нажатии не символьных клавиш событие не происходит

KeyUp

При отпускании ранее нажатой клавиши. Применяется для отслеживания нажатия функциональных клавиш, клавиш навигации и других, используемых для управления программой

Объекты, классы, коллекции

Объектами являются форма и управляющие элементы, помещенные на форму. Есть глобальные объекты VB.

Глобальные объекты VB

Объект

Описание

App

Приложение, содержит сведения об исполняющейся программе

Clipboard

Обеспечивает доступ к буферу обмена Windows и позволяет программе обмениваться данными с другими приложениями.

Debug

Отладка. Предназначен для облегчения поиска ошибок

Err

Содержит информацию об ошибках периода выполнения.

Error

Служит для отладки приложений, работающих с базами данных

Printer

Позволяет обращаться к принтеру, как к объекту

Screen

Позволяет обращаться к экрану, как к объекту

Объекты обладают свойствами. Значения свойств могут быть заданы на этапе визуального программирования, а также могут быть изменены кодом при выполнении приложения.

Большинство объектов кроме свойств также располагают методами. Метод позволяет выполнить определенное действие с объектом.

Вот некоторые примеры методов:

Имя метода

Назначение

Circle

Позволяет нарисовать на поверхности формы или управляющего

элемента PictureBox окружность, эллипс и сектор

Cls

Удаляет с поверхности формы или объекта PictureBox

результаты графического и текстового вывода

Hide

Удаляет форму с экрана без выгрузки ее из памяти

Line

Рисует линии и прямоугольники на рабочей поверхности

формы или управляющего элемента PictureBox

Move

Перемещает объект в точку с заданными координатами

PSet

Рисует точку заданного цвета с заданными координатами на

поверхности формы или управляющего элемента PictureBox

SetFocus

Перемещает фокус клавиатуры на данный объект

Show

Отображает форму на экране

Size

Изменяет размеры объекта

К свойствам и методам объекта можно обратиться следующим образом:

ИмяОбъекта. Имя Свойства

ИмяОбъекта. Имя Метода

Например, выполнение приведенной ниже инструкции приведет к удалению окна формы с экрана:

Form1.Hide

Основная идея объекта состоит в том, что некоторые данные и код, предназначенный для работы с этими данными, объединяются в единое целое. Это объединение называется инкапсуляцией. Внешний код может взаимодействовать с объектом через его свойства, методы и события.

Класс представляет собой шаблон объекта. А объект в этой связи – это одна из копий, созданных по заданному классом шаблону. По аналогии с переменными класс можно рассматривать как тип, а объект, как переменную этого типа.

Объектно-ориентированные языки (С++) поддерживают инкапсуляцию, полиморфизм и наследование.

Под полиморфизмом подразумевается, что в разных классах существуют методы с одинаковыми именами и решающие при этом одинаковые задачи.

В объектно-ориентированных языках, поддерживающих наследование возможно создание новых классов на основе уже существующих. При этом вновь созданный класс обладает всеми функциональными возможностями класса-родителя. Этот механизм называют наследованием.

VB поддерживает инкапсуляцию, отчасти поддерживает полиморфизм, но не поддерживает наследование.

Возможно объявление переменной объектного типа, значением которой является объект. Синтаксис объявления такой переменной:

Public/Private/Dim ИмяПеременной As [New] ИмяОбъектногоТипа

В качестве объектного типа рекомендуется вместо общих типов Object и Control применять по возможности конкретные классы (такие как, например, Label или TextBox). В этом случае приложение будет работать быстрее. Список конкретных классов можно увидеть в окне Object Browser, которое можно открыть, щелкнув на кнопке на панели инструментов.

Примеры объявления переменных объектного типа:

Dim a As Object

Dim b As Control

Dim c As Label

Применение необязательного зарезервированного слова New означает необходимость создания нового управляющего элемента указанного типа.

Чтобы переменная объектного типа содержала ссылку на объект, следует воспользоваться инструкцией, имеющей синтаксис:

Set ИмяПеременной = [New] Ссылка

Если ссылка указывает на несуществующий объект, то применение необязательного зарезервированного слова New приведет к созданию нового объекта.

Коллекции

Объекты и переменные могут быть объединены в коллекцию. Это позволяет производить некоторые действия со всеми входящими в коллекцию данными. Коллекция в свою очередь является объектом, она обладает свойствами и методами.

Так свойство Count содержит число объектов коллекции.

Некоторые методы коллекций

Имя метода

Назначение

Item

Позволяет выбрать объект в коллекции

Add

Включает объект в состав коллекции

Remove

Исключает объект из состава коллекции

Коллекция должна быть объявлена программистом с применением синтаксиса:

Public/Private/Dim ИмяКоллекции As New Collection

Для работы с элементами коллекции в VB предусмотрена инструкция цикла For Each … In … Next (для каждого … в …).

Синтаксис:

For Each Экземпляр In Коллекция

[Инструкции]

[Exit For]

[Инструкции]

Next

Эта инструкция повторяет выполнение группы инструкций для каждого экземпляра коллекции.

Пример.

Объявлены коллекция и три переменные, которые включены в коллекцию. Затем все содержимое коллекции распечатано (см. рис. 18.1).

Private Sub Form_Click()

Dim List As New Collection

Dim i As Integer

Dim s As Single

Dim st As String

Dim v As Variant

i = 3

s = 1.5

st = "Test"

List. Add st

List. Add s

List. Add i

For Each v In List

Print v,

Next

End Sub

Рис. 18.1. Результат работы программы

В VB определены две встроенные коллекции объектов, к которым можно обращаться без их объявления:

*  Forms. В эту коллекцию включены все загруженные формы проекта.

*  Controls. Коллекция включает все управляющие элементы всех форм.

В качестве примера рассмотрим процедуру, которая текст на всех надписях делает красного цвета.

Private Sub Command1_Click()

Dim КоллекцияНадписей As New Collection

Dim x As Control

For Each x In Controls

If TypeOf x Is Label Then

КоллекцияНадписей. Add x

End If

Next

For Each x In КоллекцияНадписей

x. ForeColor = RGB(255, 0, 0)

Next

End Sub

Первый цикл в этой программе просматривает все управляющие элементы проекта. Если управляющий элемент – надпись, то он включается в коллекцию КоллекцияНадписей.

Второй цикл просматривает все элементы коллекции КоллекцияНадписей и устанавливает красный цвет текста на каждом элементе этой коллекции.

В VB предусмотрена возможность определения новых классов. Однако эту важную тему мы вынуждены оставить за рамками нашего внимания.

Экзаменационные вопросы

1.  Способы представления символов и чисел.

2.  Основные типы данных VB.

3.  Объявление констант и переменных.

4.  Структура проекта.

5.  Область действия и время жизни переменных.

6.  Арифметические операции.

7.  Отношения, логический тип данных, логические операции.

8.  Стандартные математические функции VB.

9.  Приоритет операций, установленный в VB.

10. Инструкция присвоения, функция InputBox.

11. Метод Print, функция MsgBox.

12. Инструкция If.

13. Инструкция Select Case.

14. Инструкция For … Next.

15. Инструкции Do While … Loop и Do … Loop While.

16. Инструкции Do Until … Loop и Do … Loop Until.

17. Статические и динамические массивы. Объявление массивов.

18. Объявление процедур и обращение к ним.

19. Объявление функций и обращение к ним.

20. Виды процедур VB. Область действия имен процедур и функций.

21. Синтаксис аргументов процедур и функций.

22. Передача аргументов по ссылке и по значению.

23. Необязательные аргументы, массив аргументов, именованные аргументы.

24. Пользовательский тип данных.

25. Система координат. Свойство ScaleMode. Метод Scale.

26. Графические управляющие элементы.

27. Графические методы.

28. Средства отладки VB.

29. Файлы с последовательным доступом, объявление, запись, чтение.

30. Файлы с произвольным доступом, объявление, запись, чтение.

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020