![]() |
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 |
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 |
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:
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.
PlaySound('Countdown.wav', 0, SND_FILENAME or SND_SYNC);
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:
Gruß,
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; ManuMF |
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 |
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 08:30 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