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