AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Reaktionstest

Ein Thema von KingMax · begonnen am 30. Aug 2009 · letzter Beitrag vom 30. Aug 2009
Antwort Antwort
KingMax

Registriert seit: 30. Aug 2009
7 Beiträge
 
#1

Reaktionstest

  Alt 30. Aug 2009, 20:02
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:
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.
Hier Formular mAmpel:

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.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Reaktionstest

  Alt 30. Aug 2009, 20:04
Da fehlt noch ein Verweis auf die Unit: Oben bei uses noch ein mAmpel eintragen.
  Mit Zitat antworten Zitat
Vasco da Gama

Registriert seit: 2. Aug 2009
131 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Reaktionstest

  Alt 30. Aug 2009, 20:05
Hi, bei der ersten Unit fehlt mir in der Uses Klausel das zweite Formular.

Edit: Schade, zu langsam
Flo
Programmiere inzwischen hauptsächlich mit C++. Nicht böse werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Reaktionstest

  Alt 30. Aug 2009, 20:06
"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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
KingMax

Registriert seit: 30. Aug 2009
7 Beiträge
 
#5

Re: Reaktionstest

  Alt 30. Aug 2009, 20:10
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 :/
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Reaktionstest

  Alt 30. Aug 2009, 20:17
.. 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
Klaus
  Mit Zitat antworten Zitat
KingMax

Registriert seit: 30. Aug 2009
7 Beiträge
 
#7

Re: Reaktionstest

  Alt 30. Aug 2009, 20:20
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Reaktionstest

  Alt 30. Aug 2009, 20:23
.. vielleicht klappt es ja so:

BtTestreihe.onClick := BtTestreiheClick; Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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