![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RadioButton
Kirinka © (2007-04-16 06:04:00)Здравствуйте, я учусь в колледже на СПО, и мне дали задание сделать тестовую оболочку на 10 вопросов, для выбора вариантов ответа использую Radiobutton помогите как привязать кнопку к правильному или неправильному варианту ответа
{RASkov} (2007-04-16 22:29:00) [1]> ShowMessage(Format('Ваш результат: %d правильных ответов из %d', [QResult, Length(Faq) -1]));
ShowMessage(Format('Ваш результат: %d правильных ответов из %d', [QResult, Length(Faq)]));
{RASkov} (2007-04-16 22:17:00) [2]DFM:
object Form1: TForm1
Left = 192
Top = 114
Width = 381
Height = 384
Caption = 'Выберите вариант ответа'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 0
Top = 0
Width = 373
Height = 65
Align = alTop
Alignment = taCenter
AutoSize = False
Caption = 'Label1'
Layout = tlCenter
end
object RadioGroup1: TRadioGroup
Left = 0
Top = 65
Width = 373
Height = 233
Align = alTop
Caption = 'Вопрос № 0 '
TabOrder = 0
end
object Button1: TButton
Left = 292
Top = 312
Width = 75
Height = 25
Caption = 'Дальше'
TabOrder = 1
OnClick = Button1Click
end
end
PAS:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TFAQ = record
ArQwest: String;
ArAnswer: array of String;
ArTrueAnswer: Byte;
end;
TFAQs = array of TFAQ;
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
Faq: TFAQs;
NQwest, QResult: Integer;
procedure LoadQwest(const N: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.LoadQwest(const N: Integer);
var K: Byte;
begin
Label1.Caption:=Faq[N].ArQwest;
RadioGroup1.Items.Clear;
RadioGroup1.Caption:='Вопрос № '+IntToStr(N+1)+' ';
for K:=0 to Length(Faq[N].ArAnswer)-1 do RadioGroup1.Items.Add(Faq[N].ArAnswer[K]);
end;
function VerQwest(const NQ: Integer; const NA: Byte): Byte;
begin
Result:=ORD(Form1.Faq[NQ].ArTrueAnswer=NA);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(Faq, 3);
Faq[0].ArQwest:='Сколько будет 2+2';
SetLength(Faq[0].ArAnswer, 4);
Faq[0].ArAnswer[0]:='3'; Faq[0].ArAnswer[1]:='4';
Faq[0].ArAnswer[2]:='5'; Faq[0].ArAnswer[3]:='Незнаю';
Faq[0].ArTrueAnswer:=1;
Faq[1].ArQwest:='Почему ежик колючий';
SetLength(Faq[1].ArAnswer, 3);
Faq[1].ArAnswer[0]:='Бла-бла'; Faq[1].ArAnswer[1]:='Фик его знает';
Faq[1].ArAnswer[2]:='Я это не курю';
Faq[1].ArTrueAnswer:=0;
Faq[2].ArQwest:='Вам понравился тест';
SetLength(Faq[2].ArAnswer, 3);
Faq[2].ArAnswer[0]:='Да'; Faq[2].ArAnswer[1]:='Очень';
Faq[2].ArAnswer[2]:='А куда деваться';
Faq[2].ArTrueAnswer:=2;
NQwest:=0; QResult:=0;
LoadQwest(NQwest);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if NQwest=Length(Faq) then begin
ShowMessage('Вопросы кончились'); Exit;
end else begin
if RadioGroup1.ItemIndex<0 then begin
ShowMessage('Не выбран вариант ответа!'); Exit;
end;
QResult:=QResult+VerQwest(NQwest, RadioGroup1.ItemIndex);
Caption:=Format('Правильных ответов: %d', [QResult]);
INC(NQwest);
if NQwest<Length(Faq) then LoadQwest(NQwest) else begin
ShowMessage(Format('Ваш результат: %d правильных ответов из %d', [QResult, Length(Faq)-1]));
Button1.Caption:='Всё';
end;
end;
end;
end.
Только что придумал :) Надеюсь как заполнять массивы вопросов и ответов сообразишь сам(а).....
{RASkov} (2007-04-16 21:19:00) [3]Ай ступил :(
{RASkov} (2007-04-16 21:18:00) [4]А почему выбор варианта ответа считается ошибкой? :)
Kolan (2007-04-16 19:43:00) [5]> нет почему, это код только для первого вопроса, можно присвоить
> любой
Так вы для каждого вопроса дублируете
procedure TForm1.Button2Click(Sender: TObject);
begin
if (RadioButton1.Checked) or (RadioButton2.Checked) or (RadioButton3.Checked)
or (RadioButton4.Checked) then
begin
if (RadioButton1.Checked) then i:=i+1;
Panel2.Visible:=true;
Panel1.Visible:=false;
end
else
Application.MessageBox('Выберите вариант ответа','Error',0);
end;
только меняете выделную строку? Это неправильно. Не проще ли хранить верные ответы в отдельном файле? Ведь список вопросов может изменится и соотв порядок ответов тоже. Не говоря уж о количестве вопросов
Kirinka (2007-04-16 19:40:00) [6]
> Те всегда верный ответ — первый?
нет почему, это код только для первого вопроса, можно присвоить любой
if (RadioButton1.Checked) then i:=i+1;в данном тесте у меня от 1 до 4
Kolan (2007-04-16 19:30:00) [7]> if (RadioButton1.Checked) then i:=i+1;
Те всегда верный ответ первый?
Kirinka (2007-04-16 19:27:00) [8]Вот что я просила сделать!!! ВСЕМ СПАСИБО, ОФФТОП
var
Form1: TForm1;
i: integer;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
if (RadioButton1.Checked) or (RadioButton2.Checked) or (RadioButton3.Checked)
or (RadioButton4.Checked) then
begin
if (RadioButton1.Checked) then i:=i+1;
Panel2.Visible:=true;
Panel1.Visible:=false;
end
else
Application.MessageBox('Выберите вариант ответа','Error',0);
end;
Novice (2007-04-16 07:22:00) [9]Много вариантов... Если дали один конкретный тест, то можно запаять его прямо в программе. Если же планируется возможность добавления тестов (т.е. использование файлов для хранения тестов), то реализация будет уже другой.
Что именно Вам нужно?
Думкин (2007-04-16 06:44:00) [10]Используй RadioGroup