Se não for Thread, me ajudem !!!!!!!

Delphi

10/10/2003

Um exemplo básico, tenho um form com dois botões. O primeiro para atualizar algumas tabelas utilizando transação, e o segundo seria o botão cancelar, para cancelar aquele Looping de atualizações que estava fazendo no clique do primeiro botão.
Sendo que o meu problema é justamente esse, como posso cancelar e/ou manipular a transação através do clique do botão cancelar, pois ele fica desabilitado, ou seja, quando eu clico no primeiro botão ele fica um tempão para atualizar e o cancelar disponível. Mas o botão fica habilitado para eu clicar mas ele só executa depois que eu executar o clique do primeiro botão. O que eu faço ????? Me Ajudem ????


Faelcavalcanti

Faelcavalcanti

Curtidas 0

Respostas

Tand

Tand

10/10/2003

Já que voce não quer Thread, tenta o seguinte:

Application.ProcessMessages()

Coloca este comando após cada inclussão dentro do teu primeiro processo em varios pontos que cada vez que ele executar vai processar o clique no outro botão.

Abraços.

Alexandre


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

10/10/2003

Na verdade, me desculpe. Acho que me expressei errado. Gostei muito da sua opnião, mas ainda não testei.

Se puderem me ajudar como implementar isso usando Thread agradeço!!!


GOSTEI 0
Tand

Tand

10/10/2003

Bem com o Thread fica um pouco mais complicado.

Voce vai ter que criar uma Classe herando do Thread
type

  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
    procedure UpdateTela();
  public
  end;


As instruções do seu botão voce vai ter que colocar na procedure Execute
Dentro da Execute voce vai ter que verificar o Status da propriedade Terminated para que quando voce clicar no outro botão e mandar o thread terminar ´MyThread.Terminate()´ Depois de terminado o Thread executa o evento OnThreadDone dentro dele voce coloca as instruções (tipo rollback ou commit da transação) voce pode incluir mais uma propriedade no seu thread para diferenciar o terminated normal do que voce cancela. Para ter apenas uma Function no OnThreadDone. Se quiser fazer algum update na tela usa uma procedure dentro do thread e chama ela através do comando ´Synchronize(UpdateTela);´. Espero que tenha ajudado. Se não entender pode falar.

Abraços.


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

10/10/2003

Poxa cara. Obrigado. É mais fácil do que ganhar do São Paulo ou do Santos. Na verdade pensava que seria um pouco mais complexo que isso.

Origado, sem ofensas.


GOSTEI 0
Beppe

Beppe

10/10/2003

Só pra explicar a cahamada via Syncronize, ela pára todos os outros threads. Use-a para, por exemplo, acessar os controles VCL do form, que estão no thread(processo) principal.

Ataliba


GOSTEI 0
POSTAR