ЛАБОРАТОРНАЯ РАБОТА №4"Окна сообщения и ввода"
Цели: 1) Изучить элемент управления "окно собщения".
2) Изучить элемент управления "окно ввода".
MsgBox() - окно сообщения.
~~~~~~~~~~~~~~~~~~~~~~~~~~
Поговорим о функциях, которые помогают программисту. На
лекциях было сказано о функции MsgBox(), которая выводит
на экран диалоговое окно. Формат функции:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])
1. Prompt - текст.
2. Buttons - необязательный числовой параметр, который ук-
азывает на число и тип кнопок, задействованных в диало-
говом окне; а также тип значка и модальность окна.
Комментарий. Диалоговые окна могут иметь несколько
кнопок. Иногда на них есть кнопка "Оk" ("хорошо" -
англ.), иногда их несколько - "Ok", "Cansel" ("отме-
на"), "No" ("нет") и т. д. Наличие/отсутствие таких
кнопок определяется нуждами программиста.
Диалоговые окна снабжены различными значками: "воск-
лицательный знак" (очень важное сообщение), "вопрос-
ительный знак" (сообщение, которое "хочет" что-то
узнать от пользователя), "символ i" (информацион-
ное сообщение) и т.д.
Модальность окна - это качество окна, которое заклю-
чается в том, что система (Windows) не дает пользов-
ателю выполнять никаких действий до тех пор, пока он
(пользователь) не прореагирует на данное модальное
сообщение.
3. Title - необязательный строковый параметр, который зад-
ает строку в заголовке сообщения.
4. Helpfile - необязательный строковый параметр, отпредел-
яющий путь к справочному файлу, связанному с данным ди-
алоговым окном.
5. Context - необязательный числовой параметр, указывающий
на номер раздела, связанного со справочным файлом,связ-
анным с данным диалоговым окном.
Замечание.
~~~~~~~~~~
Когда пользователь видит перед собой диалоговое окно он
должен кликнуть на какой-нибудь кнопке. Это понятно... Си-
стема (да-да, все тот же Windows) возвращает в программу
уникальное число, которое связано с каждой кнопкой из диа-
логового окна. Ради этого числа диалоговое окно и было вы-
звано. Перечитайте абзац еще раз...
Так вот, программист должен обработать это число и в зави-
симости от него продолжить работу. Именно поэтому функ-
ция MsgBox () всегда присваивается какому-то числу -
чтобы потом его можно было анализировать.
Константа
Значение
Нажатая кнопка
vbOk
1
Ok
vbCancel
2
Отмена
vbAbort
3
Прервать
vbRetry
4
Повторить
vbIgnore
5
Пропустить
vbYes
6
Да
vbNo
7
Нет
InputBox() - окно ввода.
~~~~~~~~~~~~~~~~~~~~~~~~
Поговорим о функциях, которые помогают программисту. На
лекциях не было сказано про функцию InputBox(), которая
позволяет выводить на экран диалоговое окно, содержащее
поле ввода. Формат функции:
InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])
1. Prompt - текст.
2. Title - необязательный строковый параметр, отображаемый
в заголовке.
3. Default - необязательный строковый параметр, отображае-
мый в поле ввода по умолчанию.
4. Xpos - число, равное расстоянию между левой частью экр-
ана и левым краем окна.
5. Ypos - число, равное расстоянию между верхней частью
экрана и верхним краем окна.
6. Helpfile, Context - необязательные параметры, аналогич-
ные свои друзьям из функции MsgBox().
Пример.
~~~~~~~
Рассмотрим программу, которая занимается регистрацией пол-
ьзователя: он вводит данные о себе, а программа проверя-
ет их корректность. Допустим, что нам надо ввести такие
данные.
На форме присутствуют: шесть меток и шесть текстовых окон.
Нам вполне подойдут стандартные "имена", которые Visual
Basic даст им - Text1, Label1,..., Text6, Label6. Двум ко-
мандным кнопкам можно дать значащие имена: cmdReg ("Регис-
трация") и cmdExit ("Выход").
Итак, в идеале дело происходит так: пользователь запускает
приложение, вводит данные, нажимает кнопку "Регистрация" и
получает надпись "Регистрация прошла успешно". Однако, по-
льзователи (как малые дети) могут ошибиться и ввести неве-
рные данные. Наша задача, - как программистов, - отследить
эту ситуацию и помочь пользователю. Как можно ввести данн-
ые неправильно?
Пользователь может:
1) не ввести имя, фамилию и отчество в соответствующие по-
ля;
2) указать неверный год своего рождения (меньше 1900-го);
3) указать неправильный электронный адрес (строку, в кото-
рой нет символа "@").
Начинаем думать. Как решить проблему 1? Чтобы отследить
ввод ФИО надо проверить строки Text1, Text2, Text3 на ра-
венство "" (пустой строке). Если хоть одна из них равна
"", то можно воспользоватся функцией MsgBox(), чтобы мяг-
ко укорить пользователя.
Проблема 2. Во-первых, можно ограничить число символов,
вводимых в Text4, до 4, т.к. нашу программу вряд ли запу-
стит человек, рожденный в 10000 году от РХ. (Хотя, если
она будет хороша, то почему бы и нет?) Во-вторых, неплохо
бы выяснить текущий год. В-третьих, необходимо выясни-
ть, находится ли введенное число между 1900 и текущим го-
дом.
Для выяснения текущего года у Visual Basic есть встроенн-
ые функции Date() - текущая дата, и Year() - текущий год.
Так как функция Date() возвращает дату в формате
день-месяц-год, то мы будем использовать такую конструкц-
ию:
intTG=Year(Date)
Проблема 3. Для выяснения корректности введенного электр-
онного адреса надо просмотреть строку в текстовом окне
Text5. Если в этой строке есть символ "@", и он не первый
и не последний (а где-то там, в серединке), то электронн-
ый адрес считается верным.
Rem Описание переменных и директив проекта
Option Explicit
Dim intTG As Integer
Rem Кнопка "Выход"
Private Sub cmdExit_Click()
End
End Sub
Rem Кнопка "Регистрация"
Private Sub cmdReg_Click()
Dim i As Integer
Dim n As Integer
Dim flag As Boolean
Dim dog As Boolean
flag = True
dog = False
Rem Проверка фамилии, имени, отчества
If Text1 <> "" Then
If Text2 <> "" Then
If Text3 = "" Then
i = MsgBox("Необходимо ввести отчество", , "ОШИБКА")
flag = False
Text3.SetFocus
End If
Else
i = MsgBox("Необходимо ввести имя", , "ОШИБКА")
flag = False
Text2.SetFocus
End If
Else
i = MsgBox("Необходимо ввести фамилию", , "ОШИБКА")
flag = False
Text1.SetFocus
End If
Rem Проверка года рождения
i = Val(Text4)
While i < 1900 Or i > Year(Date)
i = Val(InputBox("Введите год вашего рождения", "ОШИБКА", i))
Text4 = i
Wend
Rem Проверка электронного адреса
n = Len(Text5)
For i = 1 To n
If Mid(Text5, i, 1) = "@" Then
dog = True
i = n
End If
Next i
If dog <> True Then
i=MsgBox("В электронном адресе должен присутствовать символ @",, "ОШИБКА")
flag = False
Text5.SetFocus
End If
If flag Then i=MsgBox("РЕГИСТРАЦИЯ ПРОШЛА УСПЕШНО",vbOKOnly,"Поздравляем")
End Sub
Rem Процедура активации формы (загрузка)
Private Sub Form_Activate()
intTG = Year(Date)
End Sub
Замечание.
~~~~~~~~~~
Нет!!! У вас не получится скопировать текст кода, вставить
его в программу и понять то, что он будет делать. Нет!!!
Вам необходимо внимательно прочитать его, понять, перепис-
ать в тетрадь, а потом набирать код процедура за процедур-
ой, строка за строкой... Только так...
Думайте и консультируйтесь...
Задания к лабораторной работе №4
1. Прочитать, законспектировать работу.
2. Проверить пример.
3. Получить и выполнить индивидуальное задание.