Here is an extract from a class from a very old piece of code I have. I vaguely remember researching the same topic at the time. See whether this will work for you (just call the ProcessMessages() method):
//-------------------------------------------------------------------------- ---- procedure TMain.ProcessMessages; begin while ProcessMessage do {loop}; end; //-------------------------------------------------------------------------- ---- function TMain.ProcessMessage: Boolean; var Msg: TMsg; begin Result := False; if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then begin Result := True; if Msg.Message <> WM_QUIT then begin if not IsHintMsg(Msg) and not IsKeyMsg(Msg) then begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; end; end; //-------------------------------------------------------------------------- ---- function TMain.IsHintMsg(var Msg: TMsg): Boolean; begin with Msg do Result := ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) or ((Message = CM_ACTIVATE) or (Message = CM_DEACTIVATE)) or (Message = CM_APPKEYDOWN) or (Message = CM_APPSYSCOMMAND) or (Message = WM_COMMAND) or ((Message > WM_MOUSEMOVE) and (Message <= WM_MOUSELAST)) or (Message = WM_NCMOUSEMOVE); end; //-------------------------------------------------------------------------- ---- function TMain.IsKeyMsg(var Msg: TMsg): Boolean; var WND: HWND; begin Result := False; with Msg do if (Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST) and (GetCapture = 0) then begin Wnd := HWnd; if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then Result := True; end; end; Cheers Xander _____ From: delphi-boun...@delphi.org.nz [mailto:delphi-boun...@delphi.org.nz] On Behalf Of Jolyon Smith Sent: Tuesday, January 26, 2010 10:24 AM To: 'NZ Borland Developers Group - Delphi List' Subject: Re: [DUG] manually process Windows messages I wouldn't expect that at all. I forget the details of why, but using the Forms unit unavoidably drags in a whole host of VCL code. This is easily tested, just try compiling: program Vacuum; begin end. And you get an EXE of 22KB. Simply adding a "uses Forms;", even without referencing anything from the Forms unit in the "code" and your equally non-functional vacuum.exe "explodes" to 382KB (BDS2006). Having said that, 382KB is not exactly excessive "bloat" in my book. So my question for the original poster is what criteria is it that demands that the executable absolutely has to avoid this overhead? From: delphi-boun...@delphi.org.nz [mailto:delphi-boun...@delphi.org.nz] On Behalf Of John Bird Sent: Tuesday, 26 January 2010 9:55 a.m. To: NZ Borland Developers Group - Delphi List Subject: Re: [DUG] manually process Windows messages I would expect if you specify Forms (to get Application.ProcessMessages) and only call that and nothing else from Forms then you will only get what functions are needed linked into your application - I suggest you try it and see how much bigger it makes the application. John I've looked at what Application.ProcessMessages does but I'm not sure what I need to get this working. Any thoughts appreciated, or some code :-). Thanks, Ross. Tauranga. _____ _______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe
_______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: delphi@delphi.org.nz Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to delphi-requ...@delphi.org.nz with Subject: unsubscribe