unit mReaktionszeit;
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
TStimulus =
record
x, y : integer;
Zeichen : char;
end;
Tfm_Reaktionstest =
class(TForm)
p_Control: TPanel;
lb_Versuche: TLabel;
ed_Versuche: TEdit;
lb_Zeit: TLabel;
bt_Start: TButton;
lb_Buchstabe: TLabel;
procedure FormCreate(Sender: TObject);
procedure bt_StartClick(Sender: TObject);
procedure bt_StartKeyPress(Sender: TObject;
var Key: Char);
private
var Anfang, Ende, H : TDateTime;
var Anzahl, Erfolg : integer;
var Buchstabe : TStimulus;
var Gesamt :
string;
procedure SetzenAuswerten;
procedure Zufall;
public
{ Public-Deklarationen }
end;
var
fm_Reaktionstest: Tfm_Reaktionstest;
implementation
{$R *.dfm}
procedure Tfm_Reaktionstest.bt_StartClick(Sender: TObject);
begin
Anzahl := StrToInt(ed_Versuche.text);
Erfolg := 0;
Anfang := Time;
lb_Zeit.Visible := false;
lb_Buchstabe.Visible := true;
SetzenAuswerten
end;
procedure Tfm_Reaktionstest.bt_StartKeyPress(Sender: TObject;
var Key: Char);
begin
if uppercase(Key) = lb_Buchstabe.caption
then
begin
Zufall;
Erfolg := Erfolg + 1;
SetzenAuswerten;
end;
end;
procedure Tfm_Reaktionstest.FormCreate(Sender: TObject);
begin
randomize;
formatdatetime := '
ss,zzz';
Zufall;
end;
procedure Tfm_Reaktionstest.SetzenAuswerten;
begin
if Anzahl <> Erfolg
then
begin
lb_Buchstabe.caption := Buchstabe.Zeichen;
lb_Buchstabe.Top := Buchstabe.y;
lb_Buchstabe.Left := Buchstabe.x;
end
else
begin
Ende := Time;
H := (Ende - Anfang) / Anzahl;
Gesamt := timetostr(H);
lb_Zeit.Caption := '
Durchschnittszeit pro Buchstabe: ' + Gesamt;
lb_Zeit.Visible := true;
lb_Buchstabe.Visible := false;
end;
end;
procedure Tfm_Reaktionstest.Zufall;
begin
Buchstabe.Zeichen := chr(random(26)+65);
Buchstabe.y := random(fm_Reaktionstest.Height - 70) + 70;
Buchstabe.x := random(fm_Reaktionstest.Width);
end;
end.