Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi WAVE, Edit-Feld und Timer (https://www.delphipraxis.net/69812-wave-edit-feld-und-timer.html)

Assisi 20. Mai 2006 12:35


WAVE, Edit-Feld und Timer
 
Hallo User,

bei einer Spielprogrammierung stellt sich mir folgendes Problem:

- mit Hilfe eines Timers wird alle 20 Sekunden eine Routine gestartet, in dieser wird vor allem eine WAV-Datei abgespielt (Zeichen für das Ende des 20-Sekunden-Intervalls)
- der Benutzer soll in dieser Zeit (3 Sekunden werden durch die WAV-Datei gewissermaßen heruntergezählt) noch eine Eingabe in einem Edit-Feld machen können und per Schaltfläche an das Programm weitergeben können. Hauptproblem: erst danach (!) soll die Routine "ball" greifen, die die Farbe des Spielballs verwandelt. Wie muss die Timer-Routine aussehen, so dass dies möglich ist???

Versuch:

if (spieler1 = true) then
begin
//* Application.ProcessMessages;
sndplaysound('countdown.wav', 2);
spieler1 := false;
ball
end
else
begin
//* Application.ProcessMessages;
sndplaysound('countdown.wav', 2);
spieler1 := true;
ball;
end;

Dies funktioniert schon fast so, wie gewünscht, nur wird die Ballfarbe gewissermaßen schon mit dem Ankündigen der letzten drei Sekunden geändert!

MfG
Assisi

Assisi 20. Mai 2006 12:38

Re: WAVE, Edit-Feld und Timer
 
Nachtrag:

Es funktioniert in der bschriebenen Weise für die Variante, dass Application.ProcessMessages aktiviert ist und sndplaysound('',1) eingestellt ist, habe etwas probiert und dann die schlechteste Variante ins Forum gestellt, pardon!

Ciao
Assisi

ManuMF 20. Mai 2006 12:46

Re: WAVE, Edit-Feld und Timer
 
Hallo,

(Benutze doch bitte die [ delphi]-Tags (über die Buttons über dem Text), dann ist es übersichtlicher.)

Zuerst würde ich zur Wiedergabe PlaySound verwenden, dann kannst du mit

Delphi-Quellcode:
PlaySound('Countdown.wav', 0, SND_FILENAME or SND_SYNC);
erreichen, dass die Befehle, die nach PlaySound folgen, erst nach Ende des Sounds ausgeführt werden. Dazu muss die Länge der Wave-Datei eben 3 Sekunden sein.

Oder:

Trotzdem mit PlaySound, aber per Timer ("Countdown"), der jede Sekunde einen Countdown-Ton abspielt und eine Variable (Integer, "Zeit") runtersetzt. Ist diese Null, wird gewechselt.

Delphi-Quellcode:
Zeit := 3;
Countdown.Enabled := true;

...

Procedure TForm.CountdownTimer(Sender: TObject);
begin
  PlaySound('Countdown.wav', 0, SND_FILENAME or SND_ASYNC); //Achtung: Hier _ASYNC!
  Dec(Zeit);
  if (Zeit = 0) then
  begin
    Spieler1 := not Spieler1; // Kehr den Wert um
    Ball; // Deine Routine
  end;
end;
Gruß,
ManuMF

Assisi 20. Mai 2006 12:50

Re: WAVE, Edit-Feld und Timer
 
Lieber ManuMF,

zunächst einmal vielen Dank für die schnelle (selbstlose) Hilfe, bin ganz neu hier, deshalb war die Form wohl nicht ganz ansprechend! Werde nun die Tipps ausprobieren und melde mich dann nochmals.

Ciao
Assisi

Assisi 20. Mai 2006 13:09

Re: WAVE, Edit-Feld und Timer
 
Lieber ManuMF,

habe die erste Variante nun intensiv getestet, ist aber nur ein Teilerfolg. Auch in den letzten drei Sekunden soll noch ein Exit-Feld beschrieben werden können - dies geht aber nicht, das Feld ist gewissermaßen tot. Die Ballfarbe wechselt nun in der Tat (wie gewünscht) erst nach Ende des Countdowns. Ist Deine Lösung noch in meinem Sinne anzupassen?

Assisi


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 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