![]() |
Mdi no repetir ventanas abiertas
Hola compañeros, llevo un tiempo desconectado del club por motivos personales y laborales, me guataria que me ayudaseis con el siguiente problema que tengo:
Tengo una Form padre y una serie de foms hijos, que creo según se solicita, no tengo problemas a la hora de crarlos, mediante
Ni al destruirlos mediante el siguiente codigo en el evento Onclose del Form
El problema es que no se como evitar que si e abierto el Form de clientes lo pueda abrir de nuevo . |
Tienes varias formas de hacerlo, yo normalmente lo hago así:
Tengo una unit de funciones comunes y entre ellas está esta: Código:
function AbreForm (Cclase : TFormClass; bMostrar: boolean; var Fnombre) : boolean; Código:
AbreForm(TFentradaUsuario,False,FentradaUsuario); También se puede hacer directamente; Código:
AbreForm(TFentradaUsuario,True,FentradaUsuario); |
Gracias por tu rápida respuesta Casimiro, me parase una idea genial lo de agregarla a un unit de funciones, lo probare a partir de mañana y te digo como me fue. Un día de estos tendrimaos que juntar las funciones que usamos en un único fichero de todos los miembros, nos ayudaría mucho.
|
Creo que para esto se pueden usar las propiedades MDIChildCount y MDIChildren de TForm.
Por ejemplo para un form2 se puede preguntar si ya está entre los que están creados/abiertos.
Puedes colocarlo dentro de un procedimiento para automatizarlo... |
Todos los días se aprende algo :eek:, nunca me había interesado por saber para qué servían esas propiedades tan "raras", incluso alguna vez he llegado a implementar algo parecido usando la propiedad 'tag'... :D
|
Personalmente me gusta la idea de trabajar con una funcion, pero también admito que es más lógico el método de Neftali para las MDI. De Todas maneras me da un error en la funcion Casimiro, imagino que por culpa de algún uses?, el error es Operator semi colon justo en
, si me podéis decir cual es el problema y como se podría, si es posible convertir el método proporcionado por Neftali a una funcion. Muchas Gracias |
|
Cita:
Código:
procedure Error (iNumError : integer; cTexto : string); |
Olvídense de escribir más código ;), las Rx tienen la función FindShowForm en su unidad AppUtils que ya lo implementa; las Rx ya fueron integradas en las jcl y jvcl, si tienen éstos paquetes instalados, pues ya está.
Cita:
|
Cita:
Para pensárselo... :D:D:D |
Cita:
// Saludos |
Gracias a todos por vuestras respuestas, la verdad es que :D Perdón pero acojonais, si hay tantas respuestas para una solucion tan simple y yo con más de 20 libros de delphi, la busqueda en el club y en google, no doy pie con bola es que soy muy malo y estoy muy desfasado.
Esto de programar para no quedarme desfasado, me esta costando y no se si me merece la pena seguir, por que noto que cada vez tengo más conceptos a los que no doy pie con bola. Con lo Facil que ere programar con clipper y lo controladito que lo tenia.:p |
Clipper era pequeñito en comparación con los sistemas actuales, no son comparables, aunque finalmente sirvan para lo mismo, para guardar y extraer información.
No debes rendirte, escoge la forma que te resulte más cómoda o más clara, o más simpática, o más simple, o más elegante, o más enrevesada... da igual, mientras funcione :) |
Gracias Amigo, llevo años peleándome con delphi y no pienso abandonarlo, aunque me tienta cosmos y velneo, pero no dejando delphi.
|
Yo uso esta función simplona que crea un formulario MDI o lo muestra si ya existe:
forma de Uso:
Y voilá...reconozco que esta medio chapuceron pero hasta ahora me ha funcionado bien y simple, si la ventana no existe la crea, si ya existe la muestra. |
Ya q todos estan colocando sus rutinas ponga la mia :D
No modal
Modal
|
La franja horaria es GMT +2. Ahora son las 15:47:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi