Ådriano 9 Denunciar post Postado Fevereiro 17, 2015 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
Eisenheim 67 Denunciar post Postado Fevereiro 17, 2015 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
Ådriano 9 Denunciar post Postado Fevereiro 17, 2015 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
Eisenheim 67 Denunciar post Postado Fevereiro 19, 2015 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
Ådriano 9 Denunciar post Postado Fevereiro 20, 2015 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
Eisenheim 67 Denunciar post Postado Fevereiro 20, 2015 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
Ådriano 9 Denunciar post Postado Fevereiro 20, 2015 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
Eisenheim 67 Denunciar post Postado Fevereiro 21, 2015 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
Ådriano 9 Denunciar post Postado Fevereiro 21, 2015 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
Eisenheim 67 Denunciar post Postado Fevereiro 21, 2015 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
Ådriano 9 Denunciar post Postado Fevereiro 21, 2015 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