我们在最近改版的工作中获得了一定的搜索表单。它的功能是标准搜索表单的功能:在顶部的某些框中输入一些条件,点击“搜索”按钮,然后在下面的网格中显示结果。但它的功能很丑陋而且非常有限,所以我的一位同事在重新开始工作之前就重建了它。现在我试图完成最后几个细节。
其中一项更改是使用功能更强大的TListBox
替换旧TVirtualStringTree
网格。但是在这个过程中,它似乎已经破坏了一些东西:之前,如果你点击网格中的一行(给予焦点放置网格)并点击 Enter ,相应的事件处理程序将触发并处理输入后,打开所选项目的详细信息视图。但是,在此网格中,按 Enter 会导致带有TButton
属性的表单上的Default = true
触发其OnClick
。
当TVirtualStringTree
具有输入焦点时,如何使NotificationCenter.default.addObserver(self, selector: Selector(("uploaded")), name: NSNotification.Name(rawValue: "uploaded"), object: nil)
优先,这样它才会响应用户按Enter键之前(最好是代替)将其发送到表单?
答案 0 :(得分:5)
处理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
属性来拦截其窗口过程。