kartter 0 Denunciar post Postado Janeiro 24, 2010 pessoal, pq numa thread, qdo mando exibir um showmessage ou um messagedlg, ele exibe de forma incorreta, ou até não exibe. Por exemplo: procedure TExemploThread.Execute; var cont:integer; begin Try cont:=STrToInt('x'); except on E:Exception do begin MessageDlg('erro',mterror,[mbok],0); end; end; usando o método syncronize, eu consegui exibir. Minha dúvida é a seguinte: eu terei q ter um método syncronize para cada exceção minha?Exemplo: procedure TExemploThread.Execute; var cont:integer; begin Try cont:=STrToInt('x'); except on E:Exception do begin syncronize(metodoErro); end; end; procedure TExemploThread.metodoErro begin showmessage('Erro na conversão'); end; Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Janeiro 25, 2010 Hehe, acho que é pq não é o trabalho de uma Thread fazer isso, não em Delphi. Ja tentei fazer isso muitas vezes e não tem como. Tenta chamar um evento separado do seu objeto, ou mesmo chamar um evento de um formlulário. Compartilhar este post Link para o post Compartilhar em outros sites
ispiriquidiberto 0 Denunciar post Postado Janeiro 25, 2010 Fala kra... Quando utilizei threads em meus projetos, dei uma pesquisada nesse tipo de coisa e PELO QUE ENTENDI, funciona da seguinte forma: Para a thread conseguir interagir com os objetos visuais, ela tem q estar rodando em modo síncrono (ou seja, pela rotina syncronize). Uma forma meio que na gambiarra para fazermos isso foi declarar alguns objetos visuais dentro da thread... Por exemplo: Se eu quero escrever em um memo de dentro da thread, eu crio um atributo "memo : TMemo;" Ae quando crio a thread eu atribuo um TMemo do meu form principal para esse atributo da thread, assim eu consigo mexer normalmente nele... Não é nada de boas práticas esse tipo de coisa... rsrsrs Não sei se fui claro e se há outras formas de fazer essa interação entre Forms e Threads... O que o Raficcha disse tem sentido: Não é muito a função da thread interagir com forms de maneira assíncrona... Espero ter ajudado!! Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Janeiro 25, 2010 : D Você pode tentar fazer isso que o Ispiriquidiberto (nossa que complicado escreve..hehe) disse. Faça assim: Na sessão "Private" da sua thread declare uma variavel "Mensagem": Mensagem: string; depois crie uma procedure para cincronizar e mostrar a mensagem: procedure MostraMensagem; showmessessage(Self.Mensagem) e na sua execute coloque um valor em "Mensagem" e sincronize a procedure ai de cima Mensagem := 'Mostrar esta mensagem'; Synchronize(MostraMensagem); Acho que assim funciona. Compartilhar este post Link para o post Compartilhar em outros sites