Hallo,
erstmal entschuldigung das ich diesen alten Thread ausgrabe, aber ich habe eine problem mit dem im Tutorial beschriebenen MediaPlayer. (Es ist mein erstes projekt, deswegen möglich das sich fehler eingeschlichen haben).
Und zwar:
Wenn ich den Quellcode aus dem tutorial übernehme, springt das programm nach beendigung eines Liedes
immer zuerst zu Lied Nr. 1 und geht dann erst der reihe nach nach unten. Wenn ich so umschreibe, dass er der Reihe nach nahc unten geht, springt er nach dem letzten Lied nicht mehr zum ersten. Wenn ich das wiederrum fixe, springt er nach dem letzten immer zum 2. Und dann nirgentwohin mehr.
Pls Help.
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: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer, ShellApi;
type TForm1 = class(TForm) Media: TMediaPlayer; ListBox1: TListBox; ButtonSave: TButton; ButtonLoad: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure MediaNotify(Sender: TObject); procedure ButtonSaveClick(Sender: TObject); procedure ButtonLoadClick(Sender: TObject); procedure ListBox1Click(Sender: TObject);
private { Private-Deklarationen } public { Public-Deklarationen } Procedure AddToPlayList(s:string); Procedure PlayFile(songNumber: integer); Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES; end;
var Form1: TForm1; playList: TStringList; (*Globale Variable die Für die Playlist benötgt wird*) CurrentSong: integer = -1; (*merkt sich aktuelles Lied*) Root : String = 'ExtractFilePath(ParamStr( 0 )';
implementation
{$R *.dfm} //----------------------------------------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin playList := TStringList.Create; DragAcceptFiles (Handle, True); end; //----------------------------------------------------------------------------- procedure TForm1.FormDestroy(Sender: TObject); begin playList.Free; end; //----------------------------------------------------------------------------- Procedure TForm1.AddToPlayList(s:string); begin playList.Add(s); ListBox1.Items.Add(extractfilename(s)); end; //------------------------------------------------------------------------------ procedure TForm1.ListBox1Click(Sender: TObject); var i : integer; begin for i := 0 to listbox1.Itemindex do PlayFile(i); end; //----------------------------------------------------------------------------- procedure TForm1.PlayFile(songNumber: integer); begin if fileexists(Playlist.Strings[songNumber]) then begin media.Close; media.FileName := Playlist.Strings[songNumber]; media.Open; media.play; end; end; //----------------------------------------------------------------------------- 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)); // hier wird das jeweilige file unserer Prozedur AddToPlaylist überwiesen. StrDispose (Filename); End; DragFinish (aMsg.WParam); End; //----------------------------------------------------------------------------- procedure TForm1.MediaNotify(Sender: TObject); begin currentSong := ListBox1.ItemIndex; if media.Position = media.Length then begin if not currentSong < ListBox1.Count -1 then begin currentSong := 0; Playfile(CurrentSong); ListBox1.Selected[currentSong] := true; end else Listbox1.Selected[currentSong] := false; inc(currentSong); ListBox1.Selected[currentSong] := true; Playfile(Currentsong); end; end; //----------------------------------------------------------------------------- procedure TForm1.ButtonSaveClick(Sender: TObject); begin TRY Playlist.SaveToFile(root + 'Playlist.lst'); ListBox1.Items.SaveToFile(root + 'Playlist_show.lst'); showmessage('Playlist erfolgreich gespeichert'); EXCEPT TRY filecreate(root + 'Playlist.lst'); filecreate(root + 'Playlist_show.lst'); Playlist.SaveToFile(root + 'Playlist.lst'); ListBox1.Items.SaveToFile(root + 'Playlist_show.lst'); EXCEPT showmessage('ERROR: DATEI KONNTE NICHT GESPEICHERT WERDEN'); end; end; end; //----------------------------------------------------------------------------- procedure TForm1.ButtonLoadClick(Sender: TObject); begin If fileexists(root + 'Playlist.lst') then begin TRY Playlist.LoadFromFile(root + 'Playlist.lst'); ListBox1.Items.LoadFromFile(root + 'Playlist_show.lst'); showmessage('Playlist erfolgreich geladen'); EXCEPT showmessage('ERROR: LADEN NICHT MÖGLICH'); end; end; end;
end. |
Es handelt sich um die onNotify-Prozedur. (Zeile 92, folgende)
//edit: Ich hab es mit Turbo Delphi 2006 geschrieben.
/edit: habs nach langem rumprobieren selbst gelöst