Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi MediaPlayer, NoNotify anfangen (https://www.delphipraxis.net/49740-mediaplayer-nonotify-anfangen.html)

marc.beeh 15. Jul 2005 09:50


MediaPlayer, NoNotify anfangen
 
Hi,
bin gerade dabei einen Mediaplayer (mithilfe der Kompo TMediaPlayer) zu schrieben. Nun habe ich folgendes Problem:
Das Programm besitzt eine Playlist-Funktion (aufbauend auf ListBox). Mit OnNotify vom TMediaPlayer wird da nun der Index um eins erhöht und so eben die Playlist realisiert.
Mein Problem ist hierbei nun die Tatsache, dass auch die MediaPlayer-Button btNext und btPrev OnNotify auslösen. Wenn der User nun als auf diese Button klickt, um manuell in der Playlist weiterzuschalten (was beabsichtigt ist) wird NoNotify nun also auch aufgerufen. Das hat dann aber zur Folge, dass OnNotify immer wieder hintereinander aufgerufen wird, bis das Ende der Playlist erreicht ist.

Wie kann ich verhinern, dass dieses Event beim Klick auf die Button ausgelöst wird?

100nF 15. Jul 2005 10:34

Re: MediaPlayer, NoNotify anfangen
 
hi,

du könntest eine globale variable definieren. etwa so:
Delphi-Quellcode:
var NoNotify: boolean;
den klick auf die buttons btNext und btPrev kannst du bestimmt abfangen, und darin schreiben:
Delphi-Quellcode:
NoNotify := true;
und im notify-event kannst du folgendes schreiben:
Delphi-Quellcode:
if NoNotify = true then
begin
  NoNotify := false;
  exit;
end;
// nächster Track aus der Abspielliste abspielen
//...
gruss
urbanbruhin

marc.beeh 15. Jul 2005 11:07

Re: MediaPlayer, NoNotify anfangen
 
Hi,
ich habs gerade mal ausprobiert. Wenn man auf den Button klickt wird jetzt zwar zuerst die Prozedur wie gewünscht abgebrochen; aus unerfindlichen Gründen wird dannach aber gleich wieder OnNotify ausgelöst (und dann ist die Variable natürlich wieder false)

100nF 15. Jul 2005 11:29

Re: MediaPlayer, NoNotify anfangen
 
poste mal ein bisschen code, damit ich mal nach dem fehler suchen kann. einfach so die wichtigsten proceduren.

marc.beeh 15. Jul 2005 12:35

Re: MediaPlayer, NoNotify anfangen
 
Ok, ist leider im Moment alle nocht nicht so elegant umgesetzt... :mrgreen:

Delphi-Quellcode:
procedure TForm1.Spiel(dname: string); //Spielt Datei "dname" ab
begin
with MediaPlayer1 do
  begin
  If Mode = mpOpen then close;
  FileName := dname;
  if CheckBox1.Checked then Display:=Panel1
   else Display := nil;
  DisplayRect:=Panel1.ClientRect;
  Open;
  Play;
  playing := true;
end;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); //Dateiauswahl
begin
if opendialog1.Execute then
 if (ExtractFileExt(Opendialog1.FileName) = '.m3u') then
 begin
 ListBox1.Items.LoadFromFile(Opendialog1.FileName);
 ListBox1.Visible := true;
 ShellTreeView1.Visible := false;
 ListBox1.ItemIndex := 0;
 spiel(listbox1.Items.Strings[listbox1.ItemIndex]);
 MediaPlayer1.Notify := true;
 playlist := true;
 end
 else Spiel(Opendialog1.FileName);
end;
Delphi-Quellcode:
Procedure TForm1.MediaPlayer1Notify(Sender: TObject);
var
a: integer;
begin
if NoNotify then
  begin
  NoNotify := false;
  exit;
  end
  else
  with listbox1 do
  if (ItemIndex <= Count) and playlist then
    begin
    a := ItemIndex;
    itemindex := a + 1;
    Spiel(Items.Strings[ItemIndex]);
    MediaPlayer1.Notify := true;
    end;
end;

Delphi-Quellcode:
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
  var DoDefault: Boolean); //Abfrage der Button
var
a: integer;
begin
if (button = MPlayer.btNext) and playlist then
  with listbox1 do
    begin
    NoNotify := true;
    a := ItemIndex;
    itemindex := a + 1;
    Spiel(Items.Strings[ItemIndex]);
    NoNotify := true;
    end;

if (button = MPlayer.btPrev) and playlist then
  with listbox1 do
    begin
    NoNotify := true;
    a := ItemIndex;
    itemindex := a - 1;
    Spiel(Items.Strings[ItemIndex]);
    NoNotify := true;
    end;
end;

100nF 15. Jul 2005 13:14

Re: MediaPlayer, NoNotify anfangen
 
ich hab den fehler leider noch nicht gefunde, aber ich hab da noch eine kleine frage:
was bedeutet
Delphi-Quellcode:
MediaPlayer1.Notify := true;
??

überprüf doch mal, wie viel mal die procedure MediaPlayer1Notify aufgerufen wird, nach dem klicken auf btnext oder btprev. aber schau dabei, dass die listbox mindestens etwa 5 einträge hat.

ach ja, hab noch einen anderen fehler gefunden.
bei
Delphi-Quellcode:
itemindex := a + 1;
und
Delphi-Quellcode:
itemindex := a - 1;
solltest du zuerst prüfen, ob nicht schon der erste oder letzte track läuft, sonst gibts einen fehler...

marc.beeh 15. Jul 2005 13:45

Re: MediaPlayer, NoNotify anfangen
 
Zitat:

ich hab den fehler leider noch nicht gefunde, aber ich hab da noch eine kleine frage:
was bedeutet
Code:
MediaPlayer1.Notify := true;

IMHO wird nur ein Notify-Event ausgelöst, wenn Notify auf true steht.

Zitat:

überprüf doch mal, wie viel mal die procedure MediaPlayer1Notify aufgerufen wird, nach dem klicken auf btnext oder btprev. aber schau dabei, dass die listbox mindestens etwa 5 einträge hat.
Sie wird ständig wieder aufgerufen; Irgendwann hängt sich das Programm dann auf.

Zitat:

ach ja, hab noch einen anderen fehler gefunden.
Stimmt, danke. Ist noch eine sehr frühe Version....


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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