AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Delphiprozedur auf das deaktivieren eines Timers warten lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Delphiprozedur auf das deaktivieren eines Timers warten lassen

Ein Thema von Cookiesucht · begonnen am 25. Feb 2013 · letzter Beitrag vom 21. Mär 2013
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#1

AW: Delphiprozedur auf das deaktivieren eines Timers warten lassen

  Alt 25. Feb 2013, 23:09
Er hat Jehova gesagt!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Delphiprozedur auf das deaktivieren eines Timers warten lassen

  Alt 26. Feb 2013, 12:31
Du könntest deine Hauptprocedure auch in zwei Proceduren aufteilen. Der erste Teil wird vor aktivieren des Timers ausgeführt, und den zweiten Teil führst du nach aktivieren des Timers aus. Die Parameter könntest du dann (sofern möglich) im Private/Protected Teil deiner Klasse ablegen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Delphiprozedur auf das deaktivieren eines Timers warten lassen

  Alt 26. Feb 2013, 13:56
In der Informatik gibt es sogenannte Zustandsautomaten.
Wenn du eine bestimmte Abfolge von Aktionen haben möchtest, dann wäre das ein heiser Kandidat.

Im Formular benötigst du eine Variable für den aktuellen Zustand:
Delphi-Quellcode:
TForm1 = class(TForm)
private
  zustand : Integer;
...
end;
Du startest den Zustandsautomaten mit einem Button:
Delphi-Quellcode:
procedure TForm1.StartButtonClick(Sender:TObject);
  zustand := 0; // Anfangszustand
  Timer1.Interval := 800; // alle 0,8s ein Zustandwechsel
  Timer1.Enabled := True;
end;
Im Timer Event liegt die Hauptarbeit:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
var
  neu_zustand : integer;
begin
  neu_zustand := zustand + 1;
  case zustand of
    0: self.Color := clGreen; // Hintergrund grün
    1: MovePlayerLeft; // Spielfigur bewegen
    2: MovePlayerLeft; // Spielfigur bewegen
    3: MovePlayerUp;
    4: MovePlayerUp;
    5: self.Color := clWindow;
    6: Timer1.Enabled := False; // Animation beendet, Timer abstellen
  end;
  zustand := neu_zustand;
end;
In dem Beispiel läuft "zustand" von 0 bis 6 durch und dann endet das Ganze.
Es ist aber durchaus möglich, von dem normalen Ablauf abzuweichen und abhängig von einer Bedingung zu jedem anderen Zustand zu springen:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
var
  neu_zustand : integer;
begin
  neu_zustand := zustand + 1;
  case zustand of
    0: self.Color := clGreen; // Hintergrund grün
    1: MovePlayerLeft; // Spielfigur bewegen
    2: MovePlayerLeft; // Spielfigur bewegen
    3: begin
        MovePlayerUp; // nach oben
        if ShapePlayer.Top > 20 then
          neu_zustand := 2;
    5: self.Color := clWindow;
    6: Timer1.Enabled := False; // Animation beendet, Timer abstellen
  end;
  zustand := neu_zustand;
end;
Denk auch daran, dass du je nach Zustand den Timer schneller oder langsamer machen kannst.

Viel Spass beim Ausdenken deiner Animation!
Man kann die Zustandvariable auch mit einem Aufzählungstyp abbilden.
Für den Anfang würde ich aber bei einem Integer bleiben, weil das weniger Schreibarbeit ist und mehr Raum für spontane Änderungen lässt.
  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 23:00 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