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