Q&A

  • [질문] 다운로드시 진행상태 표시하기
델파이 2010버전에서
urlDownloadToFile을 이용하여 http 서버에 있는 파일을 다운로드하는 프로그램입니다.
궁금한 것은 프로그레스바에서 진행상태를 보여줘야 되는데
중간에 진행되는 상황은 보이지 않고, 마지막에서만 보여집니다.
Application.ProcessMessages가 있는데도 않됩니다.

아래는 해당부분 소스입니다.
<!--CodeS-->
function         TMyStatus.OnProgress(ulProgress, ulProgressMax, ulStatusCode :ULONG; szStatusText :LPCWSTR) : HResult; StdCall;
var
  BindStatus  : String;
begin
  case  ulStatusCode  of
    1 : BindStatus  :=  '1 : Finding Resource';
    2 : BindStatus  :=  '2 : Connecting';
    3 : BindStatus  :=  '3 : Redirecting';
    4 : BindStatus  :=  '4 : Begin Download Data';
    5 : BindStatus  :=  '5 : Downloading Data';
    6 : BindStatus  :=  '6 : End Download Data';
    7 : BindStatus  :=  '7 : Begin Download Components';
    8 : BindStatus  :=  '8 : Installing Components';
    9 : BindStatus  :=  '9 : End Download Components';
   10 : BindStatus  :=  '10 : Using Cached Copy';
   11 : BindStatus  :=  '11 : Sending Request';
   12 : BindStatus  :=  '12 : CLASSID Available';
   13 : BindStatus  :=  '13 : MIMEType Available';
   14 : BindStatus  :=  '14 : Cache Filename Available';
  end;

        if        Assigned(frmUpdateHttp)        then
                begin
      if  FileSizeTotal <>  0 then
        begin
          if  ulStatusCode  = 5 then  //  데이터 다운로드 중
            begin
              FileSizeCurrent :=  FileSizeCurrSum + ulProgress;
            end
          else
          if  ulStatusCode  = 6 then  //  데이터 다운로드 완료
            begin
              FileSizeCurrSum :=  FileSizeCurrSum + ulProgress;
              FileSizeCurrent :=  FileSizeCurrSum;
            end;

            frmUpdateHttp.ProgressBarCurrent.Smooth := True;
            frmUpdateHttp.ProgressBarCurrent.Max       := ulProgressMax;
            frmUpdateHttp.ProgressBarCurrent.Position := ulProgress;

            frmUpdateHttp.ProgressBarTotal.Smooth      := True;
            frmUpdateHttp.ProgressBarTotal.Max            := FileSizeTotal;
            frmUpdateHttp.ProgressBarTotal.Position      := FileSizeCurrent;

            Application.ProcessMessages;
        end;
       end;

        if        frmUpdateHttp.ButtonCancel.Tag        =        0        then
                begin
                        Result        :=        S_OK;
                end
        else
                begin
                        Result        :=        E_ABORT;        // 전송을 중간에 취소할때 사용 (Canceled by Returning E_ABORT)
                end;
end;
<!--CodeE-->
0  COMMENTS
  • profile cdrd
    2010/07/24 20:39
  • Views2681
    Likes0
    Comments0
    Reports0
  • Tag List
  • 목록으로