[英]ActiveX control not processing arrow keys correctly when hosted in Delphi application
我的应用程序中托管了一个ActiveX控件。 使用Delphi Import组件菜单导入控件。
ActiveX控件包含用于用户输入的编辑框。 当我在自己的沙盒应用程序(而不是Delphi应用程序)中运行控件时,箭头键按预期工作,在编辑控件中移动光标。
但是,当我运行我的Delphi应用程序时,箭头键行为似乎发生了变化。 它似乎更像是一个tab键。
我认为这是因为VCL处理击键的方式。 任何想法如何解决这个问题?
控件应该处理WM_GETDLGCODE
并在结果中包含至少DLGC_WANTARROWS
。
此外,如果ActiveX控件是用Delphi编写的并且在其ControlStyle
使用csReflector
,则应该使用WM_KEYDOWN
和WM_KEYUP
(以及任何其他必需的)消息处理程序将其TReflectorWindow
到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的测试中工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.