Das Ganze passte auch prima, solange ich die Timer-Form im Auge behielt. Dummerweise schaue ich während der Arbeit mit Foxpro aber auf mein Codefenster und so passierte es recht häufig, dass ich doch wieder einen 20 Minuten Tee da stehen hatte.
Lange Rede kurzer Sinn, es musste etwas 'ohrenfälligeres' her, denn auch das Flackern des Timers bei abgelaufener Zeit half nicht wirklich.
Nachdem also der Entschluss zum Abspielen einer WAV-Datei gefallen war, musste ich feststellen, dass mir das Beispiel in den Solution Samples nicht auf Anhieb die Informationen preisgab, die mich interessierten. Irgendwo im Web fand ich dann ein Stück Mustercode zum Aufrufen der MCI API-DLL, welches ich als Grundlage für den u.a. Beispielcode verwendet habe. Seitdem funktionieren auch meine 3 und 4 Minuten Tees... ;-)
Die notwendige API befindet sich im Windows-System32 Verzeichnis und heisst WinMM.dll. Sie beinhaltet das Media Control Interface aus dem letztlich nur die Funktion PlaySound deklariert werden muss.
Die u.a. Funktion PlayWAV kann mit oder ohne Parameter aufgerufen werden. Wird der Name einer WAV-Datei übergeben, so wird versucht, diese abzuspielen. Andernfalls wird eine Standarddatei aus dem Windows Media Verzeichnis abgespielt. Die möglichen Werte des zweiten Parameters können dem u.a. DEFINE-Block entnommen werden.
?PlayWAV()
FUNCTION PlayWAV
LPARAMETERS vWavFile as String, vFlags as Integer
LOCAL llReturn as Boolean
llReturn = .T.
* // -----------------------------------------------------------
* // vWavFile = (optional)
* // Pfad und Dateiname der abzuspielen WAV-Datei
* //
* // vFlag = (optional)
* // gezielte Abspielvariante gem. u.a. DEFINEs
* // -----------------------------------------------------------
#DEFINE SND_SYNC 0x00000000 && synchron abspielen (default)
#DEFINE SND_ASYNC 0x00000001 && asynchron abspielen
#DEFINE SND_NODEFAULT 0x00000002 && silence (!default) wenn WAV nicht gefunden
#DEFINE SND_MEMORY 0x00000004 && zeigt auf eine im RAM befindliche Datei
#DEFINE SND_LOOP 0x00000008 && solange abspielen bis neue WAV übergeben wird
#DEFINE SND_NOSTOP 0x00000010 && derzeit ablaufende Sounds nicht unterbrechen
#DEFINE SND_NOWAIT 0x00002000 && nicht warten wenn der Treiber 'busy' ist
#DEFINE SND_ALIAS 0x00010000 && Name ist ein registrierter ALIAS
#DEFINE SND_ALIAS_ID 0x00110000 && Alias ist eine vordefinierte ID
#DEFINE SND_FILENAME 0x00020000 && Name ist ein Dateiname
#DEFINE SND_RESOURCE 0x00040004 && Name ist eine Ressource oder Atom
#DEFINE SND_PURGE 0x00000040 && entferne zum Abspielen nicht-statische Tasks
#DEFINE SND_APPLICATION 0x00000080 && Suche nach assoziierter Applikation
* // WinMM.dll -> MCI API-DLL -> MCI = Media Control Interface
TRY
DECLARE INTEGER PlaySound IN WinMM.dll AS PLAYSOUNDOVERAPI ;
STRING @ pszSound, INTEGER HMODULE_hmod, LONG DWORD_fdwSound
m.vWavFile = IIF( ;
VARTYPE(m.vWavFile) <> [C] OR !FILE(m.vWavFile), ;
ADDBS(GETENV([windir])) + [media\tada.wav], ;
m.vWavFile ;
)
m.vFlags = IIF( ;
VARTYPE(m.vFlags)=[N], ;
m.vFlags, ;
SND_ASYNC+SND_FILENAME ;
)
PLAYSOUNDOVERAPI(m.vWavFile,0,m.vFlags)
CATCH
* // API Aufruf schlug fehl, also nix mit TADA
llReturn = .F.
ENDTRY
RETURN llReturn
ENDFUNC
Geht auch schnelle und einfacher !
AntwortenLöschen*-----------------------------------*
SET BELL TO ("d:\MySound\my.wav")
?? CHR(7)
SET BELL TO
*-----------------------------------*
Gruss Micha