在多表单应用程序中更改窗口顺序

问题描述 投票:2回答:1

我有一个带有一些非模态形式的应用程序,每个都有自己的图标。我需要任务栏上所有表单的图标,这些图标在最小化/恢复时不会消失,经过一些测试后,这是我的解决方案。

应用

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

TForm1 - 主要形式与一个TButton

procedure TForm1.btn1Click(Sender: TObject);
begin
  TForm2.Create(Application).Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
  Application.OnRestore := FormShow;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
end;

TForm2

procedure TForm2.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
end;

这将在任务栏上创建2个图标,在Alt + Tab中创建2个窗口,两者都按预期工作,除了一件事......切换应用程序在当前应用程序窗口之前移动所有先前的应用程序窗口,而不仅仅是一个窗口。

例如,我的应用程序有主要形式和其他非模态形式。如果我在谷歌浏览器中并按Alt + Tab,那么这将适用,这很好。

enter image description here

但这会在Google Chrome之前移动我的所有应用程序窗口,而在下一个Alt + Tab上我会看到这一点,因此我必须按Alt + 2x Tab才能返回Chrome。

enter image description here

我想实现这种行为,就好像我有更多的应用程序,而不是一个有多个窗口的应用程序。

enter image description here

我不确定它是如何工作的,但我假设后台有多个列表,一个用于所有应用程序,一个用于应用程序的窗口,所以当我切换应用程序时,它会在前一个列表之前移动因此它的所有窗户。

如果这是它的工作原理,是否有一个选项来切换应用程序而不仅仅是窗口?如果没有,是否可以改变行为不移动所有窗口,但只有一个活动窗口或我的整个过程是错误的,同样的效果可以通过不同的方式实现,它应该如何工作?

windows delphi winapi delphi-10.2-tokyo
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.