- •Оглавление
- •Введение
- •Глава 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.2. Проект «Исторические даты»
Постановка задачи. Создайте тест для проверки задания исторических дат. Проект является примером использования компонента TRadioGroup.
Реализация. Положите на форму один компонент TRadioGroup, две надписи, один компонент TListBox для хранения вопросов (сделайте его невидимым) и одну кнопку. Результат работы приведен на рис. 45.
Рис. 45. Проект «Исторические даты»
Так как вариантов ответа по три на каждый вопрос, то для простоты скопируем их из файла в массив строк otv. А в массив чисел prav_otv перепишем из файла номера правильных ответов. Код всех обработчиков приведен полностью.
Глобальные данные:
const n = 10; // Общее число вопросов в файле
type mas = array[0..3*n-1] of string;
mas1 = array[0..n-1] of integer;
var otv : mas; // На каждый вопрос три ответа
prav_otv : mas1;
nomer, k : integer;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; f:textfile;
begin
ListBox1.Items.LoadFromFile('Вопрос.txt');
ListBox1.Visible:=false;
i:=0;
nomer:=0; // Номер вопроса
Label1.Caption:=ListBox1.Items[nomer];
AssignFile(f,'Ответ.txt');
Reset(f);
while not eof(f) and (i<=3*n-1) do
begin
readln(f,otv[i]);
i:=i+1;
end;
CloseFile(f);
i:=0;
AssignFile(f,'Прав_ответы.txt');
Reset(f);
while not eof(f) and (i<=n-1) do
begin
readln(f,prav_otv[i]);
i:=i+1;
end;
CloseFile(f);
// Заполним поля у кнопок для вопроса с номером 0
for i:=0 to 2 do
RadioGroup1.Items[i]:=otv[i];
k:=3;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
var i:integer;
begin
case RadioGroup1.ItemIndex of
0: i:=1;
1: i:=2;
2: i:=3;
end;
if i= prav_otv[nomer] then
Label2.Caption:= 'Правильно'
else
Label2.Caption:= 'Неправильно'
end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Label2.Caption:='';
RadioGroup1.ItemIndex:=-1; // Воостанавливаем кнопки
nomer:=nomer+1; // Следующий вопрос
if nomer=n then
begin
ShowMessage('Вопросы закончились');
Form1.Close;
End
else
begin
for i:=0 to 2 do
begin
RadioGroup1.Items[i]:=otv[k];
k:=k+1;
end;
// Копируем следующий вопрос в надпись Label1
Label1.Caption:=ListBox1.Items[nomer];
end;
end;
Задание 1. Усовершенствуйте проект так, чтобы нельзя было исправлять свой выбор, т. е. на каждый вопрос можно отвечать только один раз.
Задание 2. Дополните проект картинками, иллюстрирующими вопрос.
Глава 8
Работа с файлами
8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
открытия и сохранения файлов
Несколько слов о компонентах TOpenDialog и TSaveDialog. Компоненты помещаются на форму в любое место, они не видны в момент работы программы. Стандартный для диалогов метод – метод Execute, он создает и показывает на экране диалоговое окно. Вызов этого метода обычно располагается внутри обработчика какого-либо события. Например, обработчик выбора опции меню «Открыть файл» может вызвать метод Execute диалога TOpenDialog, обработчик нажатия кнопки «Сохранить» может вызвать такой же метод у компонента TSaveDialog. Окно диалога, открываемое мотодом Execute, является модальным окном, поэтому дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не закроет окно. Поскольку Execute – логическая функция, она возвращает в программу True, если результат диалога с пользователем был успешным.
