Pregunta

I creó dos MainApps de aplicación y SubApps, los SubApps tiene un tipo caja de diálogo modal como de conexión / desconexión formar etc. y su funcionamiento muy bien.

Después de que lo sujetan al MainApps, la caja de espectáculos Modal de diálogo como forma caja normal. Se comporta como "DIALOG.SHOW" en lugar de "DIALOG.SHOWMODAL";

Estoy utilizando Delphi compilador

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;
¿Fue útil?

Solución

No se sorprenda, lo que está tratando es inusual en el mejor. ShowModal logra el efecto modal mediante la desactivación de todas las ventanas del subproceso de llamada pero la forma modal. Debido a que su forma original no pertenecen a la misma rosca, ni siquiera para el mismo proceso, que no consigue discapacitados. Ver DisableTaskWindows en forms.pas para entender cómo las formas se desactivan cuando 'ShowModal' se llama.

Se tiene que diseñar su propio procedimiento modal; prueba si la aplicación se criaron en una ventana de nivel superior que no es el escritorio, desactivar esa ventana si ese es el caso.

Pero si yo fuera usted podría pensar en el diseño en primer lugar, ¿qué pasaría si, F.I., se cierra el formulario padre, ¿cómo se termina el proceso de la forma criaron?


editar para la tercera comentario más abajo - es posible que trate de hacer que el formulario modal "propiedad" de la forma del MainApps. Similar a las formas de ser propiedad de la forma principal de la aplicación, mientras que MainFormOnTaskbar es cierto. Ver ventanas propiedad en ventana Características tema de MSDN.

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


yo humildemente sugiero que formule una pregunta en una sugerencia de un diseño de lo que quiere lograr, por ejemplo, si se trata de la reutilización de código que podría alojar sus SubApps formas en un archivo DLL ... este diseño es frágil, puede continuar a tener problemas con él ...

Otros consejos

Trate de hacer sus ventanas "modal del sistema" en lugar de "aplicación modal". En realidad, no tengo ni idea de si se puede hacer eso. Puede ser que sea imposible, o una mala idea. De hecho, toda la cuestión me da el olor "mala idea".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top