Sair de um laço while

Delphi

09/12/2004

Saudações a todos da lista...

Estou precisando saber como fazer para, ao clicar em um botão, forçar a saída de um laço while que varre determinada tabela do banco.
O problema que estou encontrando é que eu gostaria de deixar a opção para que o usuário pare um determinando processo de atualização, mas, ao entrar no laço que varre a tabela, não consigo fazer nada no formulário (arrastar, clicar em um botão, etc.).
Sei que existe o recurso de threads, mas não sei como utilizá-lo.
Alguém poderia me ajudar?
Agradeço desde já a todos!!!


Nunes_fns

Nunes_fns

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

09/12/2004

você não precisa de um thread para isso.
basta você colocar um Application.ProcessMessages a cada iteração do laço. você vai precisar criar uma variável publica/privada para controlar o clique do botão. algo assim:

type
    Form1 = class(TForm)
        {...}
    private
        lCancelar: boolean; // variável para controlar o cancelamento
        {...}
    public
        {...}


procedure TForm1.BotaoConfirmarClick(Sender: TObject);
begin
    lCancelar := False; // antes do laço, inicializo a variável como False

    while [sua condicao] do
    begin
        if lCancelar and (MessageDlg(´Deseja realmente cancelar o processo?´,mtConfirmation,[mbYes,mbNo],0)=mrYes) then
            break
        else
            lCancelar := False;

        [seus comandos]

        Application.ProcessMessages; // esse é o truque
    end;

    if lCancelar then
        ShowMessage(´Processo incompleto. Foi cancelado pelo usuário´)
    else
        ShowMessage(´Processo finalizado´);
end;

// procedimento do botão cancelar
procedure TForm1.BotaoCancelarClick(Sender: TObject);
begin
    lCancelar := True;
end;

end;


GOSTEI 0
POSTAR