ЛАБОРАТОРНАЯ РАБОТА №6
	"Кнопки-переключатели и флажки"

	Цели: 1) Изучить элемент управления кнопка-переключатель;
	      2) Изучить элемент управления "флажок".

	Поговорим о кнопках-переключателях. Мы часто встречаемся с
	ними во время работы в windows и знаем, что в меню  всегда 
	можно выбрать только одну кнопку -  как  в  радиоприемнике 
	всегда можно выбрать только одну радиостанцию; выбор новой 
	автоматически выключает старую.

	Если мы хотим поместить на форме два (и более) набора кно-
	пок, то нам надо поместить каждый  набор  внутрь  элемента 
	Frame (рамка). Тогда каждый набор будет мыслится самостоя-
	тельным (свой приемник) и в нем все также можно будет выб-
	рать (отметить) только один элемент.

	
Cвойства OptionButton (кнопка-переключатель). ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Name - имя кнопки. 2. Alignment - расположение надписи около кнопки (слева или справа). 3. Appearance - стиль кнопки (цветная, объемная). 4. Value - выбор кнопки (лог. свойство). Интуитивно понятно, что самое главное свойство кнопок-пер- еключателей - Value (значение). Если оно равно True (исти- на), то кнопка выбрана, а если оно равно False (ложь), то нет. Возникает вопрос, а как программно отслеживать фа- кт выбора пользователем той или иной кнопки? Тут у нас два варианта: Вариант 1. ~~~~~~~~~~ "Прокликать" каждую кнопку и написать для каждой процедуру обработки события Click(). Да, придется писать много, но зато мы получим рабочий код такого типа: Private Sub Option1_Click() Option1.Value = True End Sub Private Sub Option2_Click() Option2.Value = True End Sub То есть, каждый раз, когда пользователь выбирает ту или иную радио-кнопку, мы присваиваем ее свойству Value значе- ние True (истина). Нам нет нужды снимать это свойство с более ранней кнопки, которая была выбрана - это сделает система... Этот способ надежен, но дебилен. Им будут пользоватся тол- ько те, кто не был на лекции, посвященной массивам. Вариант 2. ~~~~~~~~~~ Если мы поместим на форму одну кнопку-переключатель, сдел- аем ее массивом элементов, то мы сможем записать всего од- ну процудуру для обработки всех элементов массива. Процед- ура будет иметь вид: Private Sub Option1_Click(Index As Integer) Option1(Index).Value = True End Sub Видно, что в процедуру приходит параметр Index (целое чис- ло), который является индексом элемента в массиве. Вот этому-то элементу и устанавливается свойство Value=True. Запомните это... Поговорим о флажках. Как и в случае с радио-кнопками мы тоже довольно часто встречаемся с ними в различных прилож- ениях windows, однако они (флажки) имеют свои особенности. В частности, у них есть три различных состояния свойства Value: 1) 0 - элемент не отмечен; 2) 1 - элемент отмечен; 3) 2 - элемент недоступен.
Замечание. ~~~~~~~~~~ Посмотрите на рисунок выше. На нем видны 10 флажков, поме- щенных (на всякий случай) в рамку. Некоторый флажки отмеч- ены, а некоторые нет... На сегодняшний момент у вас должны быть отмечены пять из десяти флажков. А как на самом деле? Долгов нет? Успеваете? Ну-ну... Пример. ~~~~~~~ Организуем прием данных от пользователя, используя все из- ученные ранее элементы управления : текстовые поля, метки, командные кнопки, радио-кнопки, флажки, рамки. (Ничего не забыли?) Пусть мы собираем данные от пользователя с по- мощью трех форм.
Итак, давайте по порядку. На первой форме организован при- ем от пользователя имени и организации, которую он предст- авляет. Сразу говорим о проблемах, которые поджидают нас как программистов: пользователь может не ввести имя и наз- вание организации, а сразу потытается кликнуть на кнопке "Далее". Пока просто отметим этот факт... На второй форме мы спрашиваем пользователя о том, принима- ет ли он наши условия или нет. Чтобы он не ответил - это его святое право и мы должны запомнить его выбор. На третьей форме пользователь ставит "галочки" напротив тех программ, которые (как бы) установлены на его компьют- ере. Мы также должны каким-то образом отметить для себя этот факт. Все наши действия по направлены на то, чтобы собрать инфо- рмацию про пользователя и объявить его или зарегистрирова- нным или нет. Понятно, что в данном конкретном случае ему от этого ни тепло ни холодно, но мы поймем концепцию регистрации, а это очень важно.
В конце работы нашей программы (приложения) пользователь должен увидеть примерно такую форму, на которой расположе- на информация про него и выведена (заветная?) фраза о том, что он зарегистрирован. Замечание. ~~~~~~~~~~ Мир жесток и несправедлив - вам придется набирать огромный код, приведенный ниже. Я ничем не могу вам помочь и, пове- рьте мне господа студенты, не надо копировать его и встав- лять в вашу программу. Код надо переписать в тетрадь и на- бивать в окне кода вашей программы, приспосабливаясь к то- му, как вы назовете свои элементы управления. Мне придется комментировать код для каждой формы и одно- го модуля, который нам надо добавить в проект. В этом мод- уле мы опишем некоторые переменные, которые должны быть "видны" во всех формах. Чтобы добавить модуль в проект на- до выбрать пункт меню: Project | Add module... Rem Содержимое модуля Module1 Public username As String Public userorg As String Public flag As Boolean Public userprog As String Комментарии. ~~~~~~~~~~~~ В модуле определены переменные: username - имя пользовате- ля; userorg - название организации пользователя; flag - логическая переменная, которая будет отвечать за хране- ние значения Да/Нет (Истина/Ложь) при ответе пользовате- ля на вопрос о том, принимает ли он условия соглашения; userprog - список установленных программ. Rem Содержимое первой формы Form1 Dim i As Integer Private Sub Command1_Click() If Text1 <> "" And Text2 <> "" Then username = Text1 userorg = Text2 Form2.Show 'Форма 2 стала видна Unload Form1 'Форма 1 выгрузилась Else i = MsgBox("Необходимо вести имя и организацию", vbCritical, "Form1") End If End Sub Комментарии. ~~~~~~~~~~~~ Тут все просто. На первой форме у нас только одна кнопка - Command1 ("Далее >>"). Если пользователь кликнул на ней, то надо проверить текстовые поля Text1 (Имя) и Text2 (организ- ация), - не пустые ли они, - и, в случае удачи, присвоить переменным username и userorg значения из этих полей. Далее мы должны выгрузить первую форму и загрузить вторую. Если хотя бы одно текстовое поле пустое, то мы выдаем пользоват- елю сообщение "Необходимо вести имя и организацию". Rem Содержимое второй формы Form2 Rem Назад, с Формы 2 на Форму 1 Private Sub Command1_Click() Form1.Show 'Форма 1 стала видна Unload Form2 'форма 2 выгрузилась End Sub Rem Далее, с Формы 2 на Форму 3 Private Sub Command2_Click() Form3.Show 'Форма 3 стала видна Unload Form2 'Форма 2 выгрузилась End Sub Rem Условие принято Private Sub Option1_Click() flag = True End Sub Rem условие не принято Private Sub Option2_Click() flag = False End Sub Комменарии. ~~~~~~~~~~~ Тут все понятно. Если пользователь кликнул на кнопке Comm- and1 ("<< Назад"), то мы выгружаем вторую форму и загружа- ем первую. Если он кликнул на кнопке Command2 ("Вперед >>"), то мы выгружаем вторую форму и загружаем третью. Если пользователь отметил пункт "Принимаю", то пе- ременная flag стала равна True; а если он выбрал пункт "Не принимаю", то False. Rem Содержимое третьей формы Form3 Dim i As Integer Rem Назад, с Формы 3 на Форму 2 Private Sub Command1_Click() Form2.Show Unload Form2 End Sub Rem Далее, с Формы 3 на Форму 4 Private Sub Command2_Click() userprog = "На вашем компьютере установлены программы:" & Chr(10) & Chr(13) For i = 0 To 3 If Check1(i).Value = 1 Then userprog = userprog & "-" & Check1(i).Caption & Chr(10) & Chr(13) Next i Form4.Show Unload Form3 End Sub Комментарии. ~~~~~~~~~~~~ Вот тут сложно. Давайте, постараемся... Итак, на форме ес- ть две кнопки (Caommand1, Command2), но их назвачение так- ое же, как и на предыдущих формах. Интереснее другое: как мы будем отслеживать выбор программ (которые установл- ены на компьютере пользователя) и как нам накопить значен- ие переменной userprog? Слава богу, переменная userprog строковая. Способ накопле- ния таков: когда пользователь кликнул на кнопку "Далее >>" мы заносим в переменную userproc текст "На вашем компьюте- ре установлены программы:" + код 10 + код 13 (т.е. переход на новую строку - не создание новой переменной, а просто такое форматирование строки userprog). Далее мы начинаем небольшой цикл (4 шага) и просматриваем каждый флажок (Windows, Visual Basic, Macromedia Flash, Internet Explor- er) на предмет "отмеченности", т. е. равенства свойства Value единице. Таким образом, после того как пользователь кликнул на кно- пке "Дальше >>" переменная userprog станет равна сложной строке, состоящей из фраз "На вашем компьютере установлены программы:" + "программа" + код 10 + код 13 + "программа" + код 10 + код 13 +... Rem Содержимое четвертой формы form4 Rem Выход из программы Private Sub Command1_Click() End End Sub Rem При загрузке формы метка набивается данными Private Sub Form_Activate() If flag = True Then Label1 = Label1 & Chr(10) & Chr(13) & Chr(10) & Chr(13) Label1 = Label1&"Пользователь-"&username&Chr(10)&Chr(13)&Chr(10)&Chr(13) Label1 = Label1&"Организация-"&userorg&Chr(10)&Chr(13)&Chr(10)&Chr(13) Label1 = Label1 & "Вы приняли условие нашего лицензионного соглашения и поэтому вы являетесь зарегистрированным пользователем" & Chr(10) & Chr(13) Else Label1 = "К сожалению, наша компания не будет сотрудничать с вами, так как вы не приняли условия лицензионного соглашения" End If End Sub Комменатрии. ~~~~~~~~~~~~ Четвертая форма состоит из одной метки и командной кнопки, которая отвечает за выход из программы. При активации фор- мы начинает работать процедура Form_Activate(), в которой, собственно, и происходит набивка и вывод текста регистрац- ии пользователя. Кнопка "Ок" закрывает все приложение. Строка, которая набивается в метку на четвертой форме (Label1), состоит из данных о: пользователе, организации и о факте принятия им условий соглашения. Если пользова- тель не принимал условия, то выводится соответствующая на- дпись. Задания к лабораторной работе №6 1. Прочитать, законспектировать работу. 2. Проверить пример.