Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Замена Application.ProcessMessages

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Замена штатного Application.ProcessMessages
 
Хорошо использовать в DLL или бесформенных приложениях,
если внутри цикла возникает необходимость в использовании Application.ProcessMessages.
 
Зависимости: Windows, Messages
Автор:       ssk, ucad@pisem.net, ICQ:166758074, Харьков
Copyright:   составлено из кусков кода Borland
Дата:        7 сентября 2004 г.
***************************************************** }
 
procedure
ProcessMessagesEx;
 
function IsKeyMsg(var Msg: TMsg): Boolean;
 
const
    CN_BASE
= $BC00;
 
var
   
Wnd: HWND;
 
begin
   
Result := False;
   
with Msg do
     
if (Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST) then
       
begin
         
Wnd := GetCapture;
         
if Wnd = 0 then
           
begin
             
Wnd := HWnd;
             
if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then
               
Result := True;
           
end
             
else
               
if (LongWord(GetWindowLong(Wnd, GWL_HINSTANCE)) = HInstance) then
                 
if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then
                   
Result := True;
       
end;
 
end;
 
 
function ProcessMessage(var Msg: TMsg): Boolean;
 
begin
   
Result := False;
   
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
     
begin
       
Result := True;
       
if Msg.Message <> WM_QUIT then
         
if not IsKeyMsg(Msg) then
           
begin
             
TranslateMessage(Msg);
             
DispatchMessage(Msg);
           
end;
     
end;
 
end;
 
var
 
Msg: TMsg;
begin
 
while ProcessMessage(Msg) do {loop};
end;

Взято с Vingrad.ru https://forum.vingrad.ru