Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Investigando un poco el tema, porque antes no se me había dado esta cuestión, he visto que las únicas diferencias entre un form de tipo fsNormal y fsMDIChild está en el FormStyle y en el Visible. En el caso de formularios modales (fsNormal), el Visible es False, mientras que en los fsMDIChild el visible es true. Esto, que parece una tontería, es la diferencia que hace que no pueda abrirse un formulario no modal como modal.
Si bien, se podría hacer algo del tipo:

Código:
with Tform_no_modal.create(self) do
begin
    FormStyle:=fsNormal;
    Showmodal;
    Free;
end;
El problema es que sigue dando el error de no se puede poner visible un formuario no modal.
Si tratamos de poner el Visible:=false antes del FormStyle o después, pero antes del showmodal, se produce el mismo error.

Otra alternativa que he probado es a definirme mi propio constructor para la form, de manera que tratemos de poner el estilo y el visible antes del create, de la forma siguiente:

Código:
unit formulario_no_modal;
..
constructor crearmodal;  
...
constructor TForm_no_modal.crearmodal;
begin
    FormStyle:=fsNormal;
    Visible:=false;
    inherited;   // Para construir el resto de los objetos
end;
Pero esto tampoco funciona pues da el mismo problema. Así pues, no parece haber manera de abrir un formulario en modal que esté definido como no modal en tiempo de diseño. Al menos ya no se me ocurren más intentos que hacer.

Un saludo.
Responder Con Cita
  #2  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
        Form2.FormStyle := fsNormal;
        Form2.Hide;
        Form2.SHowmodal;
        Form2.Hide;
        Form2.FormStyle := fsMDIChild;
end;

siendo Form1 MDIForm y Form2 MDIChild en tiempo de diseño, a mi este codigo me funciona...
Responder Con Cita
  #3  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Tienes un error de concepto : no existen forms 'modales' o 'no modales', es segun como se las llama, como te hemos comentado. Ten en cuenta que no se puede llamar modalmente una form MDIChild porque seria ilogico, ya que una MDIChild se supone que es para que existan varias dentro de otra principal, sin ninguna con el foco fijado en ella y sin que ninguna tenga preferencia, y un showmodal es para que una tenga preferencia y foco fijo. Vamos, que los dos conceptos son autoexcluyentes. Pero si cambias la propiedad formstyle...pues ya esta. Ten en cuenta que si esta visible, es ilogico llamar a que se muestre, por lo tanto, las escondemos antes de llamarla.

Última edición por coso fecha: 01-08-2008 a las 12:48:21.
Responder Con Cita
  #4  
Antiguo 01-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo, sur-se, que te estás haciendo demasiados líos con esto. Toma en cuenta que de por sí es raro, al menos visto desde fuera, que una ventana deba mostrarse unas veces como modal y otras como MDIChild, como ya te lo comento coso, las ventanas MDIChild están pensadas para ser no modales.

Ahora, si te fijas en el mensaje #5, comenté que dejaras el formulario como fsNormal de inicio y sólo cuando quisieras mostrarlo como MDChild, le cambiaras el estilo. Alrevés no es tan sencillo, porque si el formulario es MDIChild, automáticamente se va a hacer visible y por ello el error al usar ShowModal.

// Saludos
Responder Con Cita
  #5  
Antiguo 04-08-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Hola. Gracias a todos por la ayuda.
El problema de hacerlo como roman dice, es decir, ponerlo como Modal (fsNormal) y abrirla como MDIChild cuando lo necesite no lo puedo hacer, por eso he seguido con el tema. El motivo es que tengo más muchos sitios en los que tendría que cambiar la llamada a la pantalla ya que está puesta como mdi child y tendría que hacer los cambios correspondientes, y como el hecho de abrirlo en Modal es sólo para uno o dos sitios, era más sencillo.
Probaré lo que me comentais.
Gracias de nuevo.
Responder Con Cita
  #6  
Antiguo 04-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
mira, usa esta funcion,

Código Delphi [-]
function MDI_a_Modal(f : TForm) : TModalResult;
var
    mr : TModalResult;
begin   
          try   
          f.FormStyle := fsNormal;        
          f.Hide;        
          mr := f.SHowmodal;        
          f.Hide;       
          f.FormStyle := fsMDIChild;
          except
          mr := mrCancel;
          end;
          MDI_a_Modal := mr;
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ventanas Modales Vs Formularios Mdi ingmichel Internet 7 04-08-2008 04:41:23
Ayuda sobre gestion de ventanas modales y no modales Delphius Varios 13 13-12-2006 05:10:25
Formularios modales pyanqn Varios 10 04-11-2005 18:51:35
No puedo Ejecutar Formularios Modales IcebergDelphi OOP 4 17-11-2003 09:31:31
Problema con Formularios Modales bajo Citrix Metaframe sarackganda Varios 0 04-06-2003 02:47:50


La franja horaria es GMT +2. Ahora son las 11:06:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi