Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

AW: URLDownloadToFile Dialog hängt.

  Alt 26. Jan 2019, 15:09
Zitat:
Ich kenne mich in dem Bereich jetzt nicht wirklich aus, deine Botschaftenschleife sieht aber etwas komisch/verdächtig aus:
Hmm.. Du kennst ich nicht wirklich aus möchtest mir aber sagen das meine Messagequeue falsch ist?
Nun denn. Danke.

Sorry.. Hilft mir nicht wirklich weiter.
Schau mal was Application.ProcessMessages; denn so macht.

Ich könnte es auch so auslegen ändert aber nichts daran das mein Dialog hängt.

Delphi-Quellcode:
if(PeekMessage(msg, hDlg, 0, 0,PM_REMOVE)) then
  IsDialogMessage(hDlg, msg);
Der einzige unterschied ist hier das ich mir
Delphi-Quellcode:
TranslateMessage(ProcMsg);
DispatchMessage(ProcMsg);
sparen kann.
Zitat:
IsDialogMessage must not be passed to the TranslateMessage or DispatchMessage function.
Nun ich behandle es aber gerne mit.. Deshalb meine Funktion!
Das ich WM_QUIT mit behandle ist für mich so in Ordnung zur Sicherheit.

PS:
Nur zu deiner Information!
Delphi-Quellcode:
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode=True)]
function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
  Handled: Boolean;
  Unicode: Boolean;
  MsgExists: Boolean;
begin
  Result := False;

  MsgExists := PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE);

  if MsgExists or PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) then
  begin
    Unicode := (Msg.hwnd = 0) or IsWindowUnicode(Msg.hwnd);

    if not MsgExists then
    begin
      if Unicode then
        MsgExists := PeekMessageW(Msg, 0, 0, 0, PM_REMOVE)
      else
        MsgExists := PeekMessageA(Msg, 0, 0, 0, PM_REMOVE);
    end;

    if MsgExists then
    begin
      Result := True;
      if Msg.Message <> WM_QUIT then
      begin
        Handled := False;
        if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
        if not IsPreProcessMessage(Msg) and not IsHintMsg(Msg) and
          not Handled and not IsMDIMsg(Msg) and
          not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
        begin
          TranslateMessage(Msg);
          if Unicode then
            DispatchMessageW(Msg)
          else
            DispatchMessageA(Msg);
        end;
      end
      else
      begin
  {$IF DEFINED(CLR)}
        if Assigned(FOnShutDown) then FOnShutDown(self);
        DoneApplication;
  {$IFEND}
        FTerminate := True;
      end;
    end;
  end;
end;
gruss

Geändert von EWeiss (11. Jul 2019 um 16:55 Uhr)
  Mit Zitat antworten Zitat