- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Delphi. Учимся на примерах - Сергей Парижский
Шрифт:
Интервал:
Закладка:
Win.Free; //освобождаем ini-файл
//помечаем первый вариант как правильный
yes:= an1.Caption;
end;
2:
begin
Win:= TIniFile.Create(dir2);
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
an2.Caption:= Win.Readstring('A', IntToStr(a), an2.Caption);
an1.Caption:= Win.Readstring('W1', IntToStr(a), an1.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Win.Free;
yes: = an2.Caption;
end;
3:
begin
Win:= TIniFile.Create(dir2);
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
an3.Caption:= Win.ReadString('A', IntToStr(a), an3.Caption);
an2.Caption:= Win.ReadString('W1', IntToStr(a), an2.Caption);
an1.Caption:= Win.ReadString('W2', IntToStr(a), an1.Caption);
an4.Caption:= Win.ReadString('W3', IntToStr(a), an4.Caption);
Win.Free;
yes:= an3.Caption;
end;
4:
begin
Win:= TIniFile.Create(dir2);
Memo1.Text:= Win.ReadString('Q', IntToStr(a), Memo1.Text);
an4.Caption:= Win.ReadString('A', IntToStr(a), an4.Caption);
an2.Caption:= Win.ReadString('Wl', IntToStr(a), an2.Caption);
an3.Caption:= Win.ReadString('W2', IntToStr(a), an3.Caption);
an1.Caption:= Win.ReadString('W3', IntToStr(a), an1.Caption);
Win.Free;
yes:= an4.Caption;
end;
end;
end;
Здесь мы вначале запускаем процедуру выбора вопроса. Потом проверяем: какой вариант ответа является правильным. Затем считываем вопрос и варианты ответов к нему. Сортируем и отображаем все это на форме.
Обработчик события создания главной формы будет выглядеть следующим образом:
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
//получаем каталог, в котором находится наша программа
dir:= GetCurrentDir;
ss:= dir + 'comp.ini'; //путь к базе вопросов
zz:= ss;
start(); //начинаем тест
end;
Теперь создадим обработчик события главной формы OnDestroy (возникает при выходе из программы):
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteFile('c:base.bsd'); //удаляем расшифрованную базу
end;
Теперь обрабатываем команды меню. Обработчик события OnClick для пункта Игра→Заново:
procedure TForm1.N1Click(Sender: TObject);
begin
Randomize;
ss:= zz;
start(); //начало теста
end;
Поскольку у нас весь основной код вынесен в процедуры, теперь достаточно только вызвать процедуру начала игры.
Обработчик события OnClick для пункта меню Игра→Загрузить базу:
procedure TForm1.N2Click(Sender: TObject);
begin
Randomize;
//начинаем обзор с текущего каталога
Open1.InitialDir:= GetCurrentDir;
if not Open1.Execute then ShowMessage('Вы не выбрали файл!')
else begin
ss:= Open1.FileName; //открываем выбранный файл
zz:= ss; //запоминаем путь к базе
start(); //начинаем тест
end;
end;
Здесь мы предлагаем пользователю выбрать через диалоговое окно обзора ini– или любой другой файл, в котором содержатся зашифрованные вопросы и варианты ответов. Когда пользователь выбрал файл, мы запускаем процедуру start и, тем самым, начинаем тест.
Обработчик события OnClick для пункта меню Игра→Выход:
procedure TForm1.N4Click(Sender: TObject);
begin
Halt; //выход из программы
end;
Теперь обработаем щелчок мышью на панели p1:
procedure TForm1.p1Click(Sender: TObject);
begin
Label1.Caption:= 'Второй вопрос:';
verno(); //принимаем вариант ответа
p1.Visible:= False; //убираем первую панель
р2.Visible:=True; //активизируем вторую панель
vopr:= Random(4) +1; //выбираем случайный вариант ответа
vars(vopr); //задаем вопрос
end;
Здесь мы вначале изменяем заголовок на "Второй вопрос:", после чего принимаем вариант ответа, выбранный пользователем, вызывая процедуру verno.
Затем готовим форму ко второму вопросу: прячем первую панель и выводим вторую. Вызываем процедуру vars, которая выбирает вопрос и отображает его вместе с вариантами ответа.
Обработаем щелчок мышью на второй панели:
procedure TForm1.p2Click(Sender: TObject);
begin
Label1.Caption:= 'Третий вопрос:';
verno();
p2.Visible:= False;
p3.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
Здесь происходит то же самое, что и для панели p1, только надпись метки принимает значение "Третий вопрос", мы прячем вторую "кнопку" и активизируем третью для следующего вопроса.
Аналогичные обработчики события OnClick создаем для третьей и четвертой панелей:
procedure TForm1.p3Click(Sender: TObject);
begin
Label1.Caption:= 'Четвертый вопрос:';
verno();
р3.Visible:= False;
p4.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
procedure TForm1.p4Click(Sender: TObject);
begin
Label1.Caption:= 'Пятый вопрос:';
verno();
p4.Visible:= False;
p5.Visible:= True;
vopr:= Random(4) + 1;
vars(vopr);
end;
Для пятой (последней) панели обработчик события OnClick будет выглядеть несколько иначе:
procedure TForm1.p5Click(Sender: TObject);
begin
//проверяем правильность ответа на последний вопрос
verno() ;
//узнаем, сколько баллов набрал пользователь
ss:= IntToStr(balls);
//делаем почти все компоненты невидимыми
Memo1.Visible:= False;
р5.Visible:= False;
RadioGroup1.Visible:= False;
Label1.Visible:= False;
an1.Visible:= False;
an2.Visible:= False;
an3.Visible:= False;
an4.Visible:= False;
Label2.Visible:=True;//показываем метку с результатом
Label2.Align:= alClient;//растягиваем ее на всю форму
//Отображаем процент правильных ответов
Label2.Caption:= 'Правильных ответов' + IntToStr(balls*(100 div 5))+'%';
end;
После проверки правильности ответа на последний вопрос, мы прячем почти все компоненты на форме, оставляя видимой только метку Label2 для вывода результата и меню, чтобы можно было продолжить работу с программой. С помощью метки мы отображаем процент правильных ответов пользователя по формуле: "количество правильных ответов * (100 / количество заданных вопросов)". Пример отображения результата теста представлен на рис. 13.3.
Рис. 13.3. Отображение результата теста
Единственное, что осталось сделать, — реализовать имитацию нажатия кнопки при щелчке на панели мышью. Для того чтобы "оживить" панель, для нее следует создать обработчики двух событий: OnMouseDown и OnMouseUp. Первое событие возникает при щелчке мышью, а второе — при отпускании кнопки мыши. Для панели pi эти обработчики будут выглядеть следующим образом:
procedure TForm1.p1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
p1.BevelInner:= bvLowered;
p1.BevelOuter:= bvRaised;
end;
procedure TForm1.p1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
p1.BevelInner:=bvRaised;
p1.BevelOuter:=bvLowered;
end;
Для всех остальных панелей обработчики этих событий будут выглядеть аналогичным образом за исключением того, что имя p1 потребуется изменить на имя р2, p3, р4 или р5.
Программа тестирования в действии показана на рис. 13.4.
Рис. 13.4. Программа тестирования в действии
Полный исходный код модуля
Полный код модуля программы-теста представлен в листинге 13.1.
Листинг 13.1. Модуль программы-тестаunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, IniFiles, jpeg, Menus;