Примечание : В остальной части этого ответа терминология владение принимает значение, используемое документацией Windows .Это отличается от значения того же термина в VCL.
То, что происходит, заключается в том, что ваше окно списка заданий является окном верхнего уровня.
Принадлежность накладывает несколько ограниченийв окне.
- Собственное окно всегда находится над своим владельцем в z-порядке.
- Система автоматически уничтожает собственное окно, когда его владелец уничтожается.
- Окно, находящееся в собственности, скрыто, когда его владелец свернут.
Если вы хотите, чтобы окно списка вакансий могло находиться под главным окном в z-порядке, его нельзяпринадлежит главному окну.Это можно сделать следующим образом:
class TJobListForm = class(...)
protected
procedure CreateParams(var Params: TCreateParams); override;
...
procedure TJobListForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Application.Handle;
end;
Это делает окно списка заданий окном верхнего уровня, принадлежащим скрытому окну приложения.Или, в качестве альтернативы, вот так:
procedure TJobListForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0;
end;
Это делает окно списка заданий не известным окном верхнего уровня.Таким образом, теперь он получает кнопку на панели задач.
Внесение таких изменений будет иметь далеко идущие последствия для вашего приложения.Второе и третье пункты в списке выше являются очевидными последствиями.Поведение ваших окон при сворачивании и их взаимодействие с панелью задач также будет затронуто.Я только поцарапал на поверхности здесь.Вы, вероятно, обнаружите, что создание окна вашего списка заданий, которое больше не принадлежит главному окну, сильно влияет на вашу программу.Вы обнаружите, что Windows делает много работы для вас за кулисами для собственного окна.Возможно, вам придется воспроизвести некоторые из этих работ, если вы переключитесь в неиспользуемое окно.