Hallo!
Im hier gezeigten Code erzeuge ich eine Text-Datei, in die ich eine Playliste für den Windows-Mediaplayer schreibe, welche im Anschluss sofort in den Player geladen und wiedergegeben wird.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TFHauptFe.SpeedButton14Click(Sender: TObject); var F : TextFile; i : Integer; PTempPLaylist : PTPlaylist; PTempPlaylistItem : PTPlaylistItem; begin AssignFile(F, AppPfad+'ExData\emma.asx'); Rewrite(F); Writeln(F, '<Asx Version = "3.0">'); Writeln(F, '<Title>EMMA - Playlist</Title>'); Writeln(F, '<Author>EMMA</Author>'); Writeln(F, '<Abstract>'); Writeln(F, '</Abstract>'); Writeln(F, '');
if PlaylistTree.Selected.Parent=nil then begin PTempPlaylist:=System.PPlaylist; while PTempPlaylist<>nil do begin if PTempPlaylist.Name=PLaylistTree.Selected.Text then break; PTempPlaylist:=PTempPlaylist.PNext; end;
PTempPlaylistItem:=PTempPlaylist.Items; While PTempPlaylistItem<>nil do begin Writeln(F, '<Entry>'); Writeln(F, '<Ref href = "'+PTempPlaylistItem.Dateiname+'"/>'); writeln(F, '</Entry>'); PTempPlaylistItem:=PTempPlaylistItem.PNext; end; end else begin Writeln(F, '<Entry>'); Writeln(F, '<Ref href = "'+PLaylistTree.Selected.Text+'"/>'); writeln(F, '</Entry>'); end;
Writeln(F, '</Asx>'); CloseFile(F);
ShellExecute(0,'open',PChar('C:\Programme\Windows Media Player\wmplayer.exe'),PChar(AppPfad+'ExData\emma.asx'),nil, SW_Hide); end; |
Grundsätzlich funktioniert der Code.
(Kurzerklärung: Es wird zunächst unterschieden, ob im TreeView eine Playlist (Hauptknoten) oder nur ein Eintrag in einer Playlist (Unterknoten) gewählt wurde. Handelt es sich um eine Playlist wird diese ermittelt und aus dieser dann die Einträge in die Datei geschrieben. Handelt es sich "nur" um einen Playlisteintrag wird dieser alleine in die Datei geschrieben. Die erzeugte Datei wird anschließend an den Player übergeben und abgespielt.
Alle Playlisten befinden sich in einem Stack (Zeigerkette), dessen Einträge u.a. einen weiteren Zeiger auf ein weiteres Stack beinhaltet, in dem die eigentlichen Einträge der Playlist gespeichert werden.)
Es gibt allerdings zwei Probleme:
1.) PChar(AppPfad+'ExData\emma.asx')
Enthält AppPfad (Typ String und enthält den Pfad zum Root-Anwendungsverzeichnis) ein Leerzeichen (ineinem Verzeichnisnamen), wird zwar die Datei erzeugt, auch wird der Mediaplayer gestartet, dieser bricht aber mit einer Fehlermeldung ab, dass die Playlist beschädigt oder in einem unbekannten Format vorliegt.
2.) Pfad zum Player
Bei mir auf dem rechner ist dieser oben angegebene Pfad richtig, nur wird das ja nicht auf jedem rechner so sein. WO bekomme ich denn Informationen über die Position des WMPs her? In der Registry hab ich nichts gefunden (kein Wunder) und im sonstigen Internet bekam ich auch keine (richtigen) Info's.
Vielen Dank für eure Hilfen
Oliver