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