Zitat:
Der Unterschied zwischen
VCL's Process Message und deiner ist, dass die von Delphi nur dann greift,
wenn dein Programm gerade nichts zu tun hat. Deine läuft in einem Eventhandler immer und solange,
bis deine Anwendung beendet wird.
Entschuldige das ist
Blödsinn! nicht richtig.
Sie läuft nur solange wie meine Callback aktiv ist und wird auch nur dann aufgerufen.
Und sie soll sicherstellen das andere Messagen weiterhin verarbeitet werden können.
Was nicht in der Callback funktioniert da diese in zu unterschiedlichen Intervallen aufgerufen wird.
Es ist nicht GetMessage sondern PeekMessage.
Im ersten bei GetMessage würde ich dir recht geben diese Queue läuft bis die Anwendung beendet ist.
Zitat:
z. B. im Kontext der ICS Socket Komponenten wird soweit ich mich erinnere immer empfohlen, bloß nicht
Application.ProcessMessages oder ähnliches innerhalb des Handlers aufzurufen. Das kann zum erneuten
Aufruf des Handlers für die selbe Nachricht führen (ich fragte mich zwa schon immer wieso, weil die
Nachricht doch zu dem Zeitpunkt eigentlich schon aus der Warteschlange raus sein sollte, aber es scheint
tatsächlich zu Problemen zu führen).
Würde ich das überhaupt nicht tun würde mein Fenster sich niemals aktualisieren.
Das Problem ist die Callback das sie nicht kontinuierlich aufgerufen wird sondern nur nach einer bestimmten zeit.
Deshalb bekomme ich keinen zugriff auf meinen Dialog.
Zitat:
Das kann zum erneuten Aufruf des Handlers für die selbe Nachricht führen
Wenn es mal so wäre dann würde mein Dialog nicht hängen!
Ich habe es jetzt erstmal so gelöst ändert nichts daran das der Dialog hängt und ich keine Eingaben über den Button tätigen kann
aber so wird der Dialog zumindest geschlossen wenn das TIMEOUT abgelaufen ist.
Delphi-Quellcode:
BindStatusCallback := TBindStatusCallback.Create;
BindStatusCallback.FTimeouCheck := True;
BindStatusCallback.FTimeoutValue := GetCurrentTime + TIMEOUT;
Status := URLDownloadToFileW(
nil,
Url, FBackdroppath, 0, BindStatusCallback);
//… callback
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;
gruss