Guest Ramon Bedin Postado Julho 31, 2008 Denunciar Share Postado Julho 31, 2008 Olá, pessoal estou com o seguinte problema, ultilizo DELPHI 2007.Minha aplicação realiza atualizações via internet pelo componenteidHttpo problema é que estou usando uma barra de progresso para mostrar o andamento do download (progressbar)mas tenho que fazer meu aplicativo logo que ser inicializado começar a executar a atualizações(os códigos estão em um botão, já que não consegui fazer executar automatico, tenho que clicar)já tentei neste eventos do formON SHOWON ACTIVATEON CREATEON PAINTmas oque acontece é que ele chega a executa, mas somente mostra a aplicação quando termina o download(oque é errado já que quero exibir a progress bar enquanto faz o download)não sei em que evento ou como fazer para executar automatico a atualização..HELP ??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 1, 2008 Denunciar Share Postado Agosto 1, 2008 Ramon Bedin, quanto a atualizar a barra de progresso você deverá incluir no evento OnWork do componente IdHTTP, uma chamada ao método ProcessMessages do objeto Application. Veja exemplo:procedure TFrmUpdate.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin // Atualiza barra de progresso ProgressBar1.Position := AWorkCount; ProgressBar1.Repaint; // dá oportunidade de processamento de mensagens pendentes (como atualização visual) Application.ProcessMessages; end; Quanto a questão de executar o processo de atualização sem intervenção do usuário, inicialmente lembro que você não poderá neste momento estar atualizando o seu programa que encontra-se em execução (isto não é possível). Mas, se for atualização de outros arquivos que não estejam em uso - sem problema. A solução em si, passa pelo uso do procedimento PostMessage que irá colocar uma mensagem na lista de mensagens a serem tratadas pela sua aplicação. O Post, indica que a mensagem vai para a lista e não é aguardada uma resposta para que o seu programa continue executando as linhas seguintes - diferente do uso de SendMessage (ver Win32 Reference para detalhes). Você precisará definir um tratador para a mensagem em seu form, e a sua chamada pode ocorrer no evento OnCreate, OnActivate ou OnShow - veja onde lhe traz melhor resultado (embora, seja mais apropriado que ocorra no último momento antes de a tela ser apresentada - OnShow). Exemplificando: ... const WM_STARTUPD = WM_USER +1; type TForm1 = class(TForm) ... private ... procedure WMStartUpdate(var Message :TMessage); message WM_STARTUPD; end; implementation ... procedure TForm1.WMStartUpdate(var Message :TMessage); begin // aqui iria o procedimento que atualmente está no evento // OnClick do botão, ou seja, o procedimento para a atualização end; procedure TForm1.Form1Create(Sender :TObject); begin ... PostMessage(Handle, WM_STARTUPD, 0, 0); end; ... end.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Ramon Bedin
Olá, pessoal estou com o seguinte problema, ultilizo DELPHI 2007.
Minha aplicação realiza atualizações via internet pelo componente
idHttp
o problema é que estou usando uma barra de progresso para mostrar o andamento do download (progressbar)
mas tenho que fazer meu aplicativo logo que ser inicializado começar a executar a atualizações
(os códigos estão em um botão, já que não consegui fazer executar automatico, tenho que clicar)
já tentei neste eventos do form
ON SHOW
ON ACTIVATE
ON CREATE
ON PAINT
mas oque acontece é que ele chega a executa, mas somente mostra a aplicação quando termina o download
(oque é errado já que quero exibir a progress bar enquanto faz o download)
não sei em que evento ou como fazer para executar automatico a atualização..
HELP ???
Link para o comentário
Compartilhar em outros sites
1 resposta 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.