Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с ListBox и TObject


Автор: Pentium02 15.9.2006, 19:14
Короче пишу плеер. Начал делать плей листы, ну дык вот проблема такова. Надо чтоб он добавлял все mp3'шки из папки в ListBox и чтоб в нём отображалось ТЕГ из mp3, а при двойном щелчке воспроизводился сам файл. При простом добавление одного mp3 файла всё нормально

Код

Form1.channel:=Bass_StreamCreateFile(False, PChar(Form1.OpenDialog1.FileName), 0,0,0);
Listbox1.Items.AddObject(GetTagFile(Form1.Channel), Tobject(Form1.OpenDialog1.FileName));


Но при сканировании папки на наличие mp3 файлов, чтние их тегов и добавление в ListBox глючит, теги читаются правильно, но пути к файлам путаются? вместо одного путя, стоит другой. Вот функция сканирования на mp3 и добавление в ListBox

Код

function GetTagFile(var channel: DWORD): string;
var  FTitleStr: string;
begin
FTitleStr:= TAGS_Read(Channel,
'%IFV2(%ARTI,%ICAP(%ARTI),Unknown artist) - %IFV2(%TITL,%ICAP(%TITL),Untitled)');
GetTagFile:=FTitleStr;
end;

begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              BASS_MusicFree(Form1.channel); 
              BASS_StreamFree(Form1.channel);//Очищение канала
              Form1.channel:=Bass_StreamCreateFile(False, PChar(StartFolder + Name), 0,0,0);//Создание потока
              List.AddObject(GetTagFile(Form1.Channel), Tobject(StartFolder + Name)); //добавление в Лист
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;


Ну и чобственно вызов функции

Код

FindFiles('H:\New3', '*.mp3', ListBox1.Items, True);

Автор: RA 15.9.2006, 20:07
Похоже плохо реализован поиск файлов, вот на форуме нарыл простой пример поиска файлов, сравни и может найдёшь что не так.

Код

Procedure FindFile(Dir:string, FileMask: string); 
var SearchRec:TSearchRec; 
begin 
 if Dir<>'' then if Dir[length(Dir)]<>'\' then Dir:=Dir+'\';  
 if FindFirst(Dir+FileMask, faAnyFile, SearchRec)=0 then repeat  
   if (SearchRec.name='.') or (SearchRec.name='..') then continue;  
   if (SearchRec.Attr and faDirectory)<>0 then  
     ScanDir(Dir+SearchRec.name) 
   else  
     Делай_с_найденным_файлом _фсё_что_хочеш(Dir+SearchRec.name); 
 until FindNext(SearchRec)<>0;  
 FindClose(SearchRec);
end; 

FindFile('c:\','*.mp3');


Добавлено @ 20:09 
или даже вот так http://vingrad.ru/DELPHI-DLP-002507

Автор: Pentium02 16.9.2006, 17:47
Блин всё равно также  smile 

Автор: DonPager 17.9.2006, 13:31
а путаются как ? у следующего файла  адрес преведущего ?
если так то ты наверное не вовремя добавляешь объект - поток уже перешёл на следующий файл, а ты всё ещё пишеш про этот...

Автор: Pentium02 17.9.2006, 17:00
Путаются вообще не понятно, просто получается каша, у некоторых вообще нет путей.

Автор: Pentium02 17.9.2006, 17:16
Даже так пробовал, но всёравно
Код


address := T.Create;
address.s := String(StartFolder + Name);
Form1.channel:=Bass_StreamCreateFile(False, PChar(StartFolder + Name), 0,0,0);
List.Items.AddObject(GetTagFile(Form1.Channel), Tobject(address.S));
address.Free;

Автор: Matematik 17.9.2006, 18:05
имхо проще так
Код

var tmp : Pchat;
{...}
tmp := StrNew(PChar(StartFolder + Name));
Form1.channel:=Bass_StreamCreateFile(False, tmp, 0,0,0);
List.Items.AddObject(GetTagFile(Form1.Channel), Tobject(tmp));

Только когда будешь чистить ListBox надо очищать буфер StrDispose(Str: PChar)

Автор: Pentium02 17.9.2006, 19:17
Всё запахало, спасибо большое.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)