Когда мне понадобилось написать программу для тестирования по одному из предметов, оказалось, что в интернете мало материала на эту тему. К тому же главным недостатком найденных исходников было то, что они брали вопросы и ответы из текстового файла, что не делает надежным процесс тестирования. Поэтому я разработал свою программу. Она состоит и четырех форм. Первая-для приветствия, вторая-сам процесс тестирования, третья-вывод результатов, четвертая-справка по особенностям работы(в моем случае это было пояснение некорректно отображаемых символов).
Тест состоит из 10 вопросов(их число может быть любым). Вот заготовки форм:
Form1:
Form2:
Form3:
Form4:
Дизайн
Кнопки BitBtn
За рисунок на кнопке отвечает свойство Kind. Сперва изменяете это свойство на нужное, а затем в Caption прописываете то, что будет написано на кнопке. Формы
Размер формы выберите свой, в зависимости от длин вопросов и ответов.В BorderStyle выберите BsSingle. Так же рекомендую установить в false все свойства BorderIcons, чтобы закрытие приложения мы контролировали сами. На первой форме можно оставить в true подсвойство biMinimize. В свойстве Position выберите poDesktopCenter, чтобы форма появлялась на середине экрана.
Лейблы
Свойство AutoSize в false, чтобы кусок последней буквы не отсекался(актуально для формы с приветствием,справкой и результатами, для формы с тестированием лучше это свойство оставить в true). На форме с результатами слова "Вы набрали" и "баллов" пишутся в отдельных лейблах. За цвет, размер и тип текста отвечает свойство Font(color, size, name). Для тестирования я использовал шрифт Verdana. Для отображения надписей на других формах-Monotype Corsiva.
MainMenu
Щелкаем по нему дважды и в Caption прописываем "Справка". Для вызова обработчика события нужно щелкнуть по слову "Справка" в окне с заголовком Form2->MainMenu1 . Вот код для каждой из форм:
Важно! Текст модуля нельзя копировать напрямую, т.к. это вызовет ошибки при компиляции(относится к обработчикам событий). Следует сперва щелкнуть, например, по кнопке, а затем вставить код:
void __fastcall TForm2::N1Click(TObject *Sender) { Form4->Visible=true; } //--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn2Click(TObject *Sender) { Form2->Visible=false; Form3->Visible=true; Form3->Label2->Caption=s; } //--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn1Click(TObject *Sender) { if(RadioButton1->Checked==true)i=1;//проверяем, какой ответ был выбран if(RadioButton2->Checked==true)i=2; if(RadioButton3->Checked==true)i=3; if(RadioButton4->Checked==true)i=4; if(i==pravil_otvet)s++;//если выбранный и правильный совпадают, то увеличиваем сумму на единичку i=0;//обнуление требуется для корректного подсчета суммы
nomer++;//номер вопроса изменяется с каждым нажатием кнопки
switch(nomer) { case 1: Form2->Label5->Caption="Кто вырос в джунглях среди диких зверей?"; Form2->Label1->Caption="Колобок"; Form2->Label2->Caption="Маугли"; Form2->Label3->Caption="Бэтмен"; Form2->Label4->Caption="Чарльз Дарвин"; pravil_otvet=2; break;
case 2: Form2->Label5->Caption="Как называлась детская развлекательная программа, популярная в прошлые годы?"; Form2->Label1->Caption="АБВГДейка"; Form2->Label2->Caption="ЁКЛМНейка"; Form2->Label3->Caption="ЁПРСТейка"; Form2->Label4->Caption="ЕЖЗИКейка"; pravil_otvet=1; break;
case 3: Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? "; Form2->Label1->Caption="Мерседес"; Form2->Label2->Caption="Тойота"; Form2->Label3->Caption="Хонда"; Form2->Label4->Caption="Лада"; pravil_otvet=1; break;
case 4: Form2->Label5->Caption="Какой цвет получается при смешении синего и красного?"; Form2->Label1->Caption="Коричневый"; Form2->Label2->Caption="Фиолетовый"; Form2->Label3->Caption="Зелёный"; Form2->Label4->Caption="Голубой"; pravil_otvet=2; break;
case 5: Form2->Label5->Caption="Из какого мяса традиционно готовится начинка для чебуреков?"; Form2->Label1->Caption="Баранина"; Form2->Label2->Caption="Свинина"; Form2->Label3->Caption="Телятина"; Form2->Label4->Caption="Конина"; pravil_otvet=1; break;
case 6: Form2->Label5->Caption="Какой народ придумал танец чардаш?"; Form2->Label1->Caption="Венгры"; Form2->Label2->Caption="Румыны"; Form2->Label3->Caption="Чехи"; Form2->Label4->Caption="Молдаване"; pravil_otvet=1; break;
case 7: Form2->Label5->Caption="Изучение соединений какого элемента является основой органической химии?"; Form2->Label1->Caption="Кислород"; Form2->Label2->Caption="Углерод"; Form2->Label3->Caption="Азот"; Form2->Label4->Caption="Кремний"; pravil_otvet=2; break;
case 8: Form2->Label5->Caption="Кто открыл тайну трёх карт графине из «Пиковой дамы» А. С. Пушкина?"; Form2->Label1->Caption="Казанова"; Form2->Label2->Caption="Калиостро"; Form2->Label3->Caption="Сен-Жермен"; Form2->Label4->Caption="Томас Воган"; pravil_otvet=3; break;
case 9: Form2->Label5->Caption="В какой стране была пробурена первая промышленная нефтяная скважина?"; Form2->Label1->Caption="Кувейт"; Form2->Label2->Caption="Иран"; Form2->Label3->Caption="Ирак"; Form2->Label4->Caption="Азербайджан"; pravil_otvet=4; break;
case 10: BitBtn1->Enabled=false; RadioButton1->Enabled=false;//делаем кнопки "не нажимаемыми", чтобы пользователь нажал на "закончить тест" RadioButton2->Enabled=false; RadioButton3->Enabled=false; RadioButton4->Enabled=false; } } //---------------------------------------------------------------------------
void __fastcall TForm4::BitBtn1Click(TObject *Sender) { Form4->Visible=false;//скрываем форму справки после просмотра } //--------------------------------------------------------------------------- Программа в процессе работе:
Если вам требуется вместе с вопросом показать изображение, то используйте компонент Image и его свойство Picture. Разместите на форме нужно количество этих компонентов и в каждый подгрузите нужную картинку. Для всех свойство Visible установите в false. Затем в нужном вопросе допишите код, например:
Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? "; Form2->Label1->Caption="Мерседес"; Form2->Label2->Caption="Тойота"; Form2->Label3->Caption="Хонда"; Form2->Label4->Caption="Лада"; Form2->Image1->Visible=true; pravil_otvet=1; break;
Т.е. вы покажете изображение подгруженное в Image1. Но чтобы при переходе к следующему вопросу изображение убралось или заменилось новым, перед switch нужно дописать:
В зависимости от количества ваших изображений. Это простой способ и поможет избежать отображения сразу двух изображений. Как вариант-дописать в следующем вопросе: case 3: Form2->Label5->Caption="Как звали невесту Эдмона Дантеса, будущего графа Монте-Кристо? "; Form2->Label1->Caption="Мерседес"; Form2->Label2->Caption="Тойота"; Form2->Label3->Caption="Хонда"; Form2->Label4->Caption="Лада"; Form2->Image1->Visible=true; pravil_otvet=1; break;
case 4: Form2->Image1->Visible=false; //скрываем Form2->Label5->Caption="Какой цвет получается при смешении синего и красного?"; Form2->Label1->Caption="Коричневый"; Form2->Label2->Caption="Фиолетовый"; Form2->Label3->Caption="Зелёный"; Form2->Label4->Caption="Голубой"; Form2->Image2->Visible=true; //успешно скрыв старое изображение, показываем новое pravil_otvet=2; break;
Привет Автор! =) Помоги пожалуйста. Я собрал твой код всё работает! только вот пытаюсь сделать чтобы прога выбрала 20 case из 50 random, а после 20 вопросов вывело на следующую форму где показано сколько правильных ответов в %.