Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

passarito

[Resolvido] Label não mostra vários textos

Mensagens Recomendadas

passarito

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rafael Adão

Experimente colocar um 'Application.ProcessMessages;'

.....
Frm_Shuffle_MP3.StrNovoNome.Caption:=Fich; {Aqui mostra o nome novo}
Application.ProcessMessages;
....

 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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í...

  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.