Пример 2 (психологический тест)
Пусть имеется заданный набор из n, заранее фиксированного числа вопросов. На каждый из вопросов может быть выбран один из трех ответов: «да», «нет», «не знаю». После ответов на все вопросы должен выдаваться результат. Предположим, что необходимо выдавать только количество первых, вторых и третьих ответов, хотя в реальных тестах, как правило, происходит подсчет баллов, на основании некоторого принципа. Для решения данной задачи поместим на форму компонент Edit, в котором будет выдаваться очередной вопрос, а следовательно, свойству ReadOnly придадим значение True. Компонент RadioGroup служит для задания вариантов ответов, которые в данном случае будут «да», «нет», «не знаю», при этом начальное значение свойства ItemIndex должно быть равно единицы. Компонент Label 1 будет необходим для выдачи результатов тестирования. В модуле опишем константу n для задания количества вопросов и целочисленные переменные i, i 1, i 2, i 3, в первой из которых будет содержаться номер вопроса, а в остальных — количество ответов каждого В данной задаче нельзя воспользоваться событием OnClick для самого компонента RadioGroup, поскольку не всегда на следующий вопрос будет выбираться другой ответ. Следовательно, на форму необходимо поместить два компонента Button. При нажатии на первую кнопку происходит начало тестирования, т. е. обнуляются соответствующие переменные, Рисунок 18
В модуле опишем дополнительную функцию, которая на основании целочисленного значения формировала соответствующий вопрос. Для создания реального теста эту функцию необходимо доработать в соответствии со способом задания вопросов, например, вопросы можно читать из файла. Тогда программа может иметь вид: Const n=5; Var i,i1,i2,i3:Integer;
function Query(i:integer):String ; begin Query:='Вопрос'+IntToStr(i);{Функция формирования очередного вопроса} end; procedure TForm1.FormCreate(Sender: TObject); begin i:=1; Edit1.Text:=Query(1) end; procedure TForm1.Button1Click(Sender: TObject); begin i:=1; i1:=0; i2:=0; i3:=0; Edit1.Text:=Query(1); Label1.Caption:=''; end; procedure TForm1.Button2Click(Sender: TObject); begin i:=i+1; Case RadioGroup1.ItemIndex of 0:i1:=i1+1; 1:i2:=i2+1; 2:i3:=i3+1; end; if i<=n then Edit1.Text:=Query(i) else begin Label1.Caption:=' " Да" '+IntToStr(i1)+ ' "Нет" '+IntToStr(i2)+ ' "Не знаю" '+IntToStr(i3); Label1.Visible:=True; end; end; Переключатель с независимой фиксацией (выключатель) предназначен для задания одного из двух (трех) состояний. Во включенном состоянии К ним можно отнести компоненты CheckBox со страницы Standat, CheckListBox со страницы Additional и компонент ListBox, который может выполнять функции переключателя. Основное свойство AllowGrayed определяет, может ли опция находиться в двух или трех состояниях (включена, выключена и включена частично). В случае, если опция может находиться в двух различных состояниях, логическое свойство Checked определяет, выбрана или нет данная опция. Если имеются три различных варианта, необходимо применять свойство State, значение которого может быть cbUnChecked — опция выключена, cbChecked — опция включена, cbGrayed — опция включена, однако изображается серым цветом. Пример 3 Необходимо на основании курса подсчитать, сколько лет еще необходимо учиться. Для решения данной задачи поместим на экран компонент CheckBox, свойству AllowGrayed придадим значение True. В этом случае данный компонент может имееть три состояния, что соответствует трем возможным вариантам ответа: включена — имеется высшее образование, выключена — нет высшего образования, частично включена — неполное высшее. Поместим на форме компонент RadioGroup, в котором посредством свойства Item зададим возможные варианты курсов: первый, второй Проанализируем два различных события: нажатие на компоненты CheckBox 1 и RadioGroup 1. При первом событии происходит анализ его состояния, если он включен частично, то на экран выводится группа переключателей, во всех других случаях данную группу убираем с экрана, Вся программа может иметь следующий вид: procedure TForm1.CheckBox1Click(Sender: TObject); begin If CheckBox1.State=cbGrayed Then begin RadioGroup1.Visible:=True; RadioGroup1.ItemIndex:=-1; Label1.Caption:=’’ end Else begin RadioGroup1.Visible:=False; If CheckBox1.State=cbChecked Then Label1.Caption:=’Есть высшее образование’ Else Label1.Caption:=’Нет высшего образования’ end; end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin Label1.Caption:=’Еще учиться’+IntToStr(5-RadioGroup1.ItemIndex) end; Рассмотрим компоненты, которые могут задавать несколько опций, Пример 4 Выбрать все отмеченные опции из компонента CheckListBox в Memo. Данную задачу можно интерпретировать как составление счета, при условии, что список опций — это меню. Поместим на экран компонент CheckListBox, в нем с помощью пункта Item зададим начальные опции (пункты, которые могут быть выбраны). procedure TForm1.Button1Click(Sender: TObject); Var i:Integer; begin Memo1.Lines.Clear; for i:=0 to CheckListBox1.Items.Count-1 do begin If CheckListBox1.Checked[i] then Memo1.Lines.Add(CheckListBox1.Items.Strings[i]); end; end; Компонент ListBox предназначен для отображения на экране списка строк и в отличие от компонента CheckListBox, позволяющего включать или выключать опции, помогает выбирать некоторые строки из списка. На этапе проектирования, кроме свойства Item, рассмотрим два логических свойства MultiSelect и EnternetSelect. Если первое свойство имеет значение True, то можно выделять несколько строк, в противном случае выделяется только одна строка. Второе свойство определяет способ выделения строк. Если оно имеет значение True, то выбор нескольких рядом стоящих строк осуществляется с помощью клавиши Shift, а не рядом стоящих строк посредством клавиши Ctrl. Для проверки выбранных строк на этапе выполнения может использоваться целочисленное свойство ItemIndex, задающий номер единственной выбранной строки и логическое свойство Selected[Index], принимающее значение True, если соответствующая строка выбрана. Задания: 1. Проверьте все примеры из лабораторной работы. 2. Доработайте пример 3 таким образом, чтобы имелась возможность вернуться на один вопрос назад. 3. Задана компонента ComboBox, в свойстве Items записаны различные цвета. Сделайте, чтобы при выборе определенного цвета, изменялся цвет формы. Данную задачу выполните и с RadioGroup.
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (250)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |