ну на тебе набросок кода.
1. Сами вопросы. Я сделал запись для описания вопроса и пример для 2х вопросов. Имя картинки задается без пути, только имя файла, сами картинки должны "лежать" рядом с исполняемым модулем:
Код:
unit Unit2;
interface
type
TTest = record
Question : String;
Image : String;
Answers : Array [0..2] Of String;
CorrectAnswer : Integer;
end;
const
Tests : Array [1..2] Of TTest =
(
(Question : 'Вопрос 1';
Image : 'image1.jpg';
Answers : ('Ответ 1-1','Ответ 1-2','Ответ 1-3');
CorrectAnswer : 0),
(Question : 'Вопрос 2';
Image : 'image2.jpg';
Answers : ('Ответ 2-1','Ответ 2-2','Ответ 2-3');
CorrectAnswer : 2)
);
implementation
end.
Надеюсь, как добавить вопросы сообразишь сам.
2. Теперь собственно обработчик. На форме лежат: метка (для текста вопроса), картинка (для, соотв, картинки) и радиогруппа (для ответов). Весь код:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
Label1: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
n : Integer;
c : Integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
ImgName : String;
begin
// Сначала сбираем ответ
If n >= Low(Tests) Then
Begin
If RadioGroup1.ItemIndex < 0 Then
Begin
ShowMessage('Выберите правильный вариант.');
Exit;
End;
If RadioGroup1.ItemIndex = Tests[n].CorrectAnswer Then Inc(c);
End;
// Перехож к сл. вопросу
Inc(n);
Label1.Caption := '';
Image1.Picture.Graphic := Nil;
RadioGroup1.Items.Clear;
If n > High(Tests)
Then
Begin
// Текущий вопрос больше чем всего вопросов
ShowMessage(Format('Тест окончен. Кол-во правильных ответов: %d из %d',[c,Length(Tests)]));
c := 0;
n := Low(Tests)-1;
End
Else
Begin
// Новый аопрос
Label1.Caption := Tests[n].Question;
ImgName := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + Tests[n].Image;
If FileExists(ImgName) Then Image1.Picture.LoadFromFile(ImgName);
For I := Low(Tests[n].Answers) To High(Tests[n].Answers) Do
RadioGroup1.Items.Add(Tests[n].Answers[i]);
End;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
c := 0;
n := Low(Tests)-1;
Button1Click(Sender); // Show 1st question
end;
end.
Всего 2 обработчика - при создании формы первичная инициализация переменных и показ первого вопроса. Если картинки к вопросу нет, то просто укажи любой текст для ее имени, только что бы такого файла небыло.
При добавлении вопросов КОД МЕНЯТЬ НЕ НАДО, он корректно обработает любое кол-во вопросов.
ЗЫ. Загрузку картинок не проверял, но должно все работать.