Sample code for 30+ languages & platforms
Delphi ActiveX

HTTP Download with Progress Event Callbacks

See more HTTP Examples

Downloads a file via HTTP or HTTPS and uses event callbacks to monitor progress.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.httpAbortCheck(ASender: TObject;  out abort: Integer);
begin
    // TThread.Synchronize provides safety for callbacks that occur in a background thread..
    TThread.Synchronize(nil, procedure begin
      
      end);
end;

procedure TForm1.httpPercentDone(ASender: TObject;  percentDone: Integer; out abort: Integer);
begin
    // TThread.Synchronize provides safety for callbacks that occur in a background thread..
    TThread.Synchronize(nil, procedure begin
      Memo1.Lines.Add('Percent Done: ' + IntToStr(percentDone));
      // Explicitly abort at 25% or greater.
      // Remove this to allow for the HTTP download to run to completion.
      if (percentDone > 25) then
        begin
          abort := 1;
        end;
      end);
end;

procedure TForm1.httpProgressInfo(ASender: TObject;  const name: WideString; const value: WideString);
begin
    // TThread.Synchronize provides safety for callbacks that occur in a background thread..
    TThread.Synchronize(nil, procedure begin
      Memo1.Lines.Add(name + ': ' + value);
      end);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
http: TChilkatHttp;
localFilePath: WideString;

begin
    success := 0;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http := TChilkatHttp.Create(Self);
    http.OnAbortCheck := httpAbortCheck;
    http.OnPercentDone := httpPercentDone;
    http.OnProgressInfo := httpProgressInfo;

    // Set a heartbeat in milliseconds 
    http.HeartbeatMs := 200;

    // Download a file...
    localFilePath := 'qa_output/Python-3.4.4.tar.xz';
    success := http.Download('https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tar.xz',localFilePath);
    if (success = 0) then
      begin
        Memo1.Lines.Add(http.LastErrorText);
        Exit;
      end;

    Memo1.Lines.Add('OK!');
end;