Noch eine kleine Optimierung: Anstelle des Hin- und Herkonvertierens der Minute in einen String und zurück kann man auch DecodeTime verwenden:
var hour, min, sec, msec: integer
begin
DecodeTime(now, hour, min, sec, msec);
if min >= 30 then
CurrentPlaylist.LoadFromM3U('c:\' + FormatDateTime('ddmmyy-hh', now + 0.04166) + '.m3u', false)
else
CurrentPlaylist.LoadFromM3U('c:\' + FormatDateTime('ddmmyy-hh', now) + '.m3u', false);
end.
Ich kann es gerade mangels Windows nicht testen, aber so könnte es gehen.