Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Question Formularios modales y no modales

Hola. Tengo una aplicación desarrollada en Delphi 5 en la que existen formularios modales y no modales, en una clásica aplicación MDI.
El tema es que es que dispongo de una serie de formularios "base" a partir de los cuales, por herencia, se van creando los formularios definitivos que verá el usuario, de manera que se encapsule en esos formularios base las caraterísticas y funciones comunes a todos los formularios hijos.

La cuestión es que en determinadas circunstancias necesitaría que un formulario, cuyo diseño base es no modal (child window) y por ello el formulario heredero es también no modal, pueda ser abierto en modo modal. Esta circunstancia me ocurre cuando tengo abierta una pantalla modal y necesito abrir encima otra pero resulta que procede de una no modal.
Un solución simple sería crear el mismo formulario "base" con un formulario de tipo modal y ya está, pero claro eso supone la duplicación innecesaria del código y la repetición del formulario base con los posibles futuros errores o mejoras que tendría que repetir en los dos formularios "base" y heredados.

Así pues, ¿es posible abrir una pantalla no modal en modo modal en un momento dado?

Un saludo y gracias por la ayuda.
Responder Con Cita
  #2  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
¿es posible abrir una pantalla no modal en modo modal en un momento dado?
hola,
siempre que mantengas el 'showmodal' accesible, podras llamarla modalmente. Prueba de hacer, en los tipos de form que tu llamas 'no modales', un showmodal, a ver que te ocurre...
Responder Con Cita
  #3  
Antiguo 30-07-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola. Pues no. Da multitud de errores de violación de acceso y demás que no están relacionados con la programación del formulario "base" y no funciona.

Es lo primero que probé antes de poner el post.
Responder Con Cita
  #4  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
entonces prueba de llamarlo como una clase modal anterior, incluso como clase form inicial

(forma_de_tipo_no_modal as TForm).ShowModal;

Lo que me extraña es ¿porque eliminas el metodo showmodal desde la TForm original?, asi siempre tendras los dos tipos de llamada. Me refiero...¿es necesaria la diferenciacion de modales-no modales en tus definiciones de clase?
Responder Con Cita
  #5  
Antiguo 30-07-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
Tal como dice coso, el carácter modal no depende de la ventana en sí, sino de lo forma en que se muestra, bien sea usando Show o ShowModal.

Sin embargo, el problema puede estar en que tu formulario sea fsMDIChild, pues en tal caso, el uso de ShowModal no es posible.

Yo lo que haría es dejar el formulario como fsNormal para poderlo mostrar modalmente con ShowModal, y cuando quieras mostrarlo como foumulario hijo:

Código Delphi [-]
var F: TFormHijo;

begin
  F := TFormHijo.Create(...);
  F.FormStyle := fsMDIChild;
  // F.Show;
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 30-07-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola coso. Yo el método showmodal no lo oculto ni elimino ni nada. Simplemente es que si tu lo ejecutas sobre un form no modal, da errores en la ejecución. Nada más.

Efectivamente, como comenté al principio el formulario base es de tipo no-modal, es decir, fsMDIChild ya que en casi todos los casos la ventana se abre en modo NO-MODAL.
El problema es que cuando una vez necesito que se ejecute en MODAL, ahí está el problema.
Una posibilidad sería como dice roman pasarlo a fsNormal y en la creación y apertura de la pantalla cambiarle el formstyle, aunque no tengo claro que repercusiones tendrá en el funcionamiento. Tendré que hacer pruebas.
Estas son las cosas que las planteas desde el prinpicipio de una forma que en el 99% de los casos es como se planteó hasta que llega ese 1% que va y te lo estropea ...
Un saludo.
Responder Con Cita
  #7  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ok, por lo que pusiste entendi que definias completamente la clase.
Si lo unico que haces es cambiar la propiedad FormStyle, entonces lo de Roman te deberia funcionar. Ya comentaras algo.
Responder Con Cita
  #8  
Antiguo 31-07-2008
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Pues no. Tampoco funciona. Como tengo un constructor propio de la form "base" he probado también en cambiar ahí la propiedad formstyle, antes de la inicialización de los componentes y después de ella (inherited), y nada sigue igual. Creo que no hay forma de hacerlo.
Al final optaré por una clase base que sea de tipo modal y tendré el código duplicado. He probado los múltiples cambios y no va.
Un saludo.
Responder Con Cita
Respuesta



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 18:04:05.


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