Entwickler-Ecke
Delphi Tutorials - TMediaPlayer for Dummies
retnyg - Mi 11.05.05 22:47
Titel: TMediaPlayer for Dummies
http://www.krazz.net/retnyg/tut/mptut1.htm
ein kleines tutorial für den TMediaplayer.
fragen dazu hier posten, bei bedarf/interesse werde ich auch demonstrieren wie man z.b. durch eine playlist iteriert.
pontoffeltier - So 05.06.05 01:49
mach das mal
wär nett wenn du mir den link dann per mail oda icq schiggn könntest
[edit: persönliche daten entfernt]
danke
xxx244 - Mo 06.06.05 18:53
HAllo!
Ich würde es gut finden, wenn du noch weiter schreibst.
Mich würd das mit der Playlist mal interressieren.
Adrian
retnyg - Di 07.06.05 15:29
Neue Version Online:
- Arbeiten mit einer Playlist
- Arbeiten mit dem OnNotify-Event zur Erkennung eines Liedendes.
xxx244 - Di 07.06.05 17:36
Also ich find da keine neue Version!
Vielleicht ein falscher Link!
//EDIT:Geht jetzt!Link wurd irgendwie bei erstemal nicht mitgeladen
Aber als ich den Frame neugeladen hab gings:
retnyg - Di 07.06.05 17:39
doch...du musst allerdings unten auf der seite den link...weiter zu kapitel 2 anklicken.
und falls das da unten nicht steht, musst du bei deinem browser entweder auf aktualisieren klicken, nen rechtsklick auf die seite machen und this frame->reload oder den cache bzw offlineinhalte leeren (unter einstellungen)
WeBsPaCe - Di 07.06.05 17:40
xxx244 hat folgendes geschrieben: |
Also ich find da keine neue Version!
Vielleicht ein falscher Link! |
Ganz unten findest du immer einen Link zum neuen Kapitel... ;)
//EDIT: Mist... :motz: Zu spät... ;)
Fisheye - So 12.06.05 18:55
Ich habe ein problem mit dem Mp3 Player.
Ich hab das Tutorial durch die Kompillierung geht auch ohne Probleme. Nur wenn es in der Playlist zum nächsten weiterspringt stürzt der Mp3 Player beim 3 weiterspringen immer ab :cry:
//Edit : Ich habe meinen neuen Quellcode hier reinkpiert. Hab inzwischen einen Lautsärken regeler eingebaut, der tadellos funktioniert :wink: Die Fehler sind leider immer noch da
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: 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: 145: 146:
| unit Unit3_form3;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer, ShellApi, ComCtrls, mmsystem;
type TForm3 = class(TForm) MediaPlayer1: TMediaPlayer; ListBox1: TListBox; TrackBar1: TTrackBar; procedure TrackBar1Change(Sender: TObject); procedure ListBox1DblClick(Sender: TObject); procedure MediaPlayer1Notify(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private public Procedure AddToPlaylist(s:String); Procedure PlayFile(SongNumber:Integer); Procedure WMDropFiles (Var aMsg: tMessage); message WM_DROPFILES; end;
var Form3: TForm3; PlayList : TStringList; CurrentSong : Integer = -1;
implementation
function SetWaveVolume(const AVolume: DWord) : boolean; var WaveOutCaps : TWAVEOUTCAPS; begin Result := False; if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, sizeof(WaveOutCaps)) = MMSYSERR_NOERROR then if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then Result := WaveOutSetVolume(-1, AVolume) = MMSYSERR_NOERROR; end;
function GetWaveVolume(var LVol:DWord; var RVol:DWord) : Boolean; var WaveOutCaps : TWAVEOUTCAPS; Volume : DWord; begin Result := false; if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then begin Result := WaveOutGetVolume(-1, @Volume) = MMSYSERR_NOERROR; LVol := LoWord(Volume); RVol := HiWord(Volume); end; end;
Procedure TForm3.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 Tform3.AddToPlaylist(s:string); begin PlayList.Add(s); ListBox1.Items.Add(extractfilename(s)); end;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject); begin DragAcceptFiles (Handle, True); PlayList := TStringList.Create; end;
procedure TForm3.FormDestroy(Sender: TObject); begin PlayList.Free; end;
Procedure Tform3.PlayFile(Songnumber:Integer); begin If FiLeExists(PlayList.Strings[SongNumber]) then begin CurrentSong := SongNumber; MediaPlayer1.Close; MediaPlayer1.FileName := PlayList.Strings[SongNumber]; MediaPlayer1.Open; MediaPlayer1.Play; end; end;
procedure TForm3.MediaPlayer1Notify(Sender: TObject); begin if mediaplayer1.Position = mediaplayer1.Length then begin Listbox1.Selected[currentSong] := false; inc(currentSong); if currentSong < Playlist.Count then else currentsong := 0; PlayFile(CurrentSong); Listbox1.Selected[currentSong] := true; end; end;
procedure TForm3.ListBox1DblClick(Sender: TObject); var i : integer; begin for i := 0 to ListBox1.Count - 1 do if ListBox1.Selected[i] then Break; PlayFile(i); end;
procedure TForm3.TrackBar1Change(Sender: TObject); begin SetWaveVolume (MakeLong((65535 div 100) * Trackbar1.Position, (65535 div 100) * Trackbar1.Position)) ; end;
end. |
Ich hoffe ihr könnt mir helfen
retnyg - Mo 13.06.05 03:14
Fisheye hat folgendes geschrieben: |
Nur wenn es in der Playlist zum nächsten weiterspringt stürzt der Mp3 Player beim 3 weiterspringen immer ab :cry:
Ich hoffe ihr könnt mir helfen |
hmm ich hab das mal kompiliert (nur form3 in form1 geändert) - funktioniert tadellos bei mir
versuche mal einen breakpoint in das notify-event und dann mit einzelschritt ( F7 ) durchgehen und immer die variablen kontrollieren. welche delphi-version verwendest du ?
Fisheye - Mo 13.06.05 16:13
z.Z. Benutze Ích die Delphi 2005 Trial
Ich habe jetzt mal in allen Prozeduren breakpunkte gesetzt.
Dabei tratem folgende fehler auf
Quelltext
1: 2: 3: 4:
| Source Breakpoint at $00457E60: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 146. Process Mp3player.exe (3012) Source Breakpoint at $00457C6C: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 92. Process Mp3player.exe (3012) Source Breakpoint at $00457C7E: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 94. Process Mp3player.exe (3012) Source Breakpoint at $00457C8F: C:\Dokumente und Einstellungen\Fish\Eigene Dateien\Borland Studio Projects\Mp3player\Unit3_form3.pas line 95. Process Mp3player.exe (3012) |
Fisheye
retnyg - Mo 13.06.05 22:14
das sagt mir ziemlich wenig, bei dem code oben entsprechen die codezeilen dem Tform1.create, bzw dem end. ganz am schluss ^^
bei welcher code-zeile hängt er sich auf ?
Ironwulf - Mi 17.08.05 19:22
Ich hab das tutorial auch mal gemacht nur kommt dann bei mir der zeile
Delphi-Quelltext
1:
| if currentSong < Playlist.Count then |
der Fehler das das Maximum der Liste überschritten wird, kann mir bitte jemand sagen woran das liegt?
mmh ich verwend delphi3 Pro
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
WeBsPaCe - Mi 17.08.05 20:11
Ohne jetzt das Tutorial wirklich durchgemacht zu haben: Probier mal
Delphi-Quelltext
1:
| if currentSong < Playlist.Count-1 then |
F34r0fTh3D4rk - Mi 17.08.05 20:15
tutorial finde ich auch sehr schön, fehlte irgendwie noch ne lautstärke regelung, das versuch ich schon ewig hinzubekommen, aber irgendwie klappts nie :roll:
F34r0fTh3D4rk - Mi 17.08.05 20:23
so in etwa:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Procedure LowerVol(Percent: Integer); Var i: Integer; Begin If (Percent <= 100) And (Percent >= 1) Then For i := 1 To (Percent Div 2) + 1 Do SendMessage(Application.Handle, WM_Command, 40059, 0); End; Procedure RaiseVol(Percent: Integer); Var i: Integer; Begin If (Percent <= 100) And (Percent >= 1) Then For i := 1 To (Percent Div 2) + 1 Do SendMessage(Application.Handle, WM_Command, 40058, 0); End; |
? werde ich mal testen ;)
edit: tut sich nischt :roll:
Ironwulf - Mi 17.08.05 20:24
argh, bin beim kopiern in der zeile verrutscht sry, dort komm der fehler
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
F34r0fTh3D4rk - Mi 17.08.05 20:32
ich arbeite auch schon seit längerem an meinem mp3 player, vielleicht kannst du ja was mit meiner notify prozedur anfangen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TMainForm.MPlayerNotify(Sender: TObject); var track: integer; begin if mplayer.Position = mplayer.Length then begin track := current; if not random_play then begin inc(track); if track > (high(MP3s) - 1) then track := 0; end else track := random(high(MP3s) - 1); Play(track); end; end; |
retnyg - Mi 17.08.05 20:43
F34r0fTh3D4rk hat folgendes geschrieben: |
so in etwa:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Procedure LowerVol(Percent: Integer); Var i: Integer; Begin If (Percent <= 100) And (Percent >= 1) Then For i := 1 To (Percent Div 2) + 1 Do SendMessage(Application.Handle, WM_Command, 40059, 0); End; Procedure RaiseVol(Percent: Integer); Var i: Integer; Begin If (Percent <= 100) And (Percent >= 1) Then For i := 1 To (Percent Div 2) + 1 Do SendMessage(Application.Handle, WM_Command, 40058, 0); End; |
? werde ich mal testen ;)
edit: tut sich nischt :roll: |
is klar, nö ? siehst du irgendwo einen code der die lautstärke beeinflussen soll ?
ich sehe code der eine windowmessage an ein programm abschickt.
das is der code um bei winamp die lautstärke zu verstellen :roll:
das das in deinem programm nix bewirkt, ist also logisch
F34r0fTh3D4rk - Mi 17.08.05 21:06
dachte dass des auch hier funzt, oder ist das winamp spezifisch ?
hast du was anderes auf lager ?
F34r0fTh3D4rk - Do 18.08.05 15:33
dabei wird ja die systemlautstärke verändert, da kann man bissl was um schreiben, aber ist es das gleiche, wie zb bei winamp ?
angenommen, ich start meinen mp3 player und den windows media player, lasse beide abspielen und mache meinen leiser, dann sollte eigentlich der wmp immer noch so laut sein wie vorher, sonst ergibt das für mich keinen sinn :roll:
Ironwulf - Do 18.08.05 15:48
sry das ich euch grad unterbrech,
ich hab das tut mal mit delphi 3 probiert und mit delphi 6
in delphi 3 kommt ein fehler das die liste das maximum überschreitet, in der 6 nicht
worin liegt da der unterschied, denn das einzigste was sich im code ändert ist das delphi3 nicht mit der variants uses anfang kann und man listbox1.count in listbox1.items.count ändern müsste oder irr ich mich da ein wenig?
F34r0fTh3D4rk - Do 18.08.05 16:05
kannst du so lassen, aber es müsste count - 1 sein denke ich
retnyg - Do 18.08.05 16:17
nein, für delphi 5 und höher stimmt das schon mit count
die abrage ist ja
if < count
möglicherweise fängt aber bei delphi 3 die indizierung bei der listbox mit 1 und nicht null an, oder count liefert ein anderes ergebnis als bei neueren delphis ?
(das solltest du überprüfen, ich habe kein delphi 3)
der fehler kann eigentlich nur hier auftreten:
Delphi-Quelltext
1:
| Listbox1.Selected[currentSong] := false; |
falls currentsong einen index hätte der grösser als die anzahl der einträge hätte.
X-0tic - Sa 17.09.05 13:34
Schade, mit *.pls-Dateien scheint das ja nicht so wirklich zu funzen oder doch? :x
retnyg - Sa 17.09.05 15:03
X-0tic hat folgendes geschrieben: |
Schade, mit *.pls-Dateien scheint das ja nicht so wirklich zu funzen oder doch? :x |
meinst du damit dass man sich nicht zu einem shoutcast stream verbinden kann ?
oder hast du probleme bei der implementierung des pls-formats ? :gruebel:
X-0tic - Sa 17.09.05 20:07
Ja, ich meine, dass es damit wohl nicht möglich ist zu einem ShoutCastServer zu verbinden oder?
retnyg - Sa 17.09.05 23:03
X-0tic hat folgendes geschrieben: |
Ja, ich meine, dass es damit wohl nicht möglich ist zu einem ShoutCastServer zu verbinden oder? |
nein, das ist mit dem TMediaPlayer leider nicht möglich. der TMediaPlayer kann auch keine dateien öffnen, die gerade von einem anderen Programm geschrieben werden (wie z.b. mein shoutcast-ripper
MP3PROXY).
es geht aber mit den windows acm subsystem, allerdings muss zuerst der acm mp3 codec von fraunhofer institut installiert sein (ist bei WMP 10 dabei).
eine unit dafür findest du auf
http://www.thaddy.com
X-0tic - So 18.09.05 01:06
Irgendwie UfFfF.... Danke.
MKX - Do 29.09.05 20:53
Das Tutorial hat mir sehr geholfen!
Aber wenn der Mediaplayer den nächsten Eintrag der Playliste abspielen soll endet das mit der Exception: Der Index der Liste überschreitet das Maximum(0) :evil: Was kann ich machen, damit das Programm funktioniert?
[Edit]Der selbe fehler wie bei allen anderen. Was kann man trotz Delphi3 machen?
Krumnix - Do 13.10.05 16:30
So, hier mal was für die Lautstärke.
!!Ändert die Lautstärke über WAV, was WinAmp auch macht. Deswegen meint man, das der
Rest vom System weiterhin gleichlaut bleibt, weil man da ja ggf. keine Sounds über WAV abspielt. Der Player hier arbeitet aber über WAV.!!
Liefert die im System eingestellte Lautstärke von WAV zurück:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function TForm1.GetWaveVolume(var GVolume: word): Boolean; var WaveOutCaps: TWAVEOUTCAPS; Volume: DWORD; begin Result := False; if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then begin Result := WaveOutGetVolume(WAVE_MAPPER, @Volume) = MMSYSERR_NOERROR; GVolume := LoWord(Volume); end; end; |
Setzt die Lautstärke von WAV (ACHTUNG: nur bis max. 65535!!)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function TForm1.SetWaveVolume(const AVolume: DWORD): Boolean; var WaveOutCaps: TWAVEOUTCAPS; begin Result := False; if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR; end; |
Aufruf der Funktionen:
Delphi-Quelltext
1: 2: 3: 4:
| ScrollBar1.Min := 0; ScrollBar1.Max := 65535 if GetWaveVolume(Lautstaerke) then ScrollBar1.Position := Lautstaerke; |
Delphi-Quelltext
1:
| SetWaveVolume(ScrollBar1.Position); |
retnyg - Do 13.10.05 16:41
uses mmsystem nicht vergessen.
Fisheye - So 08.01.06 05:52
Ich wolllte das Programm nochmal unter Delphi 2005 basteln.
// Edit : Hat sich erledigt :)
Ich habe ein Problem mit der Drag und Drop funkiton.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| 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; |
Die Procedure steht unter Public, Drag und Drop ist akzeptuert und die ShellApi klausel ist auch drin.
Ich bekommt folgende Fehler
[Fehler] Unit1.pas(42): E2410 Unsichere Zeigervariablen, Parameter oder Konstanten sind nur in unsicheren Prozeduren zulässig
[Fehler] Unit1.pas(48): E2003 Undefinierter Bezeichner: 'StrAlloc'
[Fehler] Unit1.pas(49): E2010 Inkompatible Typen: 'StringBuilder' und 'PWideChar'
[Fehler] Unit1.pas(50): E2010 Inkompatible Typen: 'string' und 'PWideChar'
Wodran könnt das liegen ?
death-adders - Sa 14.01.06 12:00
Hi @ all, ich habe das wie im tutorial beschrieben gemacht, is ja auch ganz simpel, so sieht mein quelltext aus:
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:
| 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); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin mediaplayer1.FileName := 'C:\mugge'; mediaplayer1.Open; end;
end. |
Aber mein klick auf button 1 kommt folgende Fehlermeldung:
papa_s - So 22.01.06 22:36
Titel: Den Titel Stoppen
Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3
Wäre schön, wenn mir jemand einfach helfen könnte !
mfg
papa_s
retnyg - Mi 25.01.06 11:23
Titel: Re: Den Titel Stoppen
@death-adders: 'C:\mugge' ist ein ordner oder ? du musst einen gültigen DATEInamen übergeben, der mit .mp3 endet
papa_s hat folgendes geschrieben: |
Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3
Wäre schön, wenn mir jemand einfach helfen könnte !
mfg
papa_s |
Mediaplayer1.stop;
übrigens: wenn du mediaplayer1. schreibst und kurz wartest, klappt eine liste der möglichen Befehle auf, die du mit den cursortasten durchschauen kannst.
death-adders - Fr 27.01.06 16:03
Titel: Re: Den Titel Stoppen
retnyg hat folgendes geschrieben: |
@death-adders: 'C:\mugge' ist ein ordner oder ? du musst einen gültigen DATEInamen übergeben, der mit .mp3 endet
papa_s hat folgendes geschrieben: | Hallo !
Erstmal Danke für das Tutorial ! Bin Newbie im Programmieren, aber das war genau das was ich suchte.
Jetzt meine Frage : Wenn der Button CLick den Titel startet, wie kann ich den dann per weiterem Klick auf den Button Stoppen ? Also :
1. Klick Start *.mp3
2. Klick Stopp *.mp3
Wäre schön, wenn mir jemand einfach helfen könnte !
mfg
papa_s |
Mediaplayer1.stop;
übrigens: wenn du mediaplayer1. schreibst und kurz wartest, klappt eine liste der möglichen Befehle auf, die du mit den cursortasten durchschauen kannst. |
OK, es hat gefuntzt, das mit dem pfad war schon richtig, es fehlte nur das ".mp3" Aber andere Formate unterstützt der mediaplayer nicht?
Silence - Mi 22.03.06 18:18
Hi, ich hab ein problem mit der playliste und zwar wenn ich auf eine datei die da drinnen ist klicke dann passiert rein garnichts. ich habs genau so gemacht wie es im tutorial stand
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: 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:
| 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
{$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 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 := 'F:\Musik\bloodhound gang\bloodhound gang - your pretty when im drunk.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. |
wo liegt denn da der fehler?
Death666Metal - Fr 26.05.06 21:59
Titel: Automatisches Abspielen einer MP3 beim Öffnen von Programm?
Hi!
Ma ne Frage. Wie schreibt man das automatisch beim Öffnen der "programm.exe" eine MP3-Datein abgespielt wird?
Muss man da im Objekt-Inspektor bei der TForm1 irgendwo etwas eingeben oder also procedure oder???
Ich hoffe ihr versteht was ich meine....
Jetzt schon RIESEN THX!!!!!
Exodia-Rübe - Mi 18.10.06 10:08
also, zunächst möchte ich loswerden, dass mir dieses tutorial sehr geholfen hat.
Allerdings halt ich es für sehr nützlich, wenn man die zeit einstellen, also vor- oder zurückspulen
kann (etwa über einen schieberegler wie bei winamp oder so).
weiß jemand, wie man das macht? ich habe leider keine ahnung...
ich danke allen, die ideen habe und posten.
mfg Exodia-Rübe
(ein wenig quellcode wäre vielleicht auch nicht verkehrt^^)
Wegi - Di 20.03.07 17:25
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.
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: 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 :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!