Não travar form em um processamento

762 views
Skip to first unread message

Fernando Vargas

unread,
Jan 14, 2013, 7:10:42 AM1/14/13
to dug...@googlegroups.com
Bom dia pessoal.

Preciso de um sugestão, alguém sabe como fazer para um form não ficar travado durante um processamento sem ter que usar/criar TThread? 

Preciso de uma solução assim, porque toda a estrutura do código já esta criada e não temos tempo para restruturar com TThread.

Agradeço pela assistência.

Samuel N. Junior

unread,
Jan 14, 2013, 7:17:04 AM1/14/13
to dug...@googlegroups.com
Bom dia Fernando,

O que você quer dizer com "não ficar travado"?

Por acaso você tem uma rotina dentro desse form que, quando executada, demora para ser concluída e por isso o formulário "parece" que fica travado até a conclusão dela? (1)

Ou o que você quer é acionar um formulário e permitir que o menu da aplicação carregue outros formulários? (2)

Para o primeiro caso você pode colocar Application.ProcessMessages no meio do código que está sendo executado para que os demais objetos do formulário possam ser acionados ou ocorram refreshs da tela.

Para o segundo caso a única saída é carregar o formulário com Show em vez do ShowModal.

[ ]s

Samuel
--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 
Twitter: @dugrs
http://www.facebook.com/groups/dugrs/
http://www.Vimeo.com/dugrs
 
 
 

Newton Michel de Oliveira

unread,
Jan 14, 2013, 7:17:07 AM1/14/13
to dug...@googlegroups.com
Application.processmessages... não é a melhor técnica, mas funciona.. mas use com sabedoria..

Atenciosamente,
Newton Michel de Oliveira
Celular 55-51-92358577
http://br.linkedin.com/in/newtongaucho
http://twitter.com/newtongaucho

Coordenador e palestrante dos grupos:
*  (DUG-RS Delphi Users Grupo do RS (www.dug-rs.org) ) 
*  (DF-e - Documentos Fiscais Eletrônicos (http://www.facebook.com/groups/332215890175650/) 
Embarcadero Community Evangelist – Brazil





--

Fernando Vargas

unread,
Jan 14, 2013, 7:22:39 AM1/14/13
to dug...@googlegroups.com
Assim na realidade é o seguinte eu tenho uma rotina que roda dentro de um while, eu só preciso possibilitar ao usuário que ele possa clicar em um botão cancelar e parar o processamento. O problema que quando ele clica no botão Processar, trava o form por causa do while..é disso que eu preciso, eu sei que dá para fazer com Thread, mas não temos tempo pra isso. Porque o código já foi todo estruturado.

Secaio

unread,
Jan 14, 2013, 7:50:51 AM1/14/13
to dug...@googlegroups.com
Qual a condição de parada desse teu while?

Se vc declarar por exemplo uma variável qualquer no teu form, como por exemplo  stop = boolean
e colocar onde dispara teu while:

 STOP := TRUE;
 WHILE ( (TUACONDIÇÃO) and (stop) )
  begin
   blablabla;
  end;


e no botão para cancelar o comando, fazer essa variavel receber FALSE (ela deve estar declarada nas variáveis globais do teu form daí....

não faz o que tu precisa?



2013/1/14 Fernando Vargas <nand...@gmail.com>



--
Secaio

Samuel N. Junior

unread,
Jan 14, 2013, 7:52:50 AM1/14/13
to dug...@googlegroups.com
Para funcionar, ele tem que colocar o Application.ProcessMessages dentro do Loop sen�o ele nunca conseguir� pressionar o bot�o de cancelamento do processo.

[ ]s

Samuel
Em 14/01/2013 10:50, Secaio escreveu:
Qual a condi��o de parada desse teu while?

Se vc declarar por exemplo uma vari�vel qualquer no teu form, como por exemplo �stop = boolean
e colocar onde dispara teu while:

�STOP := TRUE;
�WHILE ( (TUACONDI��O) and (stop) )
� begin
� �blablabla;
� end;


e no bot�o para cancelar o comando, fazer essa variavel receber FALSE (ela deve estar declarada nas�vari�veis�globais do teu form da�....

n�o faz o que tu precisa?



2013/1/14 Fernando Vargas <nand...@gmail.com>
Assim na realidade � o seguinte eu tenho uma rotina que roda dentro de um while, eu s� preciso�possibilitar�ao usu�rio que ele possa clicar em um bot�o cancelar e parar o processamento. O problema que quando ele clica no bot�o Processar, trava o form por causa do while..� disso que eu preciso, eu sei que d� para fazer com Thread, mas n�o temos tempo pra isso. Porque o c�digo j� foi todo estruturado.


Em 14 de janeiro de 2013 10:17, Newton Michel de Oliveira <newton...@gmail.com> escreveu:

Application.processmessages... n�o � a melhor�t�cnica, mas funciona.. mas use com sabedoria..

Atenciosamente,
Newton Michel de Oliveira
* �(DUG-RS Delphi Users Grupo do RS (www.dug-rs.org) )�
* �(DF-e - Documentos Fiscais�Eletr�nicos (http://www.facebook.com/groups/332215890175650/)�)�
Embarcadero Community Evangelist � Brazil





Em 14 de janeiro de 2013 10:10, Fernando Vargas <nand...@gmail.com> escreveu:
Bom dia pessoal.

Preciso de um sugest�o, algu�m sabe como fazer para um form n�o ficar travado durante um processamento sem ter que usar/criar TThread?�

Preciso de uma solu��o assim, porque toda a estrutura do c�digo j� esta criada e n�o temos tempo para restruturar com TThread.

Agrade�o pela assist�ncia.
--
--
Voc� recebeu esta mensagem porque est� inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscri��o neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais op��es, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
�
�
�
�

--
--
Voc� recebeu esta mensagem porque est� inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscri��o neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais op��es, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
�
�
�
�

--
--
Voc� recebeu esta mensagem porque est� inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscri��o neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais op��es, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
�
�
�
�



--
Secaio
--
--
Voc� recebeu esta mensagem porque est� inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscri��o neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais op��es, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
�
�
�
�

Fernando Vargas

unread,
Jan 14, 2013, 9:07:39 AM1/14/13
to dug...@googlegroups.com
Galera vou tentar o que dizem, mas já adianto, Application.ProcessMessages, nem sempre dá certo!


Em 14 de janeiro de 2013 10:52, Samuel N. Junior <sam...@natsam.com.br> escreveu:
Para funcionar, ele tem que colocar o Application.ProcessMessages dentro do Loop senão ele nunca conseguirá pressionar o botão de cancelamento do processo.

[ ]s

Samuel
Em 14/01/2013 10:50, Secaio escreveu:
Qual a condição de parada desse teu while?

Se vc declarar por exemplo uma variável qualquer no teu form, como por exemplo  stop = boolean
e colocar onde dispara teu while:

 STOP := TRUE;
 WHILE ( (TUACONDIÇÃO) and (stop) )
  begin
   blablabla;
  end;


e no botão para cancelar o comando, fazer essa variavel receber FALSE (ela deve estar declarada nas variáveis globais do teu form daí....

não faz o que tu precisa?



2013/1/14 Fernando Vargas <nand...@gmail.com>
Assim na realidade é o seguinte eu tenho uma rotina que roda dentro de um while, eu só preciso possibilitar ao usuário que ele possa clicar em um botão cancelar e parar o processamento. O problema que quando ele clica no botão Processar, trava o form por causa do while..é disso que eu preciso, eu sei que dá para fazer com Thread, mas não temos tempo pra isso. Porque o código já foi todo estruturado.


Em 14 de janeiro de 2013 10:17, Newton Michel de Oliveira <newton...@gmail.com> escreveu:

Application.processmessages... não é a melhor técnica, mas funciona.. mas use com sabedoria..

Atenciosamente,
Newton Michel de Oliveira
*  (DUG-RS Delphi Users Grupo do RS (www.dug-rs.org) ) 
*  (DF-e - Documentos Fiscais Eletrônicos (http://www.facebook.com/groups/332215890175650/) 
Embarcadero Community Evangelist – Brazil





Em 14 de janeiro de 2013 10:10, Fernando Vargas <nand...@gmail.com> escreveu:
Bom dia pessoal.

Preciso de um sugestão, alguém sabe como fazer para um form não ficar travado durante um processamento sem ter que usar/criar TThread? 

Preciso de uma solução assim, porque toda a estrutura do código já esta criada e não temos tempo para restruturar com TThread.

Agradeço pela assistência.
--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 

--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 

--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 



--
Secaio
--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 

--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -

Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 
Reply all
Reply to author
Forward
0 new messages