Autor Beitrag
Odeng
Hält's aus hier
Beiträge: 14

Win XP
Delphi, Perl, VB, C++
BeitragVerfasst: So 05.11.06 22:05 
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.

ausblenden volle Höhe Delphi-Quelltext
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     // Wenn ein Hauotknoten ausgewählt wurde....
  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

_________________
__________________
Es gibt nichts Gutes, außer man tut es :-)