<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=ISO-8859-1>
<META content="MSHTML 6.00.2900.2668" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi Kyley</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Yes, I do receive WM_USER messages. This is
how the DLL communicates. As I mentioned, it works perfectly if I put all
the message checking in the mainform, but it doesn't work in the separate unit,
even with the AllocateHWnd.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Here is all my relevant code.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>TMyComponent =
class(TComponent)<BR>private<BR> FHandle:
HWnd;<BR> procedure WndProc(var Message: TMessage);</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2>end;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>constructor
TMyComponent.Create;<BR>begin<BR> inherited Create(AOwner);<BR>
FHandle := AllocateHWnd(WndProc);<BR>end;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>destructor
TMyComponent.Destroy;<BR>begin<BR> DeallocateHWnd(FHandle);<BR>
inherited Destroy;<BR>end;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>procedure TMyComponent.WndProc(var
Message: TMessage);<BR>begin<BR> with Message do<BR> if Msg =
WM_USER then<BR> begin</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2> Result
:= lparam + wparam //(for example)</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2> end</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2> else Result :=
DefWindowProc(FHandle, Msg, wParam, lParam);<BR>end;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I get a couple messages when the program
loads but I never get Msg = WM_USER.</FONT></DIV>
<DIV><FONT face=Arial size=2>Do you see any problems with this
code?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>The following code, however, when placed
in the mainform does detect WM_USER messages.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>TForm1 = class(TForm)<BR>
...</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2> procedure WMUSER(var Message:
TMessage); message WM_USER;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2>end;</FONT></DIV>
<DIV><FONT face=Arial color=#000080 size=2></FONT> </DIV>
<DIV><FONT face=Arial color=#000080 size=2>procedure TForm1.WMUSER(var Message:
TMessage);<BR>begin<BR> with Message do<BR> if Msg = WM_USER then
showmessage('It Works!');<BR>end;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I've tried different combinations of the syntax,
including the <FONT color=#000080>message WM_USER;</FONT><FONT color=#000000>
bit in the unit but it doesn't make any difference at all. In fact I still
get other messages when the program starts.</FONT></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Thanks for the help.</FONT></DIV>
<DIV><FONT face=Arial size=2>Ross.</FONT></DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
<DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
<DIV
style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B>
<A title=KyleyHarris@gmail.com href="mailto:KyleyHarris@gmail.com">Kyley
Harris</A> </DIV>
<DIV style="FONT: 10pt arial"><B>To:</B> <A title=delphi@ns3.123.co.nz
href="mailto:delphi@ns3.123.co.nz">NZ Borland Developers Group - Delphi
List</A> </DIV>
<DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, June 27, 2005 10:01
PM</DIV>
<DIV style="FONT: 10pt arial"><B>Subject:</B> [Spam] Re: [DUG] Intercepting
messages in separate units</DIV>
<DIV><BR></DIV>Try the wrapper class just incase you have made a blooper. but
it is unlikely that you will ever receive a message with the ID WM_USER. that
is simply an offset to coordinate with windows messages. eg WM_USERLOGON =
WM_USER+1 is an example of a user defined message.<BR><BR>then <BR>myobject =
class(TObject)<BR> procedure WMUSERLOGON(var msg:TMessage);message
WM_USERLOGON; <BR>end;<BR><BR>the above procedure will only ever receive that
one message. You need to know exactly what messages you are expecting from the
dll.<BR><BR>if you use my wrapper, and attached an instance of the above
object to message handler it will route the messages to that
instance..<BR><BR>Ross Levis wrote:
<BLOCKQUOTE cite=mid019b01c57af5$e31e7f10$5100a8c0@levis4 type="cite">
<META content="MSHTML 6.00.2900.2668" name=GENERATOR>
<DIV><FONT face=Arial size=2>Thanks for that Kyley. I managed to
implement AllocateHWnd etc, and everything appears correct and
logical. It's picking up some Windows messages but not the WM_USER
messages being sent. WM_USER is message number 1024. I'm getting
Message.Msg = 28 and that's about it.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>I tried the same code in the mainform as a
test and this worked but only after I specified the following:</FONT></DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2>procedure MyMessage(var Message: TMessage);
message WM_USER;</FONT></DIV>
<DIV> </DIV></FONT></DIV>
<DIV><FONT face=Arial size=2>If I leave off "message WM_USER", then nothing
gets through to the procedure in the mainform at all.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>I tried this in the unit and it doesn't make
any difference. Message 28 is still getting to the procedure and no
1024.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>You can tell I'm no expert when it comes to
this. Do I need to use your fancy looking wrapper class?</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>I must be missing something.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>Thanks,</FONT></DIV>
<DIV><FONT face=Arial size=2>Ross.</FONT></DIV>
<BLOCKQUOTE
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: rgb(0,0,0) 2px solid; MARGIN-RIGHT: 0px">
<DIV
style="FONT: 10pt arial; font-size-adjust: none; font-stretch: normal">-----
Original Message ----- </DIV>
<DIV
style="BACKGROUND: rgb(228,228,228) 0% 50%; FONT: 10pt arial; font-size-adjust: none; font-stretch: normal; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial"><B>From:</B>
<A title=KyleyHarris@gmail.com href="mailto:KyleyHarris@gmail.com">Kyley
Harris</A> </DIV>
<DIV
style="FONT: 10pt arial; font-size-adjust: none; font-stretch: normal"><B>To:</B>
<A title=delphi@ns3.123.co.nz href="mailto:delphi@ns3.123.co.nz">NZ
Borland Developers Group - Delphi List</A> </DIV>
<DIV
style="FONT: 10pt arial; font-size-adjust: none; font-stretch: normal"><B>Sent:</B>
Monday, June 27, 2005 7:13 PM</DIV>
<DIV
style="FONT: 10pt arial; font-size-adjust: none; font-stretch: normal"><B>Subject:</B>
[Spam] Re: [DUG] Intercepting messages in separate units</DIV>
<DIV><BR></DIV>in the forms unit<BR><BR>function AllocateHWnd(Method:
TWndMethod): HWND; deprecated; { moved to Classes.pas
}<BR>{$EXTERNALSYM AllocateHWnd}<BR>procedure DeallocateHWnd(Wnd:
HWND);
deprecated; { moved to Classes.pas }<BR><BR><BR>read the help will
sort you out just fine<BR><BR>Ross Levis wrote:
<BLOCKQUOTE cite=mid014401c57ae7$48177ca0$5100a8c0@levis4 type="cite">
<META content="MSHTML 6.00.2900.2668" name=GENERATOR>
<STYLE></STYLE>
<DIV><FONT face=Arial size=2>I'm writing a component which communicates
with a 3rd party DLL using WM_USER messages. After loading the
DLL, I need to tell the DLL the handle to send user messages
back to, so my unit can intercept them, but I don't know where to get a
handle from. I know how to do it in the mainform of a program but
not in a separate unit. The messages sent to the mainform do not
appear to reach my unit.</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2>What do I need to do to make this
happen?</FONT></DIV>
<DIV> </DIV>
<DIV><FONT face=Arial size=2><FONT
color=#000000>Thanks,</FONT></FONT></DIV>
<DIV><FONT face=Arial size=2><FONT
color=#000000>Ross.</FONT></FONT></DIV><PRE wrap=""><HR width="90%" SIZE=4>
_______________________________________________
Delphi mailing list
<A class=moz-txt-link-abbreviated href="mailto:Delphi@ns3.123.co.nz">Delphi@ns3.123.co.nz</A>
<A class=moz-txt-link-freetext href="http://ns3.123.co.nz/mailman/listinfo/delphi">http://ns3.123.co.nz/mailman/listinfo/delphi</A>
</PRE></BLOCKQUOTE>
<P></P>
<HR>
_______________________________________________<BR>Delphi mailing
list<BR><A class=moz-txt-link-abbreviated
href="mailto:Delphi@ns3.123.co.nz">Delphi@ns3.123.co.nz</A><BR><A
class=moz-txt-link-freetext
href="http://ns3.123.co.nz/mailman/listinfo/delphi">http://ns3.123.co.nz/mailman/listinfo/delphi</A><BR></BLOCKQUOTE><PRE wrap=""><HR width="90%" SIZE=4>
_______________________________________________
Delphi mailing list
<A class=moz-txt-link-abbreviated href="mailto:Delphi@ns3.123.co.nz">Delphi@ns3.123.co.nz</A>
<A class=moz-txt-link-freetext href="http://ns3.123.co.nz/mailman/listinfo/delphi">http://ns3.123.co.nz/mailman/listinfo/delphi</A>
</PRE></BLOCKQUOTE>
<P>
<HR>
<P></P>_______________________________________________<BR>Delphi mailing
list<BR>Delphi@ns3.123.co.nz<BR>http://ns3.123.co.nz/mailman/listinfo/delphi<BR></BLOCKQUOTE></BODY></HTML>