Olá amigos, bom dia, espero e desejo que todos tenham tido um ótimo natal junto com seus familiares.
Bem pouco tempo atrás postei um tópico com o título Colocar o "Gauge na Linha Selecionada de um DBGrid", com o auxílio dos senhores consegui resolver a contento. Segui o mesmo raciocínio para fazer o get FTP com gauge para acompanhar o percentual de downloado do arquivo, sendo que a diferença é que o gauge coloquei fora do dbgrid. O download é feito por uma thread, uso o componente indy 10, a atualização do gauge no evento FTPOnWork. Acontece que quando mando atualizar(incrementar) o Gauge a aplicação congela, mesmo colocando Application.ProcessMessages, neste caso o form não congela mas o restante de aplicação sim. Quando faço o GetFTP sem atualização do gauge, toda aplicação fica liberada.
Pergunta
Luciano Umbelino
Olá amigos, bom dia, espero e desejo que todos tenham tido um ótimo natal junto com seus familiares.
Bem pouco tempo atrás postei um tópico com o título Colocar o "Gauge na Linha Selecionada de um DBGrid", com o auxílio dos senhores consegui resolver a contento. Segui o mesmo raciocínio para fazer o get FTP com gauge para acompanhar o percentual de downloado do arquivo, sendo que a diferença é que o gauge coloquei fora do dbgrid. O download é feito por uma thread, uso o componente indy 10, a atualização do gauge no evento FTPOnWork. Acontece que quando mando atualizar(incrementar) o Gauge a aplicação congela, mesmo colocando Application.ProcessMessages, neste caso o form não congela mas o restante de aplicação sim. Quando faço o GetFTP sem atualização do gauge, toda aplicação fica liberada.
Segue os códigos dos eventos:
procedure RecebeArquivo.FTPWorkBegin(ASender: TObject;
AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
if frmLstLogRecepArq <> nil then // <-- frmLstLogRecepArq é o form onde mostro o gauge com o percentual da recepção
begin
frmLstLogRecepArq .pnlMsgRecep.Caption := MsgRecepcao;
frmLstLogRecepArq .pnlMsgRecep.Visible := True;
frmLstLogRecepArq .pnlGauge.Visible := True;
frmLstLogRecepArq .Gauge1.Visible := True;
frmLstLogRecepArq .Gauge1.Progress := 0;
if AWorkCountMax > 0 then
TamanhoArqFTP := Integer(AWorkCountMax);
frmLstLogRecepArq .Gauge1.MaxValue := TamanhoArqFTP;
end;
end;
procedure RecebeArquivo.FTPWork(ASender: TObject;
AWorkMode: TWorkMode; AWorkCount: Int64);
begin
if frmLstLogRecepArq <> nil then
begin
frmLstLogRecepArq .pnlMsgRecep.Caption := MsgRecepcao;
frmLstLogRecepArq .pnlMsgRecep.Visible := True;
frmLstLogRecepArq .pnlMsgRecep.Visible := True;
frmLstLogRecepArq .pnlGauge.Visible := True;
frmLstLogRecepArq .Gauge1.MaxValue := TamanhoArqFTP;
frmLstLogRecepArq .Gauge1.Progress := AWorkCount;
synchronize(frmLstLogRecepArq .Gauge1.Refresh); // <-- Quando faz a atualização do Gauge a aplicação trava
Application.ProcessMessages;
end;
end;
procedure RecebeArquivo.FTPWorkEnd(ASender: TObject;
AWorkMode: TWorkMode);
begin
if frmLstLogRecepArq <> nil then
frmLstLogRecepArq .Gauge1.Progress := frmLstLogRecepArq .Gauge1.MaxValue;
end;
Preciso resolver isso o quanto antes, fazer o GetFTP com o Gauge sem congelar a aplicação, desde já agradeço o auxílio que possam me prestar.
Link para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.