Pergunta

Criei dois aplicativos MainApps e Subapps, o Subapps possui uma caixa de diálogo de tipo modal, como formulário de login/logout etc. e está funcionando bem.

Depois de conectá -lo ao MainApps, a caixa de diálogo modal mostra como o formulário de caixa normal. Ele se comporta como "dialog.show" em vez de "dialog.showmodal";

Estou usando o compilador 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;

Mairepps ButtonClick

begin
setparent(findwindow(nil,'SubApps'),TabSheet1.Handle);
.........
end;
Foi útil?

Solução

Não se surpreenda, o que você está tentando é incomum na melhor das hipóteses. ShowModal alcança o efeito modal, desativando todas as janelas do thread de chamada, mas o formulário modal. Como o seu formulário pai não pertence ao mesmo segmento, nem mesmo ao mesmo processo, ele não fica desativado. Ver DisableTaskWindows nos formulários.

Você precisa criar seu próprio procedimento modal; Teste se o aplicativo está parental em uma janela de nível superior que não é a área de trabalho, desative essa janela se for esse o caso.

Mas se eu fosse você, pensaria no design primeiro, e se, FI, você fechar o formulário pai, como encerra o processo do formulário dos pais?


editar: Para o terceiro comentário abaixo - você pode tentar ter a forma modal "de propriedade" do formulário do MainApps. Similar às formas de propriedade do formulário principal do aplicativo enquanto MainFormOnTaskbar é verdade. Ver Janelas de propriedade sobre Recursos de janela Tópico de MSDN.

var
  frmDialog: TfrmDialog;
begin
  [...]
  frmDialog := TfrmDialog.Create(Self, dtLogout);
  try
    SetWindowLong(frmDialog.Handle, GWL_HWNDPARENT, GetAncestor(Handle, GA_ROOT));
    iMsgResult := frmDialog.ShowModal;
    [...]


Eu humildemente sugiro que você faça uma pergunta sobre uma sugestão de um design para o que deseja alcançar, por exemplo, se se trata de reutilização de código, você pode hospedar seus formulários de Subapps em uma DLL ... Esse design é frágil, você Pode continuar a ter problemas com isso ...

Outras dicas

Tente fazer com que o Windows "System Modal" em vez de "Modal do Aplicativo". Na verdade, não tenho ideia se você pode fazer isso. Pode ser impossível, ou uma má ideia. De fato, toda a pergunta me dá o cheiro de "má idéia".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top