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

标签 delphi activex delphi-2009

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

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

我认为这是由于 VCL 处理击键的方式造成的。有什么想法可以解决这个问题吗?

最佳答案

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

此外,如果 ActiveX 控件是用 Delphi 编写的,并且在其 ControlStyle 中使用 csReflector,则应使用 WM_KEYDOWN 重新构建它,并且WM_KEYUP(以及任何其他必需的)消息处理程序添加到 AxCtrls 单元中的 TReflectorWindow 类,以将消息委托(delegate)给 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 - ActiveX 控件在 Delphi 应用程序中托管时无法正确处理箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222937/

相关文章:

Delphi RAD Studio 序列号

delphi - TActionMainMenuBar 渐变绘画

.net - 未找到 DllRegisterServer 入口点 - 注册 Vb.NET DLL 时?

delphi - 使用 Delphi 打开 ANSI 文件并保存 Unicode 文件

delphi - 如何更改Delphi Build配置?

delphi - CxClasses 单元自动添加到 Uses 部分

winapi - 如何从 IWebBrowser2 获取 documentenCompleted 事件?

datagrid - VB6 更好的网格支持行和列跨越?

delphi - 从外部应用程序将数据写入 Delphi TStringGrid

delphi - Indy SMTP 服务器 - 如何检测 CC 和 BCC 收件人?