Reaktionstest
Hallo,
wir haben als aufgabe in der Schule das Projekt "Reaktionstest" aufbekommen. Dabei geht es darum, die Reaktion zu testen. Hierzu wird eine gezeichnete Ampel nach zufälliger Zeit von rot auf "Grün" springen, und dann muss man eine taste drücken. Die Reaktion wird dann unten im Edit feld angezeigt. Das Programm besteht aus zwei Formularen, das Hauptformular und das Ampel-Formular (Units). Mein Problem besteht nun hier, dass ich mithilfe der Klasse TAmpel die Ampel erzeuge. Nun wird die Klasse aber nicht akzeptiert! Könnt ihr mir vielleicht sagen wo ich einen Fehler gemacht habe? Ich lade den Quelltext beider Formulare mit hoch:
Delphi-Quellcode:
Hier Formular mAmpel:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TMain = class(TForm) procedure FormCreate(Sender: TObject); procedure BtTestreiheClick (Sender: TObject); procedure BtReaktionstestClick (Sender: TObject); procedure FormKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); procedure TiReaktionTimer (Sender: TObject); private { Private declarations } BtTestreihe: TButton; //Klassen und Objecte (bei Laufzeit erzeugt) BtReaktionstest: TButton; TiReaktion: TTimer; EdZeit: TEdit; LbZeit: TLabel; Start, Stop: Longint; public { Public declarations } end; var Main: TMain; Ampel: TAmpel; //WARUM AKZEPTIERT DER DIE KLASSE NICHT??? implementation {$R *.dfm} procedure TMain.FormCreate(Sender: TObject); begin BorderStyle := bsSingle; //Hauptformular Left := 150; Top := 100; Width := 240; Height := 250; Caption := 'Projekt Reaktion'; BtTestreihe := TButton.Create (Main); //Komponenten BtTestreihe.Parent := Main; BtTestreihe.SetBounds (60,20,120,32); BtTestreihe.Caption := 'Neuer Test'; BtReaktionstest := TButton.Create(Main); BtReaktionstest.Parent := Main; BtReaktionstest.SetBounds (60,70, 120, 32); BtReaktionstest.Caption := 'Start!'; LbZeit := TLabel.Create(Main); with LbZeit do begin Parent := Main; SetBounds (60, 120, 120, 32); Caption:= 'Reaktionszeit'; end; EdZeit := TEdit.Create(Main); with EdZeit do begin Parent := Main; SetBounds (60, 140, 120, 32); Font.Name := 'Arial'; Font.Size := 20; Text := ' 0 ms'; end; TiReaktion := TTimer.Create (Main); end; procedure TMain.BtTestreiheClick(Sender: TObject); //Button Testreihe begin Ampel := TAmpel.Create(Main); Ampel.Show; Ampel.Rot; BtReaktionstest.Enabled := True; end; procedure TMain.BtReaktionstestClick(Sender: TObject); //Button Reaktionstest begin EdZeit.Text := ''; Ampel.Rot; TiReaktion.Interval := 2000 + Random(3000); TiReaktion.Enabled := True; end; procedure TMain.TiReaktionTimer(Sender: TObject); //Timer begin Ampel.Gruen; Start := GetTickCount; TiReaktion.Enabled := False; end; //Zeit procedure TMain.FormKeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); begin Stop := GetTickCount; if Ampel.IstGruen then EdZeit.Text := ''+ IntToStr (Stop-Start)+ ' ms'; end; end.
Delphi-Quellcode:
unit mAmpel;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TAmpel = class (TForm) private AmpelGruen: Boolean; public procedure Rot; procedure Gruen; function IstGruen: Boolean; end; implementation procedure TAmpel.Rot; //Rote Ampel begin with Canvas do begin Pen.Width := 3; Brush.Color := clred; Ellipse (20,20,140,140); Brush.Color := clgray; Ellipse(20,160,140,280); end; AmpelGruen := false; end; procedure TAmpel.Gruen; //Gruene Ampel begin with Canvas do begin Pen.Width := 3; Brush.Color := cllime; Ellipse(20,160,140,280); Brush.Color := clgray; Ellipse(20,20,140,140); end; AmpelGruen := True; end; function TAmpel.IstGruen; begin IstGruen := AmpelGruen; end; end. |
Re: Reaktionstest
Da fehlt noch ein Verweis auf die Unit: Oben bei uses noch ein mAmpel eintragen.
|
Re: Reaktionstest
Hi, bei der ersten Unit fehlt mir in der Uses Klausel das zweite Formular.
Edit: Schade, zu langsam |
Re: Reaktionstest
"wird nicht akzeptiert" ist keine Fehlerbeschreibung!
Was sagt denn der Compiler genau? Aber als Tipp: wie wäre es, wenn du die Unit ... [edit] ach mist, die Kuh war schneller |
Re: Reaktionstest
hmm danke! Jetzt kommt zwar keine Fehlermeldung mehr, aber irgendwie passiert nichts wenn ich die buttons drücke! Ich bin alles nochmal durchgegangen.. und eigendlich hab ich alles richtig gemacht... komisch :/
|
Re: Reaktionstest
.. Du solltest der Ampel noch einen Parent zuweisen,
ansonsten wird sie nicht angezeigt. was natürlich Mist ist, da Ampel eine Ableitung von TForm ist. Grüße Klaus |
Re: Reaktionstest
Ich vermute dass man die Buttons im object-inspektor bei Events auf OnClick stellen muss, was aber nicht geht, da die buttons ja bei der laufzeit erstellt werden, und nicht manuell
|
Re: Reaktionstest
.. vielleicht klappt es ja so:
Delphi-Quellcode:
Grüße
BtTestreihe.onClick := BtTestreiheClick;
Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz