gpt4 book ai didi

delphi - 从 Delphi 组件捕获 WM_COPYDATA

转载 作者:行者123 更新时间:2023-12-03 15:50:46 26 4
gpt4 key购买 nike

我正在尝试编写一个组件,通过 WM_COPYDATA 在应用程序之间发送字符串消息。我想捕获 WM_COPYDATA,但这不起作用:

TMyMessage = class(TComponent)
private
{ Private declarations }

protected
{ Protected declarations }

procedure WMCopyData(var Msg : TMessage); message WM_COPYDATA;

end;

在Google上搜索了很多,找到了一些使用wndproc的引用。我尝试过,但它也不起作用。

TMyMessage = class(TComponent)

protected
{ Protected declarations }

procedure WMCopyData(var Msg : TMessage); message WM_COPYDATA;
procedure WndProc(var Msg: TMessage);

end;

procedure TMyMessage.WndProc(var Msg: TMessage);
begin
//inherited;
if Msg.Msg = WM_COPYDATA then
WMCopyData(Msg);
end;

请帮忙看看这是怎么回事?

最佳答案

到目前为止,您所拥有的一切都很好,但您需要首先安排将消息传递到您的组件。这需要一个窗口句柄。调用AllocateHWnd并将其传递给组件的 WndProc 方法。它将返回一个窗口句柄,您应该在组件被销毁时销毁该窗口句柄。

constructor TMyMessage.Create(AOwner: TComponent);
begin
inhreited;
FHandle := AllocateHWnd(WndProc);
end;

destructor TMyMessage.Destroy;
begin
DeallocateHWnd(FHandle);
inherited;
end;

您可以让 TObject 为您执行此操作,而不是直接测试每条消息。这就是 Dispatch方法是为了.向它传递一个 TMessage 记录,它会为您找到并调用相应的消息处理程序方法。如果没有这样的处理程序,它将调用 DefaultHandler 来代替。覆盖可以调用 DefWindowProc

procedure TMyMessage.WndProc(var Message);
begin
Dispatch(Message);
end;

procedure TMyMessage.DefaultHandler(var Message);
begin
TMessage(Message).Result := DefWindowProc(Self.Handle, TMessage(Message).Msg,
TMessage(Message).WParam, TMessage(Message).LParam);
end;

关于delphi - 从 Delphi 组件捕获 WM_COPYDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com