我知道要用到IBindStatusCallback接口,但是到底怎么用,哪位大虾有Delphi例子的,马上给分!

解决方案 »

  1.   

    frmUpdate = class(TForm,IBindStatusCallback)
        ImgTop: TImage;
        LblTop: TLabel;
        SpdBtnClose: TSpeedButton;
        Bevel1: TBevel;
        plStatus: TPanel;
        plInfo: TPanel;
        btnCancel: TFlatSpeedButton;
        tmrUdapte: TTimer;
        plProgress: TPanel;
        procedure tmrUdapteTimer(Sender: TObject);
        procedure btnCancelClick(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure ImgTopMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
        procedure SpdBtnCloseClick(Sender: TObject);
      private
        function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
        function GetPriority(out nPriority): HResult; stdcall;
        function OnLowResource(reserved: DWORD): HResult; stdcall;
        function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;szStatusText: LPCWSTR): HResult; stdcall;
        function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
        function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
        function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;stgmed: PStgMedium): HResult; stdcall;
        function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
        function GetHTMLFile(URL, FileName: string): HRESULT;
      public
        { Public declarations }
      end;//------------------------------------------------------------------------------
    function TfrmUpdate.GetHTMLFile( URL , FileName : string) : HRESULT;
    var
      status : IBindStatusCallback ;
    begin
      status := IBindStatusCallback(self);
      result := UrlDownLoadToFile(nil, pChar( URL ) ,pChar( FileName ),0 ,Status );
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.GetBindInfo(out grfBINDF: DWORD;
      var bindinfo: TBindInfo): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.GetPriority(out nPriority): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.OnDataAvailable(grfBSCF, dwSize: DWORD;
      formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.OnLowResource(reserved: DWORD): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.OnObjectAvailable(const iid: TGUID;
      punk: IInterface): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.OnStartBinding(dwReserved: DWORD;
      pib: IBinding): HResult;
    begin
       result := E_NOTIMPL;
    end;//------------------------------------------------------------------------------
    function TfrmUpdate.OnStopBinding(hresult: HResult;
      szError: LPCWSTR): HResult;
    begin
       result := E_NOTIMPL;
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtActns, ComCtrls;type
      TForm1 = class(TForm)
        ProgressBar1: TProgressBar;
        Label1: TLabel;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        DownLoadURL : TDownLoadURL;
        procedure DownloadProgress(Sender: TDownLoadURL; Progress,
          ProgressMax: Cardinal; StatusCode: TURLDownloadStatus; StatusText: String;
          var Cancel: Boolean);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DownloadProgress(Sender: TDownLoadURL; Progress,
      ProgressMax: Cardinal; StatusCode: TURLDownloadStatus;
      StatusText: String; var Cancel: Boolean);
    begin
      Label1.Caption := StatusText;
      ProgressBar1.Max := ProgressMax;
      ProgressBar1.Position := Progress;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      DownLoadURL := TDownLoadURL.Create(self);
      with DownLoadURL do
      begin
        FileName := 'c:\p.exe';
        URL := 'http://www.teechart.net/files/vcl/public/TeeChartPro6/TeeChart601Delphi6_RTL3.EXE';
        OnDownloadProgress := DownloadProgress;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      DownLoadURL.ExecuteTarget(DownLoadURL);
    end;end.  
      

  3.   

    HRESULT URLDownloadToFile(
        LPUNKNOWN pCaller,
        LPCTSTR szURL,
        LPCTSTR szFileName,
        DWORD dwReserved,
        LPBINDSTATUSCALLBACK lpfnCB
    );
    最后一个参数就是回调函数,你可以写一个让它回调,在里面处理你的进度条即可。