Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ådriano

Threads e gauges

Recommended Posts

Ola amigos.....Tenho uma Thread que faz um while ......e Gostaria de colocar uma gauge para animar um pouco as coisas....mas não estou conseguindo....a thread roda beleza .....mas o gauge não estou conseguindo....

 

segue um trecho....

 

 

 

procedure TAtualiza.Execute;
begin
Update;
Atualiza;
end;
procedure TAtualiza.Update;
begin
DM.CDS_Update.First;
While not DM.CDS_Update.Eof do
Begin
DM.CDS_Update.Edit;
DM.CDS_UpdateNOME.Value := DM.CDS_AlteraNOME.Value;
DM.CDS_UpdateRG.Value := DM.CDS_AlteraRG.Value;
DM.CDS_UpdateCPF.Value := DM.CDS_AlteraCPF.Value;
DM.CDS_UpdateCNPJ.Value := DM.CDS_AlteraCNPJ.Value;
DM.CDS_UpdateNUMERO.Value := DM.CDS_AlteraNUMERO.Value;
DM.CDS_UpdateENDERECO.Value := DM.CDS_AlteraENDERECO.Value;
DM.CDS_UpdateCIDADE.Value := DM.CDS_AlteraCIDADE.Value;
DM.CDS_UpdateBAIRRO.Value := DM.CDS_AlteraBAIRRO.Value;
DM.CDS_UpdateCOMPLEMENTO.Value := DM.CDS_AlteraCOMPLEMENTO.Value;
DM.CDS_UpdateUF.Value := DM.CDS_AlteraUF.Value;
DM.CDS_UpdateTELEFONE.Value := DM.CDS_AlteraTELEFONE.Value;
DM.CDS_UpdateFAX.Value := DM.CDS_AlteraFAX.Value;
DM.CDS_UpdateCELULAR.Value := DM.CDS_AlteraCELULAR.Value;
DM.CDS_UpdateOPERADORA.Value := DM.CDS_AlteraOPERADORA.Value;
DM.CDS_UpdateCONTATO.Value := DM.CDS_AlteraCONTATO.Value;
DM.CDS_UpdateEMAIL.Value := DM.CDS_AlteraEMAIL.Value;
DM.CDS_UpdateCEP.Value := DM.CDS_AlteraCEP.Value;
DM.CDS_UpdateOPERADORA2.Value := DM.CDS_AlteraOPERADORA2.Value;
DM.CDS_Update.Post;
DM.CDS_Update.ApplyUpdates(-1);
DM.CDS_Update.Next;
end;
DM.CDS_Altera.Close;
DM.CDS_Update.Close;
end;
Obrigado gente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Nesse trecho de código não encontrei nada referente ao seu gauge estar sendo incrementado para só então conseguir obter o resultado esperado.

 

Isso vai te ajudar. [ Clique Aqui ]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá..amigão....realmente neste trecho não tem a gauge...... este código está em uma thread e não consigo acessar a gauge que tá no form....ou tentei também criar uma nesta thread mas não mostra....incrementar a gauge eu sei...o q não estou conseguindo e fazer mostrar pela thread....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Não sei se compreendi bem seu contexto, mas vou dar uma idéia:

 

Crie um form com o componente gauge nele. Dentro da sua Thread, você chama esse form e vai incrementando o gauge contido nele, eu acredito que dessa maneira você consiga resolver essa questão.

 

Como disse, pra mim ainda está um pouco vago o contexto, talvez se você compartilhar parte do código, fique mais fácil de compreender a situação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo desculpe a demora....tarefas do dia a dia.....

Minha thread esta assim e funciona uma beleza...rs

 

unit Thread_Atualiza;
interface
uses
Classes,Sqlexpr,GAUGES;
type
TAtualiza = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
Procedure Atualiza;
Procedure Update;
end;
implementation
uses UDM, UPrincipal, U_alteracao;
procedure TAtualiza.Atualiza;
begin
Dm.CDS_Geral.Close;
Dm.CDS_Geral.Open;
Dm.CDS_Geral.Locate('NSETUP',FPrincipal.NSetupAtualiza,[]);
end;
procedure TAtualiza.Execute;
begin
Update;
Atualiza;
end;
procedure TAtualiza.Update;
begin
DM.CDS_Update.First;
While not DM.CDS_Update.Eof do
Begin
DM.CDS_Update.Edit;
DM.CDS_UpdateNOME.Value := DM.CDS_AlteraNOME.Value;
DM.CDS_UpdateRG.Value := DM.CDS_AlteraRG.Value;
DM.CDS_UpdateCPF.Value := DM.CDS_AlteraCPF.Value;
DM.CDS_UpdateCNPJ.Value := DM.CDS_AlteraCNPJ.Value;
DM.CDS_UpdateNUMERO.Value := DM.CDS_AlteraNUMERO.Value;
DM.CDS_UpdateENDERECO.Value := DM.CDS_AlteraENDERECO.Value;
DM.CDS_UpdateCIDADE.Value := DM.CDS_AlteraCIDADE.Value;
DM.CDS_UpdateBAIRRO.Value := DM.CDS_AlteraBAIRRO.Value;
DM.CDS_UpdateCOMPLEMENTO.Value := DM.CDS_AlteraCOMPLEMENTO.Value;
DM.CDS_UpdateUF.Value := DM.CDS_AlteraUF.Value;
DM.CDS_UpdateTELEFONE.Value := DM.CDS_AlteraTELEFONE.Value;
DM.CDS_UpdateFAX.Value := DM.CDS_AlteraFAX.Value;
DM.CDS_UpdateCELULAR.Value := DM.CDS_AlteraCELULAR.Value;
DM.CDS_UpdateOPERADORA.Value := DM.CDS_AlteraOPERADORA.Value;
DM.CDS_UpdateCONTATO.Value := DM.CDS_AlteraCONTATO.Value;
DM.CDS_UpdateEMAIL.Value := DM.CDS_AlteraEMAIL.Value;
DM.CDS_UpdateCEP.Value := DM.CDS_AlteraCEP.Value;
DM.CDS_UpdateOPERADORA2.Value := DM.CDS_AlteraOPERADORA2.Value;
DM.CDS_Update.Post;
DM.CDS_Update.ApplyUpdates(-1);
DM.CDS_Update.Next;
end;
DM.CDS_Altera.Close;
DM.CDS_Update.Close;
end;
end.
Coloquei uma gauge no form mas não consigo acessar de jeito nenhum...da erro direto...
o erro é
Access violation at address 005c926f in module'meuexecutavel.exe'
Como eu disse..a thread com a gauge funciona bl ...mas pois a gauge,não fununcia de jeito nenhum...
Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Esse form que você criou, nas opções do projeto ele está para ser Auto-created forms ou está como Available Forms?

 

Se estiver como "Auto-created forms", você só faria algo semelhante a isso:

 

Form1.Gauge1.AddProgress(1);

Form1.Show;

 

Se estiver como Available Forms, você só faria algo semelhante a isso:

 

Form1 := TForm1.Created(Self);

 

... Código da sua thread

 

FreeAndNil( Form1 );

 

Obs: Dentro do código da sua thread você colocaria esse código:

 

Form1.Gauge1.AddProgress(1);

Form1.Show;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chamo o form assim:

VAR
F : TF_alteracao_cliente;
begin
F := TF_alteracao_cliente.Create(self);
try
F.ShowModal;
Finally
F.Free;
end;
Chamo a thread assim:
var
T : TAtualiza;
begin
T := TAtualiza.Create(true);
T.FreeOnTerminate := true;
T.Priority := tpNormal;
T.Resume;
A minha thread você ja viu...e mesmo assim não funciona....mesmo
colocando :
EX : Meuform.gauge1.visible := false; dentro da thread da erro.
Não funciona...o q sera que esta errado?rsrsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Talvez eu não tenha consigo me expressar tão bem quanto imaginei...rs

 

O que eu quis propor com minha explicação, seria algo assim:

procedure TAtualiza.Update;
var
  F: TF_alteracao_cliente;
begin
  F := TF_alteracao_cliente.Create(nil);
  F.Gauge1.Progress := 0;    
  F.Gauge1.MaxValue := DM.CDS_Update.RecordCount;

  DM.CDS_Update.First;
  While not DM.CDS_Update.Eof do
    Begin
      F.Gauge1.AddProgress(1);
      F.Show;
      Application.ProcessMessages;  
      DM.CDS_Update.Edit;
      DM.CDS_UpdateNOME.Value := DM.CDS_AlteraNOME.Value;
      DM.CDS_UpdateRG.Value := DM.CDS_AlteraRG.Value;
      DM.CDS_UpdateCPF.Value := DM.CDS_AlteraCPF.Value;
      DM.CDS_UpdateCNPJ.Value := DM.CDS_AlteraCNPJ.Value;
      DM.CDS_UpdateNUMERO.Value := DM.CDS_AlteraNUMERO.Value;
      DM.CDS_UpdateENDERECO.Value := DM.CDS_AlteraENDERECO.Value;
      DM.CDS_UpdateCIDADE.Value := DM.CDS_AlteraCIDADE.Value;
      DM.CDS_UpdateBAIRRO.Value := DM.CDS_AlteraBAIRRO.Value;
      DM.CDS_UpdateCOMPLEMENTO.Value := DM.CDS_AlteraCOMPLEMENTO.Value;
      DM.CDS_UpdateUF.Value := DM.CDS_AlteraUF.Value;
      DM.CDS_UpdateTELEFONE.Value := DM.CDS_AlteraTELEFONE.Value;
      DM.CDS_UpdateFAX.Value := DM.CDS_AlteraFAX.Value;
      DM.CDS_UpdateCELULAR.Value := DM.CDS_AlteraCELULAR.Value;
      DM.CDS_UpdateOPERADORA.Value := DM.CDS_AlteraOPERADORA.Value;
      DM.CDS_UpdateCONTATO.Value := DM.CDS_AlteraCONTATO.Value;
      DM.CDS_UpdateEMAIL.Value := DM.CDS_AlteraEMAIL.Value;
      DM.CDS_UpdateCEP.Value := DM.CDS_AlteraCEP.Value;
      DM.CDS_UpdateOPERADORA2.Value := DM.CDS_AlteraOPERADORA2.Value;
      DM.CDS_Update.Post;
      DM.CDS_Update.ApplyUpdates(-1);
      DM.CDS_Update.Next;
    end;
    DM.CDS_Altera.Close;
    DM.CDS_Update.Close;
    FreeAndNil( F );
end;
 
end.

Veja o que acontece agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola amigo obrigado por sua atenção...

resolvi aki....

Criei na thread um construtor passando a "gauge" por parametros....

 

E mudei o jeito de chamar o form:

...

Application.CreateForm(TF_alteracao_cliente, F_alteracao_cliente);

F_alteracao_cliente.ShowModal;

....

Funcionou beleza....

 

O que acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

É uma boa alternativa, não consigo ver restrições, ao menos não nesse horário...rs..rs..rs

 

Se resolveu seu problema, isso que importa.

 

O que não vou saber te dizer agora, é se a forma que você está usando para criar o seu form TF_alteracao_cliente fica responsável por sua "exclusão" quando não for mais usado.

 

Eu particularmente prefiro ter o controle sobre os meus objetos, ou seja, eu crio e gerencio a sua destruição.

 

Mas, isso é apenas uma pequena observação. Em produção é que você vai conseguir ver se de fato sanou 100% a sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então estou usando este código aki para chamar o form....

 

Application.CreateForm(TF_alteracao_cliente, F_alteracao_cliente);
try
F_alteracao_cliente.ShowModal;
Finally
FreeAndNil(F_alteracao_cliente);
end;
e esta funcionando beleza......Agradeço muito....e até a proxima....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.