{Listing 3: A simplified (no translations) message loop} procedure Application.Run var Backgrnd: pointer; Message: TMessage; begin Backgrnd := Dynamic(TypeOf(Self), di_Background); { "di" for "dynamic index", of course. (When in Windows, name } { like Windows.) I use $7FFF, as it seems rather unlikely that } { any app will ever need to define so many internal messages. } if (@ Application.Background) = Backgrnd {Is there a BACKGROUND method that actually does anything?} then while GetMessage(Message, 0, 0, 0) do {Nothing but respond to events} DispatchMessage(Message) else repeat {Respond to events AND do background processing} if PeekMessage(Message, 0, 0, 0, pm_Remove) then DispatchMessage(Message) else NiladicMethod(Backgrnd)(Self); {Cheaper to do DMT lookup _once_} until Message.Message = wm_Quit; end;