![]() |
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? |
Re: MediaPlayer, NoNotify anfangen
hi,
du könntest eine globale variable definieren. etwa so:
Delphi-Quellcode:
den klick auf die buttons btNext und btPrev kannst du bestimmt abfangen, und darin schreiben:
var NoNotify: boolean;
Delphi-Quellcode:
und im notify-event kannst du folgendes schreiben:
NoNotify := true;
Delphi-Quellcode:
gruss
if NoNotify = true then
begin NoNotify := false; exit; end; // nächster Track aus der Abspielliste abspielen //... urbanbruhin |
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) |
Re: MediaPlayer, NoNotify anfangen
poste mal ein bisschen code, damit ich mal nach dem fehler suchen kann. einfach so die wichtigsten proceduren.
|
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; |
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:
und
itemindex := a + 1;
Delphi-Quellcode:
solltest du zuerst prüfen, ob nicht schon der erste oder letzte track läuft, sonst gibts einen fehler...
itemindex := a - 1;
|
Re: MediaPlayer, NoNotify anfangen
Zitat:
Zitat:
Zitat:
|
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