Вопрос

Я создал два приложения MainApps и Subapps, Subapps имеет диалогообкуку модального типа, такое как форма входа / выхода из системы и т. Д., И его работают нормально.

После подключения к MainApps модальное диалоговое окно отображается как формальная форма коробки. Это ведет себя как «диалог. Show» вместо «диалога. ShowModal»;

Я использую Compiler Delphi

Subapps ButtonClick;

  begin
    with TfrmDialog.Create(Self, dtLogout) do
    try
      iMsgResult := ShowModal;
    finally
      Free;
    end;
    if iMsgResult = mrOk then
    begin
      dmVoca.FHomeworkXMLDoc.Active := False;
      //Disabled Double Login
      dmVoca.tmrDoubleLogin.Enabled := False;
      ................
    end;  
  end;

MainApps ButtonClick

begin
setparent(findwindow(nil,'SubApps'),TabSheet1.Handle);
.........
end;
Это было полезно?

Решение

Не удивляйтесь, что вы пытаетесь, это необычно. ShowModal достигает модального эффекта, отключая все окна вызовов потока, но модальная форма. Поскольку ваша родительская форма не принадлежит к тому же нити, даже не в том же процессе, он не отключен. Видеть DisableTaskWindows В формах. Понять, как формы отключены, когда называется «ShowModal».

Вы должны разработать свою собственную модальную процедуру; Испытайте, если приложение осуществляется в родиве в окне верхнего уровня, это не на рабочем столе, отключите это окно, если это так.

Но если бы я был тобой, я бы сначала подумал о дизайне, что если, если вы закрываете родительскую форму, как вы закончите процесс формы в родиве?


редактировать: Для 3-го комментариев ниже - вы можете попробовать иметь модальную форму «принадлежать» формой MainApps. Подобный формы, которые принадлежат основной форме приложения в то время как Mainformontaskbar. правда. Видеть принадлежащие окна на Особенности окна Тема 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 ... Этот дизайн хрупкий, вы Может продолжать работать с этим проблемами ...

Другие советы

Попробуйте сделать свой Windows «Системный модаль» вместо «модаль приложения». На самом деле, я понятия не имею, если вы даже можете сделать это. Это может быть невозможно или плохое представление. На самом деле весь вопрос дает мне «плохой идею».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top