Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit filename (String) (https://www.delphipraxis.net/65356-problem-mit-filename-string.html)

Nils_13 15. Mär 2006 16:01


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;

_Sebastian_ 15. Mär 2006 16:11

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.

Nils_13 15. Mär 2006 16:14

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.

mkinzler 15. Mär 2006 16:20

Re: Problem mit filename (String)
 
_Sebastian_ meint wohl, das du die MusicObj -Objekte mit der data-Property direkt verlinken solltest.

marlem 15. Mär 2006 16:21

Re: Problem mit filename (String)
 
extractfilename! schaue mal in die hilfe!

Nils_13 15. Mär 2006 16:26

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.

ManuMF 15. Mär 2006 16:28

Re: Problem mit filename (String)
 
Hallo,

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; // 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;
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:

Gruß,
ManuMF

_Sebastian_ 15. Mär 2006 16:30

Re: Problem mit filename (String)
 
mittels TStrings.Addobject.
Und du musst halt bei jedem neuen Eintrag ein neues Musikobj erstellen
zb:
Delphi-Quellcode:
 musicObj := TmusicObj.create;
 // objekt bearbeiten
 Listbox.items.addobject(Extractfilename(filename),musicObj);
dein objekt bekommste dann mittels
Delphi-Quellcode:
 musicobj := TMusikObj(listbox.items.objects[listbox.itemindex]);
zurück

und nicht vergessen die Objekte wieder freizugeben wenn du den eintrag aus der liste löschst.
Delphi-Quellcode:
 TMusicObj(Listbox.items.objects[listbox.itemindex]).free;
// edit items.objects

leddl 15. Mär 2006 16:31

Re: Problem mit filename (String)
 
Was bezweckst du mit dieser Zeile in PlayFileF? :gruebel:
Delphi-Quellcode:
playlist.Items.Strings[playlist.ItemIndex + 1];
Eventuell solltest du das auch dem ItemIndex oder etwas anderem zuweisen. ;)

//Ach, jetzt steht das sogar schonmal da :lol: Wurscht, ich quote weniger :stupid: :mrgreen:


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