![]() |
Ereignis bei Timer.Tick funktioniert nicht
Guten Abend,
Ich habe vor kurzen mit Delphi.net angefangen und wollte jetzt in ein kleines Spiel das ich programmiere, einen einen Sekunden Timer einbauen. Ich wollte in einem Intervall von 1000 ms, die Zahl in einem Label in jeder Sekunde +1 nehmen. Leider wird das Tick Ereignis nur 1mal ausgeführt :wall: .
Delphi-Quellcode:
Ist sicher ein dummer Fehler aber helft mir trotzdem bitte.unit WinForm; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, sysutils; procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs); var zahl:integer; begin label1.Text:=inttostr(zahl+1); end; procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs); begin timer1.enabled:=true; end; end. mfG blade236 |
Re: Ereignis bei Timer.Tick funktioniert nicht
Du weist deinem Label bei jedem Tick zahl+1 zu
das ist beim ersten Durchlauf 1, beim zweiten Durchlauf wieder 1 usw, weil du zahl an sich nicht inkrementierst ;) |
Re: Ereignis bei Timer.Tick funktioniert nicht
Bist du sicher das der Event nur einmal auftritt oder wird die Anzeige nur einmal aktualisiert?
|
Re: Ereignis bei Timer.Tick funktioniert nicht
mit inkrementieren meinst du wohl sowas oder?
zahl:=zahl+1; label1.Text:=inttostr(zahl);
Delphi-Quellcode:
klappt immernoch nicht
unit WinForm;
interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, sysutils; procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs); var zahl:integer; begin zahl:=zahl+1; label1.Text:=inttostr(zahl); end; procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs); begin timer1.enabled:=true; end; end. |
Re: Ereignis bei Timer.Tick funktioniert nicht
Zitat:
|
Re: Ereignis bei Timer.Tick funktioniert nicht
Danke klappt, wieso Global kapier ich aber trotzdem nich.
|
Re: Ereignis bei Timer.Tick funktioniert nicht
Zitat:
|
Re: Ereignis bei Timer.Tick funktioniert nicht
Zitat:
Delphi-Quellcode:
in diesem code wird die Variable nach dem Timer1_Tick event definiert.
unit WinForm;
interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, sysutils; procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs); var zahl:integer; begin zahl:=zahl+1; label1.Text:=inttostr(zahl); end; procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs); begin timer1.enabled:=true; end; end.
Delphi-Quellcode:
Die Variable, die ja nur temporär existiert hat also zuerst mal den wert 0.
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
var zahl:integer; Dann wird Zu dem wert 0 der wert 1 dazu addiert.
Delphi-Quellcode:
dann wird der wert 1 in dein panel geschireben
zahl:=zahl+1;
Delphi-Quellcode:
und an dieser stelle endet die prozedur und die temporäre variable ist nichtmehr vorhanden.
label1.Text:=inttostr(zahl);
Sobald dann der nächste "Tick" erfolgt wird die prozedur wiederholt. Der wert wird "erstellt", auf 0 gesetzt, + 1 addiert und in dein panel geschrieben das problem ist also nicht der timer sondern dein Wert! schriebt man den code jetzt etwa so:
Delphi-Quellcode:
existiert die variable ja immer, da sie ja global ist. soll heißen: sie wird nie gelöscht oder neu erstellt.
unit WinForm;
var zahl:integer; interface uses System.Drawing, System.Collections, System.ComponentModel, System.Windows.Forms, System.Data, sysutils; procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs); begin zahl:=zahl+1; label1.Text:=inttostr(zahl); end; procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs); begin timer1.enabled:=true; end; end. einfacher wäre es aber den Timer so zu gestalten:
Delphi-Quellcode:
dann mpsstest du den text auf dem label am anfang nur auf "0" setzen und das selbe würde dabei herauskommen. mit dem unterschied das du keine variablebräuchtest.
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
begin label1.Text:=inttostr(strtoint(label1.Text)+1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz