ЛАБОРАТОРНАЯ РАБОТА №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. Получить и выполнить индивидуальное задание.