Ir para conteúdo
Fórum Script Brasil
  • 0

Executar a aplicãção automaticamente


Guest Ramon Bedin

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

  • 0

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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...