Hi Kyley
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.
Here is all my relevant
code.
TMyComponent =
class(TComponent)
private
FHandle:
HWnd;
procedure WndProc(var Message:
TMessage);
end;
constructor
TMyComponent.Create;
begin
inherited
Create(AOwner);
FHandle :=
AllocateHWnd(WndProc);
end;
destructor
TMyComponent.Destroy;
begin
DeallocateHWnd(FHandle);
inherited
Destroy;
end;
procedure
TMyComponent.WndProc(var Message: TMessage);
begin
with Message do
if Msg = WM_USER
then
begin
Result := lparam + wparam //(for example)
end
else Result :=
DefWindowProc(FHandle, Msg, wParam,
lParam);
end;
I get a couple messages
when the program loads but I never get Msg
= WM_USER.
Do you see any problems with this
code?
The following code,
however, when placed in the mainform does detect WM_USER
messages.
TForm1 =
class(TForm)
...
procedure
WMUSER(var Message: TMessage); message WM_USER;
end;
procedure
TForm1.WMUSER(var Message: TMessage);
begin
with
Message do
if Msg = WM_USER then showmessage('It
Works!');
end;
I've tried different combinations
of the syntax, including the message
WM_USER; bit in the unit but it
doesn't make any difference at all. In fact I still get
other messages when the program starts.
Thanks for the help.
Ross.
-----
Original Message -----
Sent:
Monday, June 27, 2005 10:01 PM
Subject:
[Spam] Re: [DUG] Intercepting messages in separate units
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.
then
myobject = class(TObject)
procedure
WMUSERLOGON(var msg:TMessage);message WM_USERLOGON;
end;
the above procedure will only ever receive
that one message. You need to know exactly what messages you
are expecting from the dll.
if you use my wrapper, and
attached an instance of the above object to message handler it
will route the messages to that instance..
Ross Levis
wrote:
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.
I tried the same code in
the mainform as a test and this worked but only after I
specified the following:
procedure MyMessage(var
Message: TMessage); message WM_USER;
If I leave off "message
WM_USER", then nothing gets through to the procedure in the
mainform at all.
I tried this in the unit and it
doesn't make any difference. Message 28 is still
getting to the procedure and no 1024.
You can tell I'm no expert when
it comes to this. Do I need to use your fancy looking
wrapper class?
I must be missing
something.
Thanks,
Ross.
-----
Original Message -----
Sent:
Monday, June 27, 2005 7:13 PM
Subject:
[Spam] Re: [DUG] Intercepting messages in separate
units
in the forms unit
function
AllocateHWnd(Method: TWndMethod): HWND; deprecated;
{ moved to Classes.pas }
{$EXTERNALSYM
AllocateHWnd}
procedure DeallocateHWnd(Wnd:
HWND);
deprecated; { moved to Classes.pas }
read
the help will sort you out just fine
Ross Levis
wrote:
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.
What do I need to do to
make this happen?
Thanks,
Ross.
_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi
_______________________________________________
Delphi
mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi
_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi
_______________________________________________
Delphi
mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi
_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi