Array
(
)

Tela congelada

Pan7
   - 21 nov 2005

Segue uma duvida:

Tenho uma aplicação que executa um processo longo.
Ao executar, este processo inicia normalmente. Acontece que se eu mudar para qualquer outra janela que estiver aberta, quando retorno para a janela da aplicação ela está congelada.
O processo executa perfeitamente até o final mas com a tela congelada, inclusive o progressbar.

Outra dúvida: como colocar um botão para o usuário cancelar o processo, caso queira.

Grato,

Pan7


Emerson
   - 21 nov 2005

para não ter esse efeito de tela congelada, utilize Application.ProcessMessages na iteração do seu laço (supondo que esse ´processo lento´ se dê por conta de um loop)
seria algo assim:
#Código

lCancela := False;
while not tabela.eof and not lCancela do
begin
{faz alguma coisa}
tabela.next;
{incrementa a barra de progresso}
application.processmessages;
end;

if lCancela then
ShowMessage(´Processo cancelado pelo usuário´);


essa variável lCancela deverá ser uma variável private do tipo boleana para controle do cancelamento do processo.
daí vc coloca um botão cancelar no seu form e, no onclick desse botão, põe o seguinte código:
#Código
lCancela := Application.MessageBox(´Deseja realmente cancelar o processo´,´Cancelar´,MB_TASKMODAL + MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrYes;



Pan7
   - 21 nov 2005

Valeu Emerson

Vou testar ! (Assim que a bendita terminar de rodar !!!)

Um abraço,

Pan7