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

时间:2010-02-08 16:09:31

标签: delphi activex delphi-2009

我的应用程序中托管了一个ActiveX控件。使用Delphi Import组件菜单导入控件。

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

我认为这是因为VCL处理击键的方式。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

控件应处理WM_GETDLGCODE并在结果中包含至少DLGC_WANTARROWS

此外,如果ActiveX控件是用Delphi编写的并且在csReflector中使用ControlStyle,那么它应该使用WM_KEYDOWNWM_KEYUP(和任何其他)重建必需的)消息处理程序添加到TReflectorWindow单元中的AxCtrls类,以将消息委托给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的测试中工作。