我的应用程序中托管了一个ActiveX控件。使用Delphi Import组件菜单导入控件。
ActiveX控件包含用于用户输入的编辑框。当我在自己的沙箱应用程序(而不是Delphi应用程序)中运行控件时,箭头键按预期在编辑控件中移动光标。 但是,当我运行我的Delphi应用程序时,箭头键行为似乎发生了变化。它似乎更像是一个tab键。
我认为这是因为VCL处理击键的方式。任何想法如何解决这个问题?
答案 0 :(得分:0)
控件应处理WM_GETDLGCODE
并在结果中包含至少DLGC_WANTARROWS
。
此外,如果ActiveX控件是用Delphi编写的并且在csReflector
中使用ControlStyle
,那么它应该使用WM_KEYDOWN
和WM_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的测试中工作。