ActiveX控件在Delphi应用程序中托管时未正确处理箭头键

ActiveX控件在Delphi应用程序中托管时未正确处理箭头键,delphi,activex,delphi-2009,Delphi,Activex,Delphi 2009,我有一个ActiveX控件托管在我们的应用程序中。控件是使用Delphi导入组件菜单导入的 ActiveX控件包含一个用于用户输入的编辑框。当我在自己的沙盒应用程序(不是Delphi应用程序)中运行控件时,箭头键按预期工作,在编辑控件中移动光标。 然而,当我运行我的Delphi应用程序时,箭头键的行为似乎发生了变化。它看起来更像是一个tab键 我认为这是因为VCL处理按键的方式。有没有办法解决这个问题?控件应该处理WM\u GETDLGCODE,并至少在结果中包含DLGC\u WANTARROW

我有一个ActiveX控件托管在我们的应用程序中。控件是使用Delphi导入组件菜单导入的

ActiveX控件包含一个用于用户输入的编辑框。当我在自己的沙盒应用程序(不是Delphi应用程序)中运行控件时,箭头键按预期工作,在编辑控件中移动光标。
然而,当我运行我的Delphi应用程序时,箭头键的行为似乎发生了变化。它看起来更像是一个tab键


我认为这是因为VCL处理按键的方式。有没有办法解决这个问题?

控件应该处理
WM\u GETDLGCODE
,并至少在结果中包含
DLGC\u WANTARROWS

此外,如果ActiveX控件是用Delphi编写的,并且在其
控件样式中使用
csReflector
,则应使用
WM\u KEYDOWN
WM\u keydup
(以及任何其他要求)重新构建该控件添加到
AxCtrls
单元中的
TReflectorWindow
类的消息处理程序,用于将消息委托给VCL控件:

procedure TReflectorWindow.WMKeyDown(var Message: TMessage);
begin
  Message.Result := FControl.Perform(Message.Msg, Message.WParam, Message.LParam);
end;

procedure TReflectorWindow.WMKeyUp(var Message: TMessage);
begin
  Message.Result := FControl.Perform(Message.Msg, Message.WParam, Message.LParam);
end;

这似乎足以在我使用D2007的测试中工作。

我应该提到这个控件不是用Delphi编写的。我将尝试挂接WindowProc以查看WM_GETDLGCODE消息的情况