Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо