GARANTIR DESCONTO

Fórum Sair de um laço while #261224

09/12/2004

0

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

Responder

Posts

09/12/2004

Emerson Nascimento

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;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar