Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.
Seite 1 von 3  1 23      

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