Autor Beitrag
greendesire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 23.01.09 13:01 
Wir programmieren im Moment zu dritt Sudoku und haben leider nur sehr wenige Grundkenntnisse.
Jetzt wollen wir noch einen Timer einfügen.
Er soll starten wenn man auf "Spiel starten" klickt und dann so lange laufen bis derjenige das Spiel geschafft hat.
wir haben es jetzt mit einem ttimer versucht: hier der quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Zeit := GetTickCount;
 Zeit := GetTickCount - Zeit;
end;


damit der Timer auch startet, haben wir einen Button Spiel starten:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
begin
label5.Caption:=timetoStr(zeit);
end;


Wenn wir jetzt das Spiel starten und auf den Button klicken, steht in dem Label nur 00:00:00 und der Timer läuft nicht.

Was machen wir falsch?
Wäre nett, wenn uns wer helfen kann.

Liebe Grüße

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.01.09 13:04 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.NeuesSpiel1Click(Sender: TObject);
begin
  Timer1.Enabled := true; //Timer einschalten
  label5.Caption:=timetoStr(zeit);  
end;


[edit] Achja, und was soll der Timer da eigentlich machen?
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Zeit := GetTickCount;
 Zeit := GetTickCount - Zeit;
end;

Da dürfte aber eine sehr kleine Zahl bei herauskommen.[/edit]
greendesire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 23.01.09 13:09 
Haben den Befehl eingefügt. Funktioniert aber nicht.
der Timer steht immer noch auf 00.00.00.

edit: wir dachten, dass er da die Anfangszeit nimmt und dann wenn man den Button klickt, soll er von der Anfangszeit die Zeit abziehen, damit die Zeit abläuft.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 23.01.09 13:13 
@DeddyH: Das wird nicht reichen, wenn ich mir den Rest so ansehe. Im Timer wird das Label ja gar nciht verändert. Ich würde es mal so probieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.NeuesSpiel1Click(Sender: TObject); 
begin 
  Startzeit := GetTickCount;
  label5.Caption := '0';
  timer1.Enabled := True; 
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Timer1Timer(Sender: TObject); 
var Zeitvergangen: Int64;
begin 
 Zeitvergangen := GetTickCount - StartZeit; 
 label5.Caption := IntToStr(Zeitvergangen Div 1000); // ergibt dann eine Anzeige in Sekunden
end;

_________________
We are, we were and will not be.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 23.01.09 13:16 
@Gausi: Funktionierts nicht auch so? da wirs dann wenigstens schön mit Stunde:Minute:Sekunde angezeigt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Timer1Timer(Sender: TObject);
var verbrauchteZeit: TDateTime
begin
 verbrauchteZeit := now -Zeit;
 Label1.Caption := TimeToStr(verbrauchteZeit);
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.NeuesSpiel1Click(Sender: TObject); 
begin 
  Zeit := now;
  label5.Caption := '0';
  timer1.Enabled := True; 
end;


das getTickCount ist total unnötig, weil das nur die Sekunden zählt die seit dem Systemstart vergangen sind.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 23.01.09 13:20 
Ja, das sollte auch funktionieren. Allerdings könnte es sein, dass dabei um Mitternacht was schiefläuft. Deswegen habe ich das so gelassen. ;-)

_________________
We are, we were and will not be.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 23.01.09 13:50 
grad ausprobiert, gibt eine Konflikte mit der Uhrzeit 00:00:00. :)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Fr 23.01.09 16:07 
user profile icongreendesire hat folgendes geschrieben Zum zitierten Posting springen:
[...]

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Zeit := GetTickCount;
 Zeit := GetTickCount - Zeit;
end;


[...]
Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Naja, da zwischen dem Ausführen der beiden Befehle doch recht wenig Zeit liegt, können wir davon ausgehen, dass markierte Gettickcount (nahezu) gleich mit dem davor ist. dementsprechend ergibt sich für die Zweite ZEile: Zeit := GetTickCount - GetTickCount;, was nahezu 0 ist, wenn nicht auf 0 gerundet wird.

Andere Frage: Warum schreibt ihr nicht einfach (je nach Intervall, hab mal 1000 angenommen):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin  
 if start then  //globale Variable, Boolean, bei Start-Button-Drücken auf true setzen
   inc(Zeit);   //natürlich in Sekunden
end;

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 23.01.09 16:13 
warum dann nicht gleich nur inc(Zeit);? Die Variable Start kann ja dann mit Timer1.Enabled erledigt werden. mann müsst halt den counter immer wieder zurücksetzen. und man müsst es richtig formatieren.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Maweki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 197

Ubuntu Linux
Lazarus
BeitragVerfasst: Fr 23.01.09 16:14 
user profile iconder organist hat folgendes geschrieben Zum zitierten Posting springen:


Andere Frage: Warum schreibt ihr nicht einfach (je nach Intervall, hab mal 1000 angenommen):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin  
 if start then  //globale Variable, Boolean, bei Start-Button-Drücken auf true setzen
   inc(Zeit);   //natürlich in Sekunden
end;


Weil Timer sehr ungenau ist.
GetTickCount ist die genauste Möglichkeit, ohne den Prozessor zu sehr zu belasten (Echtzeitthread usw.).

Das ist schon der richtige Weg.
greendesire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 24.01.09 14:09 
danke wir werden es mal testen, da wird bestimmt was davon funktionieren.
Leider treffen wir uns immer nur Freitag und ich hab das Programm nicht auf meinem PC.
Danke erstmal für die Hinweise ich melde mich dann nochmal obs geklappt hat.