- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
Глава 7
Использование компонентов TRadioGroup
и TRadioButton в интерфейсе приложений
7.1. Тест «Знаете ли вы загадки?»
Постановка задачи. Играющему предлагаются загадки и несколько отгадок к каждой загадке, среди которых одна правильная. Играющий выбирает отгадку, а программа выдает результат: верно или неверно.
Реализация. Напишите несколько загадок в текстовом файле, например, как было показано на рис. 42. Напишите соответствующие отгадки (файл ‘Отгадки. txt’ на рис. 43). В этом проекте на каждую загадку приведено три отгадки, из которых одна верная.
Рис. 43. Файл с отгадками
Положите на форму два компонента TListBox, надписи TLabel для подсказок, TEdit для вывода отгадок к выбранной загадке и три компонента TRadioButton. При создании формы загрузите файлы с загадками в ListBox1, это видимый список, а файл с отгадками загрузите в невидимый список ListBox2.
Опишите глобальные переменные:
const n=10;
type mas=array[0..n-1]of integer;
var itog : integer; // Число правильных угадываний
nomer : integer; // Номер выбранной загадки
otvet : mas; // Массив для хранения правильных отгадок
Обработчик события OnCreate формы имеет следующий код:
procedure TForm2.FormCreate(Sender: TObject);
var f:textfile;
k:integer;
begin
ListBox1.Items.LoadFromFile('Загадки.txt');
ListBox2.Items.LoadFromFile('Отгадки.txt');
Listbox2.Visible:=false;
nomer:=0;
itog:=0;
assignfile(f,'Прав_отгадки.txt');
reset(f);
k:=0;
while (not eof(f)) and (k<n) do
begin
readln(f,otvet[k]);
k:=k+1;
end;
closefile(f);
end;
Чтобы выбрать загадку, кликнете мышью на ней. Событие OnMouseDown на списке ListBox1 имеет такой код:
procedure TForm2.ListBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var i:integer;
begin
for i:=0 to ListBox1.Items.Count-1 do
begin // Ищем выделенную строку
if Listbox1.Selected[i] then
begin
Label3.Caption:='';
RadioButton1.Checked:=false;
RadioButton2.Checked:=false;
RadioButton3.Checked:=false;
nomer:=Listbox1.ItemIndex;
// Соответствующая строка с отгадками копируется в окно редактора
Edit1.Text:=Listbox2.Items[nomer];
end;
end;
end;
Осталось выбрать отгадку и сравнить с правильным ответом. Откройте события компонента RadioButton1 и найдите событие OnClick. Справа кликните на стрелочку и в выпадающем списке выберите RadioButtonClick, а затем сделайте двойной клик. Delphi автоматически создаст в тексте модуля процедуру TForm2.RadioButtonClick(Sender: TObject) – обработчик данного события. Аналогичные действия надо проделать с каждым компонентом RadioButton2 и RadioButton3. Обработчик будем одним и тем же для всех трех переключателей. Параметр Sender – один из компонентов RadioButton.
procedure TForm2.RadioButtonClick(Sender: TObject);
var k:integer;
begin // Определим, какой переключатель выбран
if Sender=RadioButton1 then
k:=1
else
if Sender=RadioButton2 then
k:=2
else
k:=3;
if otvet[nomer]=k then
begin
label3.Caption:='Правильно';
itog:=itog+1; // Число правильных ответов
end
else
label3.Caption:='Неправильно';
end;
Результат работы с тестом приведен на рис. 44.
Рис. 44. Тест «Знаете ли вы загадки»
Задание 1. Сделайте так, чтобы нельзя было исправлять свой выбор, т. е. на каждый вопрос можно кликать только один раз.
Задание 2. Дополните проект итогами, где отразите, сколько правильных ответов было из общего числа вопросов.