Jump to content

Label não mostra vários textos


passarito
Go to solution Solved by Rafael Adão,

Recommended Posts

Boa tarde.

Desenvolvi um programa simples para misturar ficheiros.

O programa está a funcionar bem, mas as labels do form apenas mostram o último ficheiro, não vão mostrando os nomes dos ficheiros à medida que são alterados.

O procedimento que trata desse ponto é o este:

procedure shuffle;
Var
  FileInfo: TSearchRec;
  Fich, SNum:String;
  Num, Erro, i:Integer;
  f:file;
begin
  Randomize;
  if FindFirst('*.mp3', faArchive,  FileInfo) = 0 then begin
    Repeat
      Fich:=FileInfo.Name;
      Frm_Shuffle_MP3.StrNomeOriginal.Caption:=Fich; {Aqui mostra o nome atual}
      Val(copy(Fich,1,4), Num, Erro);
      if (Erro=0) and (Fich[5]='_') then begin
        Delete(Fich,1,5);
      end;
      Num:=Random(9999)+1;
      Str(Num,SNum);
      For i:=length(SNum) to 3 do SNum:='0'+SNum;
      Fich:=SNum+'_'+Fich;
      AssignFile(f,FileInfo.Name);
      Rename(f,Fich);
      Frm_Shuffle_MP3.StrNovoNome.Caption:=Fich; {Aqui mostra o nome novo}
    until FindNext(FileInfo)<>0;
    FindClose(FileInfo);
  end;
end;

experimentei colocar um sleep para o processo ser mais lento e verificar se as labels realmente alteravam ou não e as labels ficam em branco até ao último ficheiro.

Alguém sabe a razão deste comportamento?

Obrigado

Link to post
Share on other sites
nunopicado

Esse comportamento ocorre porque a tarefa está a ser executada na mesma thread que o user interface. Isto faz com que algumas mensagens do windows fiquem na queue até haver 'uma aberta' para as processar. Como algumas dessas mensagens incluem a actualização dos valores mostrados no UI, acabas por não ter um refresh correcto.

Podes testar a dica do @Rafael Adão, que para coisas simples costuma resolver.
Idealmente, o teu processamento de ficheiros ficaria numa thread dedicada, deixando a principal para actualizar o UI, mas para coisas simples, se o ProcessMessages funcionar, podes não querer ir por aí...

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to post
Share on other sites

Obrigado @Rafael Adão , resolveu na perfeição.

@nunopicado, tens razão, não quero ir por aí não. Aquilo nem se pode chamar de programa de tão "simplérrimo" que é. Se leste o código, o programa... é aquilo! Coloca 4 algarismos e um underscore em todos os ficheiros mp3 por forma a imitar o shuffle dos players. É que os phones que tenho não têm essa função e estava farto de ouvir sempre as mesmas musicas pela mesma ordem. E quando se tem cerca de 10h de musica as últimas nunca são ouvidas.

Bem, obrigado aos 2

Só mais uma coisa, como é que coloco resolvido no tópico

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.