AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism Ereignis bei Timer.Tick funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Ereignis bei Timer.Tick funktioniert nicht

Ein Thema von blade236 · begonnen am 15. Feb 2008 · letzter Beitrag vom 15. Feb 2008
Antwort Antwort
blade236

Registriert seit: 15. Feb 2008
3 Beiträge
 
#1

Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:01
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 .
Delphi-Quellcode:
 

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.
Ist sicher ein dummer Fehler aber helft mir trotzdem bitte.
mfG blade236
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:07
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:07
Bist du sicher das der Event nur einmal auftritt oder wird die Anzeige nur einmal aktualisiert?
Markus Kinzler
  Mit Zitat antworten Zitat
blade236

Registriert seit: 15. Feb 2008
3 Beiträge
 
#4

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:14
mit inkrementieren meinst du wohl sowas oder?

zahl:=zahl+1;
label1.Text:=inttostr(zahl);

Delphi-Quellcode:
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.
klappt immernoch nicht
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.058 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:21
Zitat von blade236:
mit inkrementieren meinst du wohl sowas oder?

zahl:=zahl+1;
label1.Text:=inttostr(zahl);

Delphi-Quellcode:
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.
klappt immernoch nicht
Das wird erst dann klappen, wenn du zahl global definierst.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
blade236

Registriert seit: 15. Feb 2008
3 Beiträge
 
#6

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:27
Danke klappt, wieso Global kapier ich aber trotzdem nich.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:30
Zitat von blade236:
Danke klappt, wieso Global kapier ich aber trotzdem nich.
Da es sich sonst bei jedem Durchlauf um eine neue Variable handelt, also wieder bei 0 beginnt.
Markus Kinzler
  Mit Zitat antworten Zitat
Custom

Registriert seit: 18. Aug 2007
Ort: Mainz
203 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Ereignis bei Timer.Tick funktioniert nicht

  Alt 15. Feb 2008, 20:41
Zitat von blade236:
Danke klappt, wieso Global kapier ich aber trotzdem nich.
dann werfen wir dochmal einen blick auf den codeschnipsel

Delphi-Quellcode:
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.
in diesem code wird die Variable nach dem Timer1_Tick event definiert.
Delphi-Quellcode:
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
var zahl:integer;
Die Variable, die ja nur temporär existiert hat also zuerst mal den wert 0.
Dann wird Zu dem wert 0 der wert 1 dazu addiert.
zahl:=zahl+1; dann wird der wert 1 in dein panel geschirebenlabel1.Text:=inttostr(zahl); und an dieser stelle endet die prozedur und die temporäre variable ist nichtmehr vorhanden.

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:
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.
existiert die variable ja immer, da sie ja global ist. soll heißen: sie wird nie gelöscht oder neu erstellt.

einfacher wäre es aber den Timer so zu gestalten:
Delphi-Quellcode:
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
begin

label1.Text:=inttostr(strtoint(label1.Text)+1);

end;
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.
  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 14:39 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