unit test_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ShellApi, mmsystem;
type
TForm1 =
class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure MediaPlayer1Notify(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
Procedure AddToPlayList(s:
string);
procedure PlayFile(songNumber: integer);
// deklaration von playfile ändern, hier das 1. mal
Procedure WMDropFiles (
Var aMsg: tMessage);
message WM_DROPFILES;
end;
var
Form1: TForm1;
playList: TStringList;
CurrentSong: integer = -1;
// neue globale variable um uns das aktuelle lied zu merken
implementation
{$R *.dfm}
Procedure TForm1.WMDropFiles (
Var aMsg: tMessage);
Var
Idx, Size, FileCount: Integer;
Filename: pChar;
Begin
Inherited;
FileCount := DragQueryFile (aMsg.WParam, $FFFFFFFF,
nil, 255);
For Idx := 0
To FileCount -1
Do Begin
Size := DragQueryFile (aMsg.WParam, Idx,
nil, 0) + 1;
Filename := StrAlloc (Size);
If DragQueryFile (aMsg.WParam, Idx, Filename, Size) = 1
Then { nothing }
else AddToPlayList (pChar (Filename));
StrDispose (Filename);
End;
DragFinish (aMsg.WParam);
End;
Procedure TForm1.AddToPlayList(s:
string);
begin
playList.Add(s);
ListBox1.Items.Add(extractfilename(s));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mediaplayer1.FileName := '
C:\Users\Dave\Desktop\testut\01 Die, All Right!.wma';
mediaplayer1.Open;
mediaplayer1.play;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles (
Handle, True);
// drag und drop akzeptieren
playList := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
playList.Free;
end;
procedure TForm1.PlayFile(songNumber: integer);
// deklaration von playfile ändern, hier das 2. mal
begin
if fileexists(Playlist.Strings[songNumber])
then begin
CurrentSong := songNumber;
mediaplayer1.Close;
mediaplayer1.FileName := Playlist.Strings[songNumber];
mediaplayer1.Open;
mediaplayer1.play;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
for i := 0
to listbox1.Count
do
if listbox1.Selected[i]
then break;
{ nun haben wir in i die nummer der selektierten Zeile
da Listbox und Playlist eine identische Reihe der Einträge und gleiche Sortierung
vorweisen, können wir mit dem erhaltenen index den richtigen Eintrag der Playlist
auslesen. }
PlayFile(i);
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
// unser neues Notify-Event
begin
if mediaplayer1.Position = mediaplayer1.Length
then begin
// position = gesamtlänge, bedeutet dass das lied beendet wurde
Listbox1.Selected[currentSong] := false;
// das gerade gespielte lied de-selektieren
inc(currentSong);
// aktuellen song um eines erhöhen
if currentSong < Playlist.Count -1
then { alles passt, songindex im rahmen}
else currentsong := 0;
{ende der liste erreicht, setze aktuelles lied auf anfang}
PlayFile(CurrentSong);
Listbox1.Selected[currentSong] := true;
// das aktuelle lied selektieren
end;
end;
end.