Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Mediaplayer Problem: Lied mit play abspielen, nicht mit clic (https://www.delphipraxis.net/105316-mediaplayer-problem-lied-mit-play-abspielen-nicht-mit-clic.html)

Zitrone.Saft 19. Dez 2007 18:15


Mediaplayer Problem: Lied mit play abspielen, nicht mit clic
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

Hier ist mal wieder einer mit seinem Player unterwegs *gg*.

Undzwar habe ich ein Problem:

Ich habe mir einen player gemacht und der funktioniert soweit auch,ABER...

...Er soll das angeklickte Lied in der Playlist mit dem PlayButton abspielen und nicht per click
...Er soll eine Lautsprecher Balance trackbar bekommen
...Er soll eine Zeitleist für das abgespielte lied belommen
...Er soll einen Button bekommen, der die Playlist löscht(Habe einen aber er funktioniert nicht so wie er soll)

Hier ist erstmal der Quelltext:

Delphi-Quellcode:
unit LukasMediaPlayer;

interface
  //=============Uses==========================================================
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ShellApi, ComCtrls, mmsystem, ExtCtrls;
 //=============Konstanten=====================================================
  const
  MCI_SETAUDIO = $0873;
  MCI_DGV_SETAUDIO_VOLUME = $4002;
  MCI_DGV_SETAUDIO_ITEM = $00800000;
  MCI_DGV_SETAUDIO_VALUE = $01000000;
  MCI_DGV_STATUS_VOLUME = $4019;
 //==============typen=========================================================

  type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    MediaPlayer1: TMediaPlayer;
    Button4: TButton;
    TrackBar1: TTrackBar;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    TrackBar2: TTrackBar;
    Button6: TButton;
    Button7: TButton;
    Button5: TButton;
    Button8: TButton;
   
//============Normale Proceduren===============================================
    procedure TrackBar1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);
    procedure Button2Click(Sender: TObject); //Hilfe
    procedure Button3Click(Sender: TObject); //About
    procedure Button4Click(Sender: TObject); //Playlist Löschen
    procedure Button6Click(Sender: TObject); //Laufwerk rdy?
    procedure Button7Click(Sender: TObject); //Laufwerk-Typ
    procedure Button8Click(Sender: TObject); //öffnen
    procedure Button5Click(Sender: TObject); //schliessen
//===========Variablen=========================================================

  var

//==========Privat Proceduren==================================================
  private
    { Private-Deklarationen }
 //=========Public Proceduren==================================================

  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;
  CurrentSong: integer = +1; // neue globale variable um uns das aktuelle lied zu merken
//============Implementation==================================================
implementation

{$R *.dfm}

//============Volume Quelltext=================================================
type
  MCI_DGV_SETAUDIO_PARMS = record
    dwCallback: DWORD;
    dwItem: DWORD;
    dwValue: DWORD;
    dwOver: DWORD;
    lpstrAlgorithm: PChar;
    lpstrQuality: PChar;
  end;

type
  MCI_STATUS_PARMS = record
    dwCallback: DWORD;
    dwReturn: DWORD;
    dwItem: DWORD;
    dwTrack: DWORD;
  end;

procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
  { Volume: 0 - 1000 }
var
  p: MCI_DGV_SETAUDIO_PARMS;
begin
  { Volume: 0 - 1000 }
  p.dwCallback := 0;
  p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
  p.dwValue := Volume;
  p.dwOver := 0;
  p.lpstrAlgorithm := nil;
  p.lpstrQuality := nil;
  mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
    MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));
end;

function GetMPVolume(MP: TMediaPlayer): Integer;
var
  p: MCI_STATUS_PARMS;
begin
  p.dwCallback := 0;
  p.dwItem := MCI_DGV_STATUS_VOLUME;
  mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
  Result := p.dwReturn;
  { Volume: 0 - 1000 }
end;

// Example, Beispiel:


//=============Song in Playlist ziehen=========================================
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;
//=============Hilfe===========================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Hilfe, bitte auf OK klicken!');
ShowMessage('1.Lied/Video in das weisse Feld ziehen!(MUSS MP3/WMA/WMV - Format haben. Weiter auf OK.');
ShowMessage('2.Datei anklicken, dass sie blau makiert ist und auf play klicken, um sie abzuspielen! Weiter auf OK.');
ShowMessage('Zum Beenden der Hilfe bitte auf OK klicken.');
end;
//==============About==========================================================
procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage('Made By: Lukas Baessgen. Weiter auf OK.');
ShowMessage('Wenn ihr Verbesserungsvorschläge habt --> E-Mail an [email]Zitrone.Saft@web.de[/email] Weiter auf OK.');
ShowMessage('Vielen dank, dass ihr diesen Player benutzt! Zum Beenden auf OK klicken.');
end;
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
   DragAcceptFiles (Handle, True);
   playList := TStringList.Create;
end;
//=============================================================================
procedure TForm1.FormDestroy(Sender: TObject);
begin
   playList.Free;
end;
//================Nächster song================================================
procedure TForm1.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;
//===============Volume setzen=================================================
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 SetMPVolume(MediaPlayer1,TrackBar1.Position);
end;
//===============Angeklickten song abspielen===================================
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count - 1 do
    if listbox1.Selected[i] then break;

     PlayFile(i);
end;


//==================Lied abspielen=============================================
procedure TForm1.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;
//=================Playlist löschen============================================

procedure TForm1.Button4Click(Sender: TObject);
begin
 Listbox1.Clear;
end;
//================Laufwerk bereit?=============================================
function IsDriveReady(Root: string): Boolean;
var
  Oem:     Cardinal;
  Dw1, Dw2: DWORD;
begin
  Oem := SetErrorMode(SEM_FAILCRITICALERRORS);
  if Length(Root) = 1 then Root := Root + ':\';
  Result := GetVolumeInformation(PChar(Root), nil, 0, nil, Dw1, Dw2, nil, 0);
  SetErrorMode(Oem);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
if IsDriveReady('D') = true then
    ShowMessage('Laufwerk bereit!!')
else
    ShowMessage('Laufwerk nicht bereitt!!');
end;
//==================Laufwerktyp bestimmen======================================

procedure TForm1.Button7click(Sender: TObject);
var
  typ: Integer;
  s:  string;
begin
  s  := 'D:\';
  typ := GetDriveType(PChar(s));
  if Typ <> 0 then case typ of
      DRIVE_REMOVABLE:
        begin
          ShowMessage('Drive Removable / Diskette');
        end;
      DRIVE_FIXED:
        begin
          ShowMessage('Drive fixed / Festplatte');
        end;
      DRIVE_CDROM:
        begin
          ShowMessage('CD-ROM Drive');
        end;
      DRIVE_RAMDISK:
        begin
          ShowMessage('RAM Drive');
        end;
      DRIVE_REMOTE:
        begin
          ShowMessage('Remote Drive / Netzlaufwerk');
        end;
    end;
end;
//=============Laufwerke schliessen/öffnen=====================================

procedure TForm1.Button8Click(Sender: TObject);
begin
mciSendString('Set cdaudio door open wait', Nil, 0, Handle);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
mciSendString('Set cdaudio door closed wait', Nil, 0, Handle);
end;
//=============================================================================

end.
Und im Anschlus der Player, damit ihr wisst was ich meine

STS301 19. Dez 2007 18:29

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
:firejump: finde ihn ganz toll, aber bei mir funktioniert der Playbutton, wenn das Lied blau markiert ist. :thumb: :thumb:

Zitrone.Saft 19. Dez 2007 18:37

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Ja, aber wenn man das lied anklickt wird es sofort abgespielt und ich möchte es nur dann abspielen, wenn ich play drücke

DeddyH 19. Dez 2007 18:41

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Zitrone.Saft
Ja, aber wenn man das lied anklickt wird es sofort abgespielt...

Zitat:

Zitat von Zitrone.Saft
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
  for i := 0 to listbox1.Count - 1 do
    if listbox1.Selected[i] then break;

     PlayFile(i); //los geht' s
end;

Steht ja auch da.

Zitrone.Saft 19. Dez 2007 18:45

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Jo hnmm hast recht, aber wenn ich das PlayFile(i); trausmache kann ich , wenn ich das lied anklicke es nicht mehr abspielen(kann auch nicht auf play oder so klicken)

EWeiss 19. Dez 2007 19:55

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Zitrone.Saft
Jo hnmm hast recht, aber wenn ich das PlayFile(i); trausmache kann ich , wenn ich das lied anklicke es nicht mehr abspielen(kann auch nicht auf play oder so klicken)

Irgendwie verstehe ich nicht so recht was du erreichen willst.
Wenn du beim klick auf die Playliste nicht möchtest das der titel abspielt dann darfst du dort auch nicht PlayFile[i] ansprechen.
Lege dir doch eine Variable an welche den Index der Playliste festhält.

Delphi-Quellcode:
var
CurrentFile : Integer;
Klickst du nun auf deinen Button play dann übergibst du diese Variable an die procedure PlayFile.

1. Du klickst auf die Playliste , der eintrag ist ausgewählt
danach übergibst du an deine Variable CurrentFile den (index der playListe)

Klickst du nun auf den Button Play ..dann deine Procedure ansprechen PlayFile[CurrentFile]

Das darf aber dann nur im event des Button stehen,

gruss

Zitrone.Saft 19. Dez 2007 20:11

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Also:

Ich habe nu beim media player
Delphi-Quellcode:
procedure TForm1.PlayFile(songNumber: integer);
begin
   if fileexists(Playlist.Strings[songNumber]) then begin
     CurrentSong := songNumber;
     mediaplayer1.Close;
     mediaplayer1.FileName := Playlist.Strings[songNumber];
     mediaplayer1.open;
     mediaplayer1.play //Hier das gelöscht
   end;
end;

und nun kann ich das lied mit dem play button abspielen.


Des andere ÖProblem dabei is nu, dass wenn ich mehrere lieder hab, dass er die nicht mehr nacheinander abspielt sonder ich bei jedem einzelnen lied auf play klicken muss.

BullsEye 19. Dez 2007 20:33

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Vllt solltest du mal überlegen, Bass.dll oder FMOD zu nutzen. Die WindowsMediaPlayer Komponente ist nicht so gut.
Außerdem kannst du dann auch noch mehr Formate abspielen und es ist umfangreicher mit Trackbar etc
Die Playlist löscht du einfach mit
Delphi-Quellcode:
...
ListBox1.ItemIndex.Clear
...

BullPlayer

Zitrone.Saft 19. Dez 2007 21:02

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Das problem ist, dass ich ein kompletter neuling bin und ich keine ahnung voin bass.dll oder so habe.

Könntest du mir vlt da helfen???


Und wenn ich des nu so schreibe wie du des gemacht hast
Delphi-Quellcode:
listbox1.itemindex.clear
dann kommt ein fehler:

[Pascal Fehler] LukasMediaPlayer.pas(221): E2018 Record, Objekt oder Klassentyp erforderlich

wie kann ich diesen beheben?

DP-Maintenance 19. Dez 2007 21:27

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage

Blackheart 19. Dez 2007 21:48

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Schau Dir mal diesen Link an dort ist alles einfach erklärt.
http://www.krazz.net/retnyg/tut/mptut1.htm]Media Player[/url]

gmc616 20. Dez 2007 01:30

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Zitrone.Saft
Und wenn ich des nu so schreibe wie du des gemacht hast
Delphi-Quellcode:
listbox1.itemindex.clear
dann kommt ein fehler:

Ja klar. Muß ja auch Listbox1.Items.Clear; heißen.

Wenn der TMediaplayer ein Track fertig gespielt hat, feuert er ein Notify-Event.Delphi-Referenz durchsuchenOnNotify Delphi-Referenz durchsuchenTMPNotifyValues
Delphi-Quellcode:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  case MediaPlayer1.NotifyValue of
    nvSuccessful: ;
    nvSuperseded: ;
    nvAborted: ;
    nvFailure: ;
  end;
end;
Hier kannst du dann den nächsten Track laden und starten. Welches NotifyValue du auswerten musst, musst du selbst herraus finden. Ich habs nicht mehr im Kopf.

Alternativ könntest du über einen Timer prüfen, ob der Track keine Restzeit mehr hat.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (MediaPlayer1.EndPos - MediaPlayer1.Position)<=0 then
  begin
    // Nächsten Track in der Liste abspielen
  end;
end;
Ist aber wohl eher unsauber und ungenau.

Edit:
@Blackheart: Der Link funktioniert net.

Edit II:
Ist dieses verkappte Deutsch mittlerweile modern geworden? :gruebel:
Ist ja in der DP echt schlimm geworden in letzter Zeit. :wall:

Zitrone.Saft 20. Dez 2007 07:51

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Also soll ich jetzt statt dem:
Delphi-Quellcode:
procedure TForm1.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;
das schreiben:
Delphi-Quellcode:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
  case MediaPlayer1.NotifyValue of
    nvSuccessful: ;
    nvSuperseded: ;
    nvAborted: ;
    nvFailure: ;
  end;
oder wie meinst du das?

EWeiss 20. Dez 2007 08:40

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Hallo Orangensaft

Du solltest dir erst mal klar darüber werden was du nun eigentlich willst.
Deine Frage war wie du das abspielen beim klick auf die ListBox verhindern kannst.
das wurde dir erklärt...

Nun mußt du halt einen weg finden das ganze umzulenken so das du über einen Timer oder wie
von gmc.. erklärt deine procedure PlayFile ansprichst sobald das ende des Titels erreicht wurde.

Lese dir aber erst mal das SDK über den TMediaplayer durch damit du weißt welche Funktionen dir dieser zur verfügung stellt.
Raten copy/Paste bringt dich da nicht weiter.

Man muss schon wissen was man tut... sorry

EDIT:
Was du da eingefügt hast sind Variablen über die du zusätzliche Informationen erhälst
Fehler, Erfolgreich usw... hat nichts mit einer übergabe von einer ausführung irgendeiner art zu tun.

gruss Emil

Blackheart 20. Dez 2007 09:06

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Blackheart
Schau Dir mal diesen Link an dort ist alles einfach erklärt.
http://www.krazz.net/retnyg/tut/mptut1.htm]Media Player[/url]

Zitat:

Zitat von gmc616
@Blackheart: Der Link funktioniert net.

Bei Mir funktioniert er, musst auch mal draufklicken. :wink:

gmc616 20. Dez 2007 13:16

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Blackheart
Zitat:

Zitat von gmc616
@Blackheart: Der Link funktioniert net.

Bei Mir funktioniert er, musst auch mal draufklicken. :wink:

Scherzkeks :angel2:

Aber nun funktioniert er. Gestern Abend nicht :gruebel:

Mit dem Link sollten aber alle Fragen beantwortet sein. Besser gezeigt bekommt man es nicht!

@Zitrone.Saft: Der erste Code im #13 sieht doch ganz gut aus. Allerdings wird er auch einen Track abspielen, wenn du das CD-Fach öffnest.

[Ironie]Achja, das Schießen des CD-Fachs funktioniert auf meinem Notebook nicht. [/Ironie]

Zitrone.Saft 20. Dez 2007 13:26

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
hehe ja hast recht des wird schlecht gehen bei deinem lappi

also ich will des nu mit nem timer machn, dass er den nächsten song abspielt

wie mach ich des am günstigsten?

Zitrone.Saft 20. Dez 2007 15:22

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Blackheart
Schau Dir mal diesen Link an dort ist alles einfach erklärt.
http://www.krazz.net/retnyg/tut/mptut1.htm]Media Player[/url]


Rat mal wie ich den Player gemacht habe^^

EWeiss 20. Dez 2007 16:52

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Zitrone.Saft
Zitat:

Zitat von Blackheart
Schau Dir mal diesen Link an dort ist alles einfach erklärt.
http://www.krazz.net/retnyg/tut/mptut1.htm]Media Player[/url]


Rat mal wie ich den Player gemacht habe^^

Wollte ja nicht's sagen aber das ist mir direkt aufgefallen.
Und den anderen hier sicher auch ;)

gruss

Blackheart 20. Dez 2007 17:10

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Zitat:

Zitat von Zitrone.Saft
Zitat:

Zitat von Blackheart
Schau Dir mal diesen Link an dort ist alles einfach erklärt.
http://www.krazz.net/retnyg/tut/mptut1.htm]Media Player[/url]


Rat mal wie ich den Player gemacht habe^^

Und warum klappts dann nicht, wahrscheinlich wegen Copy & Paste ohne sich mit dem Code auseinanderzusetzen. :wink:

DeddyH 20. Dez 2007 17:17

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Wieso muss ich gerade an einen gewissen ta***ky denken? :mrgreen:

Zitrone.Saft 21. Dez 2007 12:47

Re: Mediaplayer Problem: Lied mit play abspielen, nicht mit
 
Nein ich weis eigl was ich gemacht habe^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz