[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