AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timer mit delay

Ein Thema von Zidane · begonnen am 14. Mai 2006 · letzter Beitrag vom 14. Mai 2006
Antwort Antwort
Zidane

Registriert seit: 9. Mai 2006
9 Beiträge
 
#1

Timer mit delay

  Alt 14. Mai 2006, 14:04
Hallo,

ich möchte einen Timer so einbauen, dass während der Timer Prozedur eine gewisse Zeit gewartet wird.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
     Form1.ShapeRot.Brush.Color := clred;
     Form1.ShapeGelb.Brush.Color := clyellow;
     //hier 2 Sekunden warten
     Form1.ShapeRot.Brush.Color := clwhite;
     Form1.ShapeGelb.Brush.Color := clwhite;
     Form1.ShapeGruen.Brush.Color := cllime;
end;
Wenn ich die Anwendung so abrufe springt das untere Shape (soll eine Ampel sein, oben ShapeRot, dann ShapeGelb, dann ShapeGruen) direkt auf grün, sprich nur Form1.ShapeGruen.Brush.Color := cllime; wird ausgeführt. Hab ich irgendetwas übersehen warum die anderen beiden Shapes nicht vorher noch eingefärbt werden?

Und, um auf meine eigentliche Frage zurückzukommen, wie baue ich eine Art Verzögerung bei "//hier 2 Sekunden warten" ein? Habe bereits gesucht, aber unter delay finde ich nichts und sleep friert das ganze ein, aber ich möchte ja nur, so. oben, 2 Sekunden warten!

Danke und viele Grüße,

Zidane
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.987 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Timer mit delay

  Alt 14. Mai 2006, 14:09
Hi,

ein Delay in einem Timer ist irgendwie unlogisch. Ich würde wohl den Timer auf ein Intervall wie 1 Sek stellen (gehen natürlich auch kleinere), eine Variable hochzählen lassen und so die Wartezeit umsetzen:

Delphi-Quellcode:
inc(CounterVar);

...

// bei Intervall 1000 sind das nun 2 Sek
if CounterVar = 2 then
begin
  // Code ausführen
  CounterVar := 0;
end;
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Timer mit delay

  Alt 14. Mai 2006, 14:13
Zitat von Zidane:
sprich nur Form1.ShapeGruen.Brush.Color := cllime; wird ausgeführt.?
Ich würde behaupten, dass alles ausgeführt wird, aber dein Shape nicht neugezeichnet wird.

gruss
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Zidane

Registriert seit: 9. Mai 2006
9 Beiträge
 
#4

Re: Timer mit delay

  Alt 14. Mai 2006, 14:24
@Matze: Danke, klingt gut, aber ich habe mit dem implementieren Probleme.
Hab CounterVar deklariert aber weiß nun nicht genau wo ich das Inc einbinden soll.

Delphi-Quellcode:
var
  Form1: TForm1;
  CounterVar: Integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
     Timer1.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(CounterVar);
end;

begin
      // bei Intervall 1000 sind das nun 2 Sek
     if CounterVar = 2 then
     Form1.ShapeRot.Brush.Color := clred;
     Form1.ShapeGelb.Brush.Color := clyellow;
     Form1.ShapeRot.Brush.Color := clwhite;
     Form1.ShapeGelb.Brush.Color := clwhite;
     Form1.ShapeGruen.Brush.Color := cllime;
     CounterVar := 0;
end;

end.
@MrKnogge: Wenn alles ausgeführt werden würde könnte man aber bevor ShapeGruen aber lime umgestellt wird die anderen beiden Shapeumänderungen erkennen, oder?

Danke,

Zidane
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.987 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Timer mit delay

  Alt 14. Mai 2006, 14:26
Ganz einfach so:

Delphi-Quellcode:
var
  Form1: TForm1;
  CounterVar: Integer = 0; // <= wichtig, initialisieren!

implementation

{$R *.DFM} 

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(CounterVar);

  // dein normaler Code

  if CounterVar = 2) then
  begin
    // dein verzögerter Code
    CounterVar := 0;
  end;
end;
  Mit Zitat antworten Zitat
Zidane

Registriert seit: 9. Mai 2006
9 Beiträge
 
#6

Re: Timer mit delay

  Alt 14. Mai 2006, 14:29
Ah ok!

Durch CounterVar: Integer = 0; wird der Zähler also auf 0 gesetzt oder?

Vielen Dank, wieder was dazu gelernt!
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.304 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Timer mit delay

  Alt 14. Mai 2006, 14:29
Hallo,

ich denke er meinte es so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
     Timer1.Enabled := true;
     CounterVar := 0;
end;


//Timer = 1000
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  //nach 1 Sek. Ampel rot
  If CounterVar = 1 then
    begin
      ShapeRot.Brush.Color := clRed;
      ShapeGelb.Brush.Color := clWhite;
      ShapeGruen.Brush.Color := clWhite;
    end;

  //nach 3 Sek. Ampel rot/gelb
  If CounterVar = 3 then
    begin
      ShapeRot.Brush.Color := clRed;
      ShapeGelb.Brush.Color := clyellow;
      ShapeGruen.Brush.Color := clWhite;
    end;

  //nach 4 Sek. Ampel grün
  If CounterVar = 4 then
    begin
      ShapeRot.Brush.Color := clWhite;
      ShapeGelb.Brush.Color := clWhite;
      ShapeGruen.Brush.Color := clLime;
    end;
  
//andere Abläufe gleich wie oben....

  Inc(CounterVar);
end;
[edit]
Wobei es mit Case schöner ausschaut:
Delphi-Quellcode:
case CounterVar of
  1: begin
       //Ampel rot
     end;
  3: begin
       //Ampel rot/gelb
     end;
  4: begin
       //Ampel grün
     end;
{...}
end;

  inc(CounterVar)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Timer mit delay

  Alt 14. Mai 2006, 14:34
Zitat:
Wenn alles ausgeführt werden würde könnte man aber bevor ShapeGruen aber lime umgestellt wird die anderen beiden Shapeumänderungen erkennen, oder?
Klar solltest du es erkennen können - allerdings für den zeitraum von etwa einem sechzigstel sekunden, wenn dein monitor eine frequenz von 60 Hz hat. Also nicht wirklich lange.

Du kannst ein sleep(2000) reinpacken(vorsicht, stoppt den gesamten prozess). Andere Möglichkeit: Noch einen timer einbauen, den du startest und der dann auf grün schaltet.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Zidane

Registriert seit: 9. Mai 2006
9 Beiträge
 
#9

Re: Timer mit delay

  Alt 14. Mai 2006, 14:34
Nun ja, Case ist dann wieder was neues für mich, ich bleib erstmal beim vorherigen!

Aber dankeschön, im Nachhinein erscheint das alles immer so logisch!

Gracias!
  Mit Zitat antworten Zitat
kenuvis

Registriert seit: 19. Apr 2006
71 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Timer mit delay

  Alt 14. Mai 2006, 15:16
case ist realtiv einfach und übersichtlicher.

if a = 2 then ....
if a = 3 then ....
if a = 4 then ....
....

bei 3 if abfragen geht das noch, aber wenn du dann 10 oder 20 hast, wird das sehr unübersichtlich.
in solchen fällen nimt man dann case abfragen. ein tipp von mir, schau mal in der delphi hilfe nach und informiere dich dann da über case.

so sieht das dann in einer case abfrage aus.

case a of
2: ....
3: ....
4: ....
....
end;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf