У меня есть приложение с несколькими немодальными формами, каждая со своим значком. Мне нужны значки всех форм на панели задач, которые не исчезают при сворачивании / восстановлении, и после некоторого тестирования это мое решение.
Приложение
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 значка на панели задач и 2 окна в Alt + Tab, оба работают, как ожидалось, за исключением одного ... при переключении приложения все предыдущие окна приложений перемещаются перед текущим окно приложения, а не только одно окно.
Например, у моего приложения есть основная форма и другая немодальная форма. Если я в Google Chrome и нажимаю Alt + Tab, тогда это будет appper, и это нормально.
Но это переместит все окна моих приложений до Google Chrome и на следующую Alt + Tab Я вижу это, поэтому мне нужно нажать Alt + 2x Tab, чтобы вернуться в Chrome.
Я хотел бы добиться такого поведения, как если бы у меня было больше приложений, а не одно с несколькими окнами.
Я не уверен, как именно это работает, но я предполагаю, что в фоновом режиме есть несколько списков, один для всех приложений и один для окон приложения, поэтому, когда я переключаю приложение, оно перемещается в списке перед предыдущим а значит и все его окна.
Если это так, есть ли возможность переключать приложения, а не только окна? Если нет, можно ли изменить поведение, чтобы не перемещать все окна, а только одно активное окно, или весь мой процесс неправильный, и тот же эффект может быть достигнут другим способом, где он работает так, как должен?
TForm.Create(Application)
, но я не думаю, что этот владелец что-то изменит - person Triber   schedule 13.12.2017