我有以下(简化的)过程,使所期望的窗口之上的所有其它正常窗口:为什么BringWindowToTop与VCL Ribbon结合不能正常工作?
function focusWindow(): boolean;
var
h: Hwnd;
begin
result := true;
h := findwindow('Notepad', 'Unbenannt - Editor');
if h <> 0 then
BringWindowToTop(h);
end;
我在下面的例子中应用程序中使用此:
在顶部,你可以看到我的示例应用程序。后面有一个资源管理器窗口,后面还有一个空的记事本。如上面的代码所示,我想将记事本窗口移到前面。
如果我把我的函数从按钮的事件处理程序
procedure TForm4.btnFocusClick(Sender: TObject);
begin
focusWindow();
end;
一切正常。空白的记事本窗口向前移动,后面是示例应用程序,浏览器位于其他两个窗口的后面。
但是如果我使用vcl功能区控件并将操作分配给一个命令按钮,它只能部分工作。
procedure TForm4.actDemoExecute(Sender: TObject);
begin
focusWindow();
end;
记事本窗口向上移动,离开浏览器窗口后面。但是,程序停止 - 记事本窗口隐藏在我自己的应用程序后面。这里发生了什么?
我试过用Windows 10和Delphi 10.1柏林,它适用于我的两种方式。 – EugeneK
谢谢你重试它。我无法告诉您更多关于我的环境的信息,我也在使用Windows 10,版本1607.您是否在操作管理器中使用了操作?因为我怀疑导致此行为的动作的内置更新机制。 – ventiseis
是的,我只用一个动作就使用了Ribbon和ActionManager。 – EugeneK