Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2009, 06:37   #1
SKS
Форумчанин
 
Аватар для SKS
 
Регистрация: 05.01.2009
Сообщений: 242
По умолчанию Счётчик в Делфи

Делаю тест на делфи. там дается вопрос и пять вариантов ответов. Radiobutton стоят, так вот подскажите как сделать счётчик в данном тесте. Например первый вопрос на 2 балла второй на 5 и т.д. чтобы при нажатии на Radiobutton счетчик писал кол-во баллов. Хотя бы код счётчика киньте а там попробую разобраться. Я не могу реализовать такой счетчик
Заранее благодарю!!!
SKS вне форума Ответить с цитированием
Старый 22.03.2009, 10:37   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Объявите глобальную переменную и при нажатии на кнопку проверяйте какой вариант был выбран. К примеру если выбрали RadioButton1, то при переходе на следующий вопрос присваивайте глобальной переменной 0.5 балла, а если выбрали RadioButton2, то 1 балл ну и т.д. Потом в конце теста можете вывести количество баллов или их подсчитать.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 22.03.2009, 16:42   #3
SKS
Форумчанин
 
Аватар для SKS
 
Регистрация: 05.01.2009
Сообщений: 242
По умолчанию

Можете кинуть код хотя бы какого-нибудь теста вашего, или программы со счетчиком. Не могу понять как толком сделать счетчик.
SKS вне форума Ответить с цитированием
Старый 22.03.2009, 18:20   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

К примеру:
Код первой формы.
Код:
Var
  Form1: TForm1;
  S: Real;
...
Procedure TForm1.Button1Click(Sender: TObject);
Begin
If RadioButton1.Checked Then
S:=0;
If RadioButton2.Checked Then
S:=1.5;
If RadioButton3.Checked Then
S:=3;
Form2.Show;
Form1.Hide;
End;
Код второй формы.
Код:
Procedure TForm2.Button1Click(Sender: TObject);
Begin
If RadioButton1.Checked Then
Unit1.S:=Unit1.S+1.5;
If RadioButton2.Checked Then
Unit1.S:=Unit1.S+1;
If RadioButton3.Checked Then
Unit1.S:=Unit1.S+5;
ShowMessage('Ваш балл: '+FloatToStr(Unit1.S));
End;
Ну и т.д.
Всегда рад помочь!

Последний раз редактировалось Terran; 22.03.2009 в 18:23.
Terran вне форума Ответить с цитированием
Старый 22.03.2009, 19:28   #5
sat123
 
Регистрация: 20.03.2009
Сообщений: 7
По умолчанию

terran, напишите пожалуйста свой номер ICQ: хочу зать вам несколько незначительных вопросов по Delphi
sat123 вне форума Ответить с цитированием
Старый 22.03.2009, 20:10   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

У меня нет ICQ. Пишите в личку и поставьте у себя настройки на личные сообщения.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 22.03.2009, 21:51   #7
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

Хотел пример написать, получился готовый тест
Код:
unit unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure RClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

TQes = class (TComponent)
 private
   GOtv:integer;
   Otvet:integer;
   TextQ:TStringList;
   otv:array[1..5] of TStringList;
   ScoreQ:integer;
  public
  constructor Create(AOwner: TComponent); override;
  function test:integer;
end;

Const
MaxQ=10;
var
  Form1: TForm1;
  RGroup:array[1..2] of TRadioGroup;
  lbl:array[1..2] of TLabel;
  Bt:TButton;
  AllS:integer;
  QNum:integer;
  Qess:array[1..MaxQ] of TQes;
  MaxQReal:integer;
  Stop:Boolean;
  RadBtn:array[1..5] of TRadioButton;
implementation

{$R *.dfm}

constructor TQes.Create(AOwner: TComponent);
var i:integer;
 begin
  inherited create(AOwner);
  ScoreQ:=0;
  GOtv:=0;
  Otvet:=0;
  for i:=1 to 5 do
   Otv[i]:=TStringList.Create;
  TextQ:=TStringList.Create;
 end;

function TQes.test:integer;
 begin
  test:=0;
  if Otvet=GOtv then test:=ScoreQ;
 end;

function NextVopros:boolean;
var z:integer;
begin
 inc(QNum);
 if QNum>MaxQReal then
  begin
   NextVopros:=true;
   exit;
  end;

  if Qess[QNum].TextQ.Count>0 then
  Lbl[2].Caption:=Qess[QNum].TextQ.Strings[0];
  for z:=1 to Qess[QNum].TextQ.Count-1 do
    Lbl[2].Caption:=Lbl[2].Caption+#13+Qess[QNum].TextQ.Strings[z];
  Lbl[2].Width:=RGroup[1].ClientWidth-(Lbl[1].Left+4);
  for z:=1 to 5 do
   with RadBtn[z] do
    begin
     Visible:=true;
     if Qess[QNum].Otv[z].Count>0 then
         Caption:=Qess[QNum].Otv[z].Strings[0] else Visible:=false;
     Checked:=false;
    end;
 NextVopros:=false;
// otvet:=0;
end;

procedure StopVopros;
var k,z:integer;
begin
 if stop then
  begin
    QNum:=0;
    AllS:=0;
    NextVopros;
    stop:=false;
    Bt.Caption:='[Ответ]';
    Lbl[1].Caption:='';
    Lbl[2].Font.Color:=clBlue;
    exit;
  end;
 Stop:=true;
 k:=0;
 Lbl[2].Font.Color:=clRed;
 for  z:=1 to MaxQReal do
   if Qess[z].test>0 then inc(k);
 Lbl[2].Caption:='Вы ответили правильно на '+inttostr(k)+' вопросов из '+inttostr(MaxQReal)+#13+
 'Набрав '+inttostr(AllS)+' баллов';
 Lbl[2].Width:=RGroup[1].ClientWidth-(Lbl[1].Left+4);
  for z:=1 to 5 do
    RadBtn[z].Visible:=false;

 Bt.Caption:='Заново';


end;

procedure TForm1.FormCreate(Sender: TObject);
var z,i,k1,k2:integer;
ss:TStringList; s:string;
begin
 ss:=TStringList.Create;
 if not FileExists('Voprosy.txt') then
  begin
   ShowMessage('Где файл вопросоов!');
   Application.Terminate;
   exit;
  end;
 Stop:=false;
 ss.LoadFromFile('Voprosy.txt');
 MaxQReal:=0;
 for i:=0 to ss.Count-1 do
  begin
   s:=trim(ss.Strings[i]);
   if pos('[Q]',s)=1 then
    begin

     if MaxQReal>0 then
       if Qess[MaxQReal].GOtv=0 then dec(MaxQReal);
     inc(MaxQReal);delete(s,1,3);
     if MaxQReal>MaxQ then exit;
     Qess[MaxQReal]:=TQes.Create(Self);
     Qess[MaxQReal].TextQ.Add(s);
    end;
   for z:=1 to 5 do
    begin
     if pos('[A'+inttostr(z)+']',s)=1 then
      begin
       delete(s,1,4);
       Qess[MaxQReal].Otv[z].Add(s);
      end;
     if pos('[G'+inttostr(z)+']',s)=1 then
      begin
       Qess[MaxQReal].GOtv:=z;
       delete(s,1,4);
       val(s,k1,k2);
       if k1=0 then k1:=1;
       Qess[MaxQReal].ScoreQ:=k1;
      end;
     end;
  end;

 for i:=1 to 2 do
 begin
  RGroup[i]:=TRadioGroup.Create(Self);
  RGroup[i].Parent:=Form1;
  lbl[i]:=TLabel.Create(Self);
  lbl[i].Parent:=RGroup[i];
  lbl[i].Top:=16;
  lbl[i].Left:=12;
  lbl[i].WordWrap:=true;
 end;
 Lbl[2].Font.Color:=clBlue;
 Lbl[2].Font.Size:=10;
 RGroup[2].Align:=alBottom;
 RGroup[2].Caption:='Вопрос';
 RGroup[1].Caption:='Выбирите ответ и нажмите [Ответ]';
 RGroup[1].Align:=alClient;
 for i:=1 to 5 do
  begin
   RadBtn[i]:=TRadioButton.Create(Self);
   RadBtn[i].Parent:=RGroup[1];
   RadBtn[i].OnClick:=RClick;
   RadBtn[i].Top:=(i-1)*24+50;
   RadBtn[i].Left:=12;
   RadBtn[i].Name:='_'+inttostr(i);
   RadBtn[i].Width:=RGroup[1].ClientWidth-(RadBtn[i].Left+4);
  end;

 Bt:=TButton.Create(Self);
 Bt.Parent:=RGroup[2];
 Bt.Top:=RGroup[2].Height-35;
 Bt.Left:=RGroup[2].Width-60;
 Bt.Width:=50; Bt.Height:=25;
 Bt.Caption:='[Ответ]';
 Bt.OnClick:= Button1Click;
 AllS:=0;
 QNum:=0;
 NextVopros;
end;

procedure TForm1.RClick(Sender: TObject);
begin
 with (Sender as TRadioButton) do
  begin
   if Checked then qess[QNum].Otvet:=ord(Name[2])-48;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if Stop then exit;
 if qess[QNum].Otvet=0 then begin ShowMessage('Выбирите сначало ответ!');exit;end;
  AllS:=AllS+qess[QNum].test;
 if NextVopros then StopVopros;
end;

end.
CahekG вне форума Ответить с цитированием
Старый 22.03.2009, 21:56   #8
CahekG
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 28
По умолчанию

Примерный формат файла Voprosy.txt (с вопросами):
[Q]Абриавиатура СНГ это
[A1]СаяноНовосибирская губерния
[A3]Слёт независимых Граждан
[A5]Союз Независимых государств
[G5]1
[Q] квадрать гипотенузы равен ?
[A1]кубу
[A2]кругу
[A3]сумме катетов
[A4]сумме квадратов катетов
[A5]разности квадратов катетов
[G4]2
CahekG вне форума Ответить с цитированием
Старый 25.03.2009, 14:56   #9
SKS
Форумчанин
 
Аватар для SKS
 
Регистрация: 05.01.2009
Сообщений: 242
По умолчанию

у меня вот что получилось:
Код:
procedure TForm5.Button1Click(Sender: TObject);
var
  S: Real;

begin
If RadioButton1.Checked Then
Unit5.S:=Unit5.S+1;
If RadioButton2.Checked Then
Unit5.S:=Unit5.S+2;
If RadioButton3.Checked Then
Unit5.S:=Unit5.S+3;
If RadioButton4.Checked Then
Unit5.S:=Unit5.S+4;
If RadioButton5.Checked Then
Unit5.S:=Unit5.S+5;
ShowMessage('Ваш балл: '+FloatToStr(Unit5.S));

end;
procedure TForm5.RadioButton1Click(Sender: TObject);
begin
button1.Enabled:=true;
end;
теперь не могу сделать следующего: как в конце когда выводится сообщение о результате убрать название формы Project 1 ???
по окончании выводится сообщение о результате и заголовок формы вот такой как указано вверху.
SKS вне форума Ответить с цитированием
Старый 25.03.2009, 15:06   #10
XuTpbIu
Злобстер
Форумчанин
 
Аватар для XuTpbIu
 
Регистрация: 19.03.2009
Сообщений: 134
По умолчанию

Сохрани проект под другим именем, которое тебе больше нравится
От знаний ещё никто не умирал, но рисковать не стоит.
XuTpbIu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Счётчик limon Помощь студентам 5 18.10.2008 15:51
счётчик ZYRGiX HTML и CSS 7 26.12.2007 16:12