|
|
|
|
| |
|
|
|
|
|
|
|
|
|
Version 0.2
|
|
Dieses kleine Tutorial soll einem kurz zeigen, wie man den
Mediaplayer in seinem Programm einsetzen kann.
Kapitel 2: Eine eigene Playliste
Damit unser Programm in der Lage ist, mehr als ein Lied
abzuspielen, werden wir ihm eine einfache Playliste verpassen.
Dafür werden wir eine TStringList verwenden, ein von Delphi
bereitgestelltes Objekt mit dem leicht lange Listen verwalten
kann.
var PlayList: TStringList; |
Da es sich um eine Delphi-Klasse handelt, müssen wir die Liste selber
erstellen und selber wieder freigeben.
PlayList:= TStringList.Create;
PlayList.Free; |
Dafür werden wir die beiden Ereignis-prozeduren
OnCreate und OnDestroy unseres Formulars verwenden:
wir machen je einen Doppelklick auf das OnCreate und OnDestroy des
Formulars im Objektinspektor.
Delphi erzeugt uns nun automatisch den Code-Header für die
beiden Prozeduren und weist diese den jeweiligen ereignisen zu.
Nun werden wir im OnCreate den Code für die Erstellung und ins
OnDestroy den Code für die Freigabe einfügen, sowie bei den
globalen Variablen die PlayList deklarieren.
Anschliessend sollte unser Code so aussehen:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer;
type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
public
end;
var
Form1: TForm1;
playList: TStringList;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
mediaplayer1.FileName := 'C:\Inetpub\wwwroot\dirty.mp3';
mediaplayer1.Open;
mediaplayer1.play;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
playList := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
playList.Free;
end;
end.
|
Nun brauchen wir noch eine Prozedur AddToPlaylist, mit der wir
der Playliste neue Einträge hinzufügen können:
Procedure TForm1.AddToPlayList(s:string);
begin
playList.Add(s);
end;
|
Wir werden diese Prozedur der Form1 zuweisen, damit wir später
reibungslos auf deren Mitglieder zugreifen können, weswegen wir
im Interface-Teil diese Prozedur bei der Form bekannt machen:
private
public
Procedure AddToPlayList(s:string);
end;
|
Soweit so gut. Die Dateinamen der Lieder würden nun mit dieser
Prozedur an unsere Playliste angehängt werden.
Nun müssen wir uns noch um folgende Punkte kümmern:
- Playliste grafisch darstellen
- Playlisteintrag abspielen
- Playlisteinträge hinzufügen
Zur grafischen Darstellung werden wir eine Listbox verwenden.
Anklicken und auf unser Formular klicken, Delphi fügt die
Listbox dort für uns ein.
Wir werden noch den button etwas wegschieben, und die Elemente in
ihrer Grösse und Position verschieben. Danach sollte es ca. so
aussehen:

Wir fügen unserer AddToPlaylist-Prozedur noch einen Eintrag
hinzu, damit man die Playlist-Einträge auch sehen kann:
Procedure TForm1.AddToPlayList(s:string);
begin
playList.Add(s);
ListBox1.Items.Add(s);
end;
|
Nun kümmern wir uns um das abspielen eines Playlist-Eintrag.
Wir verwenden hierfür das OnClick-Ereignis der Listbox.
Also in den Objektinspektor, Listbox1 auswählen, und einen
Doppelklick auf OnClick machen. Zusätzlich werden wir gleich noch
eine Prozedur PlayFile einrichten:
procedure TForm1.PlayFile(s:string);
begin
mediaplayer1.Close;
mediaplayer1.FileName := s;
mediaplayer1.Open;
mediaplayer1.play;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to listbox1.Count - 1 do
if listbox1.Selected[i] then break;
if fileexists(Playlist.Strings[i]) then PlayFile(Playlist.Strings[i]);
end;
|
Die Prozedur PlayFile ist wieder Mitglied von TFOrm1. Was heisst
das für uns ?
Richtig, bei den Public-Deklarationen muss die Prozedur wieder
bekannt gemacht werden. Wir kopieren also das procedure
TForm1.PlayFile(s :string);
in den public teil, und löschen das TForm1. dort raus, damit es
so aussieht:
public
Procedure AddToPlayList(s:string);
procedure PlayFile(s:string);
|
Sehr gut, unser MP3-Player Gerüst ist nun fertig und bereit,
auf klick mp3s abzuspielen !
Wir müssen ihm nur noch die Möglichkeit geben, Mp3s
hinzuzufügen.
Ich werde hierfür Drag & Drop verwenden. Man kann es aber
genau sogut mit einem TOpenDialog oder so machen, oder mit einer
ShellListBox usw...
Um das Drag & Drop zu verwenden, benutze ich diese Prozedur,
die ich mal im swissdelphicenter.ch gefunden habe:
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
else AddToPlayList (pChar (Filename)); // hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen.
StrDispose (Filename);
End;
DragFinish (aMsg.WParam);
End;
|
damit wir diese Prozedur nutzen können, sind noch ein paar kleine
änderungen notwendig, wir müssen
- die unit ShellApi bei der uses Klausel mitangeben
- die Prozedur WMDropFiles bei TForm1 bekanntmachen und einen
Handler für die Windowsmessage WM_DROPFILES einrichten
- Beim Start unseres Programmes bekanntgeben, dass es Drag
& Drop Messages akzeptiert.
hört sich schwieriger an als es ist:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ShellApi;
|
public
Procedure AddToPlayList(s:string);
procedure PlayFile(s:string);
Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES;
end;
|
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle, True);
playList := TStringList.Create;
end;
|
das war es schon, wir können das programm nun starten und ein
paar mp3s auf unser formular ziehen:

ein klick auf einen Eintrag und er spielt ;-)
hier nochmal der komplette quellcode für diejenigen, die nicht
mitgekommen sind:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MPlayer, ShellApi;
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);
private
public
Procedure AddToPlayList(s:string);
procedure PlayFile(s:string);
Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES;
end;
var
Form1: TForm1;
playList: TStringList;
implementation
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
else AddToPlayList (pChar (Filename));
StrDispose (Filename);
End;
DragFinish (aMsg.WParam);
End;
Procedure TForm1.AddToPlayList(s:string);
begin
playList.Add(s);
ListBox1.Items.Add(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mediaplayer1.FileName := 'C:\Inetpub\wwwroot\dirty.mp3';
mediaplayer1.Open;
mediaplayer1.play;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle, True);
playList := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
playList.Free;
end;
procedure TForm1.PlayFile(s:string);
begin
mediaplayer1.Close;
mediaplayer1.FileName := s;
mediaplayer1.Open;
mediaplayer1.play;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to listbox1.Count - 1 do
if listbox1.Selected[i] then break;
if fileexists(Playlist.Strings[i]) then PlayFile(Playlist.Strings[i]);
end;
end.
|
weiter zu kapitel 3: Herausfinden, wann
ein Lied zu Ende ist
zurück zum start
|
|
|
|