var
Msg: TMsg;
begin
while ProcessMessage(Msg)
do {loop};
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;