Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

URLDownloadToFile Dialog hängt.

  Alt 26. Jan 2019, 00:45
Kleines Problem.
Ich verwende diesen Tip aus der CodeLibrary etwas angepasst auf meine Bedürfnisse.

Meine Frage ist wie oft wird die Callback aufgerufen?
Denn mein Dialog hängt kann ihn nicht bedienen trotz WinprocessMessages..

Delphi-Quellcode:
function TBindStatusCallback.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
  szStatusText: LPCWSTR): HResult;
var
  szST: string;
begin

  if FTimeouCheck then
  begin
    if GetCurrentTime > FTimeoutValue then
    begin
      Result := E_ABORT;
      szST := 'TimeOut.. no TMDB_backdrop is loaded';
      SendMessage(GetDlgItem(hDlg, ID_DOWNLOADTEXT), WM_SETTEXT, 0, LONG_PTR(szST));
      Sleep(3000);
      SendMessage(hDlg, WM_CLOSE, 0, 0);
      hDlg := 0;
      Exit;
    end;
  end;

   case ulStatusCode of

     BINDSTATUS_CONNECTING:
     begin
       szST := 'Connected to Server ' + szStatusText;
       SendMessage(GetDlgItem(hDlg, ID_DLG_INFOSTATUS), WM_SETTEXT, 0, LONG_PTR(szST));

       if(FUserCancel) then
       begin
         Result := E_ABORT;
         exit;
       end;
     end;

     BINDSTATUS_BEGINDOWNLOADDATA:
       begin
         // reset progressbar ******* hier inkrementiere ich die Value weil BINDSTATUS_DOWNLOADINGDATA nie aufgerufen wird.
         inc(Value, 50);
         ProgressBar.Value := Value;
         SKAERO_InvalidateRect(ProgressBar.Handle, false);
         // show current action
         case Value of
           50:
             szST := 'Downloading TMDB_backdrop';
           100:
             szST := 'Downloading TMD_Poster';
         end;

         SendMessage(GetDlgItem(hDlg, ID_DOWNLOADTEXT), WM_SETTEXT, 0, LONG_PTR(szST));

         // download exit by the user?
         if(FUserCancel) then
           begin
             Result := E_ABORT;
             exit;
           end;
       end;

     BINDSTATUS_DOWNLOADINGDATA:
       begin
         // update progress
         SendMessage(GetDlgItem(hDlg, ID_PROGRESS), PBM_SETPOS, MulDiv(ulProgress, 100, ulProgressMax), 0);

         // download exit by the user?
         if(FUserCancel) then
           begin
             Result := E_ABORT;
             exit;
           end;
       end;

     BINDSTATUS_ENDDOWNLOADDATA:
       begin
         if Value = 100 then
         begin
           SendMessage(hDlg, WM_CLOSE, 0, 0);
           hDlg := 0;
         end;
       end;
   end;

    // message pump
   WinProcessMessages;

   Result := S_OK;
end;
Delphi-Quellcode:
procedure WinProcessMessages;
var
  ProcMsg: TMsg;
begin
  while PeekMessage(ProcMsg, 0, 0, 0, PM_REMOVE) do
  begin
    if (ProcMsg.message = WM_QUIT) then
      Exit;
    TranslateMessage(ProcMsg);
    DispatchMessage(ProcMsg);
  end;
end;
BINDSTATUS_DOWNLOADINGDATA wird auch niemals aufgerufen.
FUserCancel kann ich auch nicht bedienen weil der Dialog hängt.
Gib es da keine bessere Alternative um 2 Images zu laden ?

gruss

Geändert von EWeiss (26. Jan 2019 um 03:52 Uhr)
  Mit Zitat antworten Zitat