Не удивляйтесь, то, что вы пытаетесь, в лучшем случае необычно.ShowModal
достигает модального эффекта, отключая все окна вызывающего потока, кроме модальной формы.Поскольку ваша родительская форма не принадлежит одному и тому же потоку, даже одному и тому же процессу, она не отключается.См. DisableTaskWindows
в forms.pas, чтобы понять, как формы отключаются при вызове ShowModal.
Вы должны разработать свою собственную модальную процедуру;проверить, если приложение создано в окне верхнего уровня, которое не является рабочим столом, отключите это окно, если это так.
Но на вашем месте я сначала подумал бы о дизайне, что если, fi, вы закроетеродительская форма, как вы заканчиваете процесс родительской формы?
edit: для третьего комментария ниже - вы можете попробовать использовать модальную форму, "принадлежащую" форме MainApps.Похоже на то, что формы принадлежат основной форме приложения, в то время как
MainFormOnTaskbar
верно.См.
принадлежащие Windows на
Особенности окна тема MSDN.
var
frmDialog: TfrmDialog;
begin
[...]
frmDialog := TfrmDialog.Create(Self, dtLogout);
try
SetWindowLong(frmDialog.Handle, GWL_HWNDPARENT, GetAncestor(Handle, GA_ROOT));
iMsgResult := frmDialog.ShowModal;
[...]
Я скромно предложил бы вам задать вопрос по предложениюдизайна для того, чего вы хотите достичь, например, если речь идет о повторном использовании кода, вы можете разместить свои формы SubApps в DLL ... Этот дизайн хрупок, вы можете продолжать сталкиваться с проблемами с ним ...