[DUG] manually process Windows messages

Edward Koryagin ed_iv2001 at yahoo.co.nz
Tue Jan 26 14:08:09 NZDT 2010


WindowProc ?

Just don't forget save it and restore back.

Edward Koryagin


--- On Tue, 26/1/10, Xander (GMail) <xandervdm at gmail.com> wrote:

> From: Xander (GMail) <xandervdm at gmail.com>
> Subject: Re: [DUG] manually process Windows messages
> To: "'NZ Borland Developers Group - Delphi List'" <delphi at delphi.org.nz>
> Received: Tuesday, 26 January, 2010, 10:33 AM
> 
> 
> 
>  
>  
> 
>  
> 
>  
> 
> 
> 
> 
> 
> 
> 
>  
> 
> 
> 
> 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-bounces at delphi.org.nz
> [mailto:delphi-bounces at 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-bounces at delphi.org.nz
> [mailto:delphi-bounces at 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 J. 
> 
> 
> 
> 
> 
> 
>   
> 
> Thanks,
> 
> 
> Ross.
> 
> 
> Tauranga. 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> 
> NZ Borland Developers Group - Delphi mailing
> list
> 
> Post: delphi at delphi.org.nz
> 
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> 
> Unsubscribe: send an email to delphi-request at delphi.org.nz
> with Subject:
> unsubscribe 
> 
> 
> 
> 
> 
> 
> 
>  
> 
> 
> 
> -----Inline Attachment Follows-----
> 
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz
> with Subject: unsubscribe


      



More information about the Delphi mailing list