gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:36:45 26 4
gpt4 key购买 nike

我的应用程序中托管了一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com