![]() |
Problem mit filename (String)
Hi,
wenn ich mehrere Lieder zu meiner Playlist hinzufüge, wird immer nur das letzte abgespielt, egal welches ich auswähle. Wie kann ich das Problem beheben.
Delphi-Quellcode:
TID3Tag = record
ID: string[3]; Titel: string[30]; Artist: string[30]; Album: string[30]; Year: string[4]; Comment: string[30]; Genre: Byte; end; TMusicObj = class(TObject) private FFilename: String; FID3 : TID3Tag; public property FileName: String read FFileName write FFileName; property ID3 : TID3Tag read FID3 write FID3; end; var ... filename: String; procedure TfrmMain.Button2Click(Sender: TObject); // Abspiel Button begin if playlist.ItemIndex = -1 then exit; BASS_MusicFree(chan); BASS_StreamFree(chan); frmSpectrum.Timer1.Enabled := True; filename := TMusicObj(ObjList[playlist.ItemIndex]).FileName; PlayFileF(filename); end; procedure TfrmMain.Button3Click(Sender: TObject); // Hinzufügen Button var i: Integer; begin BASS_MusicFree(chan); BASS_StreamFree(chan); if o.Execute then begin MusicObj.FileName := o.FileName; MusicObj.ID3 := ReadID3Tag(o.FileName); ObjList.Add(MusicObj); playlist.Items.Add(ExtractFileName(MusicObj.FileName)); end; end; function TfrmMain.PlayFileF (filename: string): boolean; begin result := false; if checkPlayAll.Checked = False then playlist.Items.Strings[playlist.ItemIndex + 1]; chan := BASS_StreamCreateFile(FALSE,pchar(filename),0,0,0); if chan = 0 then begin chan := BASS_MusicLoad(False, pchar(filename), 0, 0, BASS_MUSIC_RAMPS or BASS_MUSIC_POSRESET or BASS_MUSIC_PRESCAN, 0); if (chan = 0) then begin ErrorPop('Kann das Lied nicht abspielen !'); Exit; end; end; end; |
Re: Problem mit filename (String)
So wie ich das sehe benutzt du immer das gleiche MusicObj.
Deine Liste für objekte kannste dir eigentlich auch sparen wenn du die objekte gleich mit in die Listbox speicherst. |
Re: Problem mit filename (String)
Nur wie willst du das machen ? Dann habe ich da dann E:\blabla.mp3 stehen, es soll da dann aber nur blabla.mp3 stehen.
|
Re: Problem mit filename (String)
_Sebastian_ meint wohl, das du die MusicObj -Objekte mit der data-Property direkt verlinken solltest.
|
Re: Problem mit filename (String)
extractfilename! schaue mal in die hilfe!
|
Re: Problem mit filename (String)
Nochmal von vorne: Das Problem ist ganz einfach: Der filename ist immer das letzte Item, dass ich per Hinzufüg-Button-Click zur ListBox hinzufüge.
@marlem: Hättest du dir den Code oben angesehen, hättest du das nicht gesagt. |
Re: Problem mit filename (String)
Hallo,
Delphi-Quellcode:
Wenn ItemIndex nicht irgendwo durch anklicken oder anders gesetzt wird (ich weiß nicht, was PlayLst ist, TStringList?), spielt er immer nur das gleiche. Und was ist mit der komischen Zeile? Was möchtest du da machen? :gruebel:
TID3Tag = record
ID: string[3]; Titel: string[30]; Artist: string[30]; Album: string[30]; Year: string[4]; Comment: string[30]; Genre: Byte; end; TMusicObj = class(TObject) private FFilename: String; FID3 : TID3Tag; public property FileName: String read FFileName write FFileName; property ID3 : TID3Tag read FID3 write FID3; end; var ... filename: String; procedure TfrmMain.Button2Click(Sender: TObject); // Abspiel Button begin if playlist.ItemIndex = -1 then exit; BASS_MusicFree(chan); BASS_StreamFree(chan); frmSpectrum.Timer1.Enabled := True; filename := TMusicObj(ObjList[playlist.ItemIndex]).FileName; // Wo / wie wird ItemIndex gesetzt? PlayFileF(filename); end; procedure TfrmMain.Button3Click(Sender: TObject); // Hinzufügen Button var i: Integer; begin BASS_MusicFree(chan); BASS_StreamFree(chan); if o.Execute then begin MusicObj.FileName := o.FileName; MusicObj.ID3 := ReadID3Tag(o.FileName); ObjList.Add(MusicObj); playlist.Items.Add(ExtractFileName(MusicObj.FileName)); end; end; function TfrmMain.PlayFileF (filename: string): boolean; begin result := false; if checkPlayAll.Checked = False then playlist.Items.Strings[playlist.ItemIndex + 1]; // Was soll diese Zeile bringen? Soll es vielleicht heißen "Playlist.Itemndex := PlayList.ItemIndex + 1"? chan := BASS_StreamCreateFile(FALSE,pchar(filename),0,0,0); if chan = 0 then begin chan := BASS_MusicLoad(False, pchar(filename), 0, 0, BASS_MUSIC_RAMPS or BASS_MUSIC_POSRESET or BASS_MUSIC_PRESCAN, 0); if (chan = 0) then begin ErrorPop('Kann das Lied nicht abspielen !'); Exit; end; end; end; Gruß, ManuMF |
Re: Problem mit filename (String)
mittels TStrings.Addobject.
Und du musst halt bei jedem neuen Eintrag ein neues Musikobj erstellen zb:
Delphi-Quellcode:
dein objekt bekommste dann mittels
musicObj := TmusicObj.create;
// objekt bearbeiten Listbox.items.addobject(Extractfilename(filename),musicObj);
Delphi-Quellcode:
zurück
musicobj := TMusikObj(listbox.items.objects[listbox.itemindex]);
und nicht vergessen die Objekte wieder freizugeben wenn du den eintrag aus der liste löschst.
Delphi-Quellcode:
// edit items.objects
TMusicObj(Listbox.items.objects[listbox.itemindex]).free;
|
Re: Problem mit filename (String)
Was bezweckst du mit dieser Zeile in PlayFileF? :gruebel:
Delphi-Quellcode:
Eventuell solltest du das auch dem ItemIndex oder etwas anderem zuweisen. ;)
playlist.Items.Strings[playlist.ItemIndex + 1];
//Ach, jetzt steht das sogar schonmal da :lol: Wurscht, ich quote weniger :stupid: :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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