So, also nochmal von vorne. Dein Problem ist die Endlosschleife:
Delphi-Quellcode:
SetLength(BufLen, Len);
SetLength(BufPos, Len);
mciSendString('status mySound length', PChar(BufLen), Len, 0); // Länge der Mididatei ermitteln
repeat
mciSendString('status mySound position', PChar(BufPos), Len, 0); // aktuelle Position ermitteln ...
Application.ProcessMessages;
if Application.Terminated then
break;
until StrToInt(BufPos) >= StrToInt(BufLen); // ... bis Dateiende erreicht ist
Lässt du diesen Teil und diesen hier:
Delphi-Quellcode:
mciSendString('stop mySound', nil, 0, 0);
mciSendString('close mySound', nil, 0, 0);
if FileExists(tmpPath) then // temporäre Datei löschen
DeleteFile(tmpPath);
weg, macht die Funktion was du willst.
Wenn du auf die aktuelle Position nicht verzichten kannst, musst du diesen Teil in einen Thread (oder Timer) auslagern.