AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Mediaplayer Problem: Lied mit play abspielen, nicht mit clic
Thema durchsuchen
Ansicht
Themen-Optionen

Mediaplayer Problem: Lied mit play abspielen, nicht mit clic

Ein Thema von Zitrone.Saft · begonnen am 19. Dez 2007 · letzter Beitrag vom 21. Dez 2007
Antwort Antwort
Seite 1 von 3  1 23      
Zitrone.Saft

Registriert seit: 15. Dez 2007
Ort: Michendorf
11 Beiträge
 
#1

Mediaplayer Problem: Lied mit play abspielen, nicht mit clic

  Alt 19. Dez 2007, 19:15
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
Angehängte Dateien
Dateityp: exe lukasplayer_863.exe (468,5 KB, 38x aufgerufen)
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#2

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

  Alt 19. Dez 2007, 19:29
finde ihn ganz toll, aber bei mir funktioniert der Playbutton, wenn das Lied blau markiert ist.
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
Zitrone.Saft

Registriert seit: 15. Dez 2007
Ort: Michendorf
11 Beiträge
 
#3

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

  Alt 19. Dez 2007, 19:37
Ja, aber wenn man das lied anklickt wird es sofort abgespielt und ich möchte es nur dann abspielen, wenn ich play drücke
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 19. Dez 2007, 19:41
Zitat von Zitrone.Saft:
Ja, aber wenn man das lied anklickt wird es sofort abgespielt...
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Zitrone.Saft

Registriert seit: 15. Dez 2007
Ort: Michendorf
11 Beiträge
 
#5

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

  Alt 19. Dez 2007, 19:45
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)
Lukas
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

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

  Alt 19. Dez 2007, 20:55
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
  Mit Zitat antworten Zitat
Zitrone.Saft

Registriert seit: 15. Dez 2007
Ort: Michendorf
11 Beiträge
 
#7

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

  Alt 19. Dez 2007, 21:11
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.
Lukas
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#8

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

  Alt 19. Dez 2007, 21:33
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
  Mit Zitat antworten Zitat
Zitrone.Saft

Registriert seit: 15. Dez 2007
Ort: Michendorf
11 Beiträge
 
#9

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

  Alt 19. Dez 2007, 22:02
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
listbox1.itemindex.clear dann kommt ein fehler:

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

wie kann ich diesen beheben?
Lukas
  Mit Zitat antworten Zitat
19. Dez 2007, 22:27
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Multimedia" verschoben.
Delphi-Frage
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz