Eine Möglichkeit wäre das
TimerNotify.Enabled := False;
vor das
Delphi-Quellcode:
MediaPlayer1.Stop;
ShowMessage('Das Musikstück ist zu Ende.');
zu setzen.
ich weiß zwar nicht, welches Interval du im Timer gesetzt hast, aber der läuft halt immer weiter, auch wenn das ShowMessage angezeigt wird.
Tritt nun der nächste Interval ein bevor du den Dialog bestätigt hat, landet er zwangläufig wieder in der OnTimer-Methode.
Dialoge in einem Timerevent sind immer so ein Sache, das der Timer immer weiterläuft, wärend jedoch die OnTimer-Procedure auf eine Bestätigen des Dialogs warten könnte.
Wird der Timer jedoch vor dem Dialog angehalten, so spielt das im Grunde keine Rolle mehr.