Einzelnen Beitrag anzeigen

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, 19: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