espero sus comentarion. saludos!

Escrito 16 septiembre 2010 - 02:37
Escrito 16 septiembre 2010 - 02:56
Escrito 16 septiembre 2010 - 03:41
Nop, necesito uno que sea modal, el problema con los forms normales es que si das click fuera de el, este se queda atras de la ventana que seleccones, podria ponerle fsStayOnTop pero no es el efecto que quiero lograr, graciasQuizás lo que buscas es un formulario no modal.
Saludos.
Escrito 16 septiembre 2010 - 04:02
Escrito 16 septiembre 2010 - 04:11
Escrito 16 septiembre 2010 - 04:24
Escrito 16 septiembre 2010 - 04:44
entiendo, gracias por tus comentarios.Allí está el tema look, NO SE PUEDE tener el control sobre el principal, sino es hasta CERRAR la ventana Modal.
Del mismo modo, se se tiene una colección de ventanas modales abiertas, para volver a tener el control deben irse cerrando en el orden inverso.
Si lo que buscas es impedir trabajar en una ventana mientras se esté en otra con "foco" y a la vez que se permita volver al principal para abrir más ventanas. Entonces tus forms deben ser no modales.
Luego debes implementar un mecanismo para llevar el control y el orden de creación/visualización de ventanas abiertas. Esto está ya medianamente implementado: la variable global Application mantiene un array con la ventanas abiertas, e incluso se puede obtener la ordenada Z (es la que da el orden) de cada form.
En segundo lugar este mecanismo se debe vincular a otro que se encargue de deshabilitar todo contro, y operación en las ventanas cuyo Z no corresponda a la ventana actualmente en foco.
De este modo cada vez que se vuelva al form principal (el único que no se vería afectado por este mecanismo de deshabilitado/habilitado) y se cree una nueva ventana la última en tener el foco pase a estar deshabilitada.
Luego, por más que se ponga el foco en las ventanas ya abiertas no tendrían los controles y funciones habilitadas. Deben irse cerrando las ventanas en orden inverso.
¿Se entiende?
Saludos,
Escrito 16 septiembre 2010 - 05:03
Escrito 16 septiembre 2010 - 06:16
TAdministradorDeVentanas = class; private ListaDeVentanas: TObjectList; // o cualquier "List" podría servir ... end;
procedure HabilitarVentana(OrdenZ: integer); procedure DesHabilitarVentana(OrdenZ: integer);
procedure TAdministradorDeVentanas.HabilitarVentana(OrdenZ: integer); begin TObject(ListaDeVentanas[OrdenZ]).EventoHabillitar; end;
TEventoHabilitar= procedure (...) of Object; TVeventoDeshabilitar = procedure (...) of Object;
procedure TAdministradorDeVentanas.RegistrarVentana(Ventana: TObject*, OrdenZ: integer); begin ListaDeVentanas.Insert(Ventana, OrdenZ) // o era inverso el orden de parámetros? ¡No tengo Delphi a mano! end;
TFormX = class(TForm) private FAdministrador: TAdministradorDeVentanas; public property Administrador: TAdministradorDeVentanas write ... read... ... end;
VentanaEnParticular.Administrador := MiAdministrador // el objeto administrador... podría ser global
Administrador.Sincronizar(Self);
procedure TAdministradorDeVentanas.Sincronizar(Ventana: T....) var OrdenZ: integer; begin OrdenZ := ObtenerOrdenZ(Ventana) if OrdenZ = ListaDeVentanas.Count - 1 then HabilitarVentana(OrdenZ) else HabilitarVentana(ListaDeVentanas.Count - 1); end;
Escrito 18 septiembre 2010 - 01:35