gpt4 book ai didi

delphi - 如何使 TVirtualStringTree 以更高的优先级处理按键?

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

我们正在使用某种搜索表单,最近对其进行了修改。它的功能是标准搜索表单的功能:在顶部的一些框中输入一些条件,点击“搜索”按钮,然后在下面的网格中显示结果。但它很丑陋,而且功能非常有限,所以我的一位同事在离开去寻找新工作之前重建了它。现在我正在努力完成最后的一些细节。

其中一项更改是用功能更强大的 TVirtualStringTree 替换旧的 TListBox 网格。但在这个过程中,它似乎破坏了一些东西:之前,如果您单击网格中的一行(使网格处于焦点状态)并按 Enter,相应的事件处理程序将触发并处理根据您的输入,打开所选项目的详细信息 View 。然而,在此网格中,按 Enter 会导致表单上具有 Default = true 属性的 TButton 触发其 OnClick 改为。

如何使 TVirtualStringTree 在具有输入焦点时优先,以便在将其分派(dispatch)到表单之前(最好不是)响应用户按下 Enter 本身?

最佳答案

处理WM_GETDLGCODE消息并在返回值中包含 DLGC_WANTALLKEYS。例如:

procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;

....

procedure TMyControl.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
inherited;
Message.Result := DLGC_WANTALLKEYS;
end;

根据您的控件是否已处理此消息并返回 0 以外的内容,您可能需要使用:

Message.Result := Message.Result or DLGC_WANTALLKEYS;

如果您不想修改此类的代码,则可以使用插入器或设置控件的 WindowProc 属性来拦截其窗口过程。

关于delphi - 如何使 TVirtualStringTree 以更高的优先级处理按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39984163/

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