GARANTIR DESCONTO

Fórum Enviar Item de ListBox para ListView com o comando "FOR" #406509

13/08/2011

0

olá, Estou desenvolvendo um sisteminha que faz uma busca em determinada pasta, e adiciona todos os arquivos [*.mp3] em um ListBox. Até esta parte tudo é feito rápido e sem travar.
Apos isso, ou passo item por item, com o comendo "for", no ListBox, e adiciono no ListView, sendo que para cada item eu pego o nome do artista, album e nome da musica, com o Componente ID3Tag da JediVCL, e esta parte se torna muito demorada já que na pasta existe mais de 1000 arquivos, e enquanto o comando for está sendo executado o programa trava, e não da para fazer nada.

pergunta:
Existe alguma maneira de exucutar esse comando For em "segundo plano" ou algo assim, de modo que não trave o programa?


O codigo que eu uso para Pegar as musicas é esse:

procedure TForm1.Button2Click(Sender: TObject);
var
 i,f,a:integer;
 item:TListItem;
 tagid3:ID3Struct;
begin

ListView2.Clear;
TabSheet4.TabVisible:=true;
PageControl1.ActivePage:=TabSheet4;

for i:=0 to ListView1.Items.Count-1 do
 if ListView1.Items.Item[i].Checked then
  begin
    ListBox1.Clear;
    listbox1.Items.BeginUpdate;
    FileSearch(ListView1.Items.Item[i].SubItems[0],'*.mp3',listbox1,(LowerCase(ListView1.Items.Item[i].SubItems[1])=LowerCase('sim')));
    listbox1.Items.EndUpdate;

     for a:=ListBox1.Items.Count-1 downto 0 do
       for f:=0 to ListBox2.Items.Count-1 do
        If Pos(LowerCase(ListBox2.Items[f]),LowerCase(ListBox1.Items[a]))>0 then
         ListBox1.Items.Delete(a);

    for a:=0 to ListBox1.Items.Count-1 do
     if FileExists(ListBox1.Items[a])=true then
     begin
      Item:=ListView2.Items.Add;
      ID3.Active:=false;
      ID3.FileName:=ListBox1.Items[a];
      ID3.Active:=true;
      item.Caption:=RemoveExt(nome(ListBox1.Items[a]));
      item.SubItems.Add(RemoveExt(nome(ListBox1.Items[a])));
      item.SubItems.Add(ID3.SongName);
      item.SubItems.Add(ID3.Artist);
      item.SubItems.Add(ID3.Album);
      item.SubItems.Add(ListBox1.Items[a]);
     end;
  end;
TabSheet4.TabVisible:=False;
PageControl1.ActivePage:=TabSheet2;
Label5.Caption:='Total :'+IntToStr(ListView2.Items.Count);
end;

Jackson Veiga

Jackson Veiga

Responder

Posts

15/08/2011

Jackson Veiga

Ninguém?????
Responder

Gostei + 0

16/08/2011

Marco Salles

Ninguém?????


Pesquise por THread .. Ha vários exemplos e ate mesmo vídeos sobre o assunto
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar