FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Ayuda sobre gestion de ventanas modales y no modales
Buenos dias foristas,
Estaba viendo algunas recomendaciones que hace Ian Marteens en su libro La Cara Oculta de Delphi 4. Para ser exacto el método de clase que declara para crear ventanas modales o no modales, en la página 274. Entiendo bien lo que hacen dichos algoritmos... y me gustaría llevarlo a la práctica... emplearlos en forma genérica (supuestamente esa es la ventaja de implementar como un método de clase) y al querer hacerlo me sale la duda: ¿Tengo que diseñar una clase TVentanaModal y TVentanaNoModal que derive de TForm? o de TCustomForm? A mi entender eso pretende... ¿Si declaro esas clases... como hago para que pueda hacer uso de las mismas?.... Generalmente uno hace File -> New -> Form. Y como es de esperar... este deriva de TForm. Ahora,.. la pregunta del millón: ¿Como hago para que al diseñar una nueva aplicación pueda usar dichas "formas" y no un TForm? Por otro lado estaba pensando en que tengo que hacer herencia visual de un TForm y allí le meto el método de clase ¿?... pero la verdad es que nunca llevé a la práctica este tipo de herencia... Tengo entendido que uno puede guardar una forma (para una aplicación)... y luego puede hacer File -> New -> Other -> Proyect, seleciona la forma deseada y tildando en Inherit hace herencia visual. Claro, todo dentro del aplicativo en cuestión. ¿Y si yo quiero tener algo genérico.... como los TAboutForm... pero que sea TVentanaModal y TVentanaNoModal como implementa Ian Marteens? De seguro que existe solución para lo que necesito. Yo para combatir algunos de estos malestares de gestiones de ventanas me había declarado una unit (en mis primeros meses de programacion en Delphi) con funciones y procedimientos que realizan operaciones sobre las formas que se le pasen como parámetros. Algo como:
Disculpen que ponga todo el código, pero armar un zip con un solo pas y para que sólo contenga esto... me parece un desperdicio de recurso. Las funciones sirven... pero me empezó a gustar la alternativa de Ian... es más, me justificaba dicendo: "Se entiene mejor FrmProveedores.Mostrar() que tener Mostrar(FrmProveedores,True,0,0). Entonces... si puedo declarar tantos metodos de clase como para satisfacer las mismas ( o màs) funciones descriptas en la unidad expuesta anteriormente me evitaría que hacer uso de dicha unidad. ¡Ya quedraría todo encapsulado en la clase! Como alternativa (me gusta buscar opciones, no es que quiera complicarme la vida)... e inspirandome en parte por Ian se me estaba ocurriendo diseñar un componente no visual que encapsule varias funciones e intercepte posibles mensajes que se le dirijan a la forma que lo contiene y realize las modificaciones y/o operaciones necesarias... pero claro... estaría reinventando el TApplicartionEvents ¿o me equivoco? Bueno, despuès de tanto lío... espero que alguien me haya entendido... sino bueno... seguiré viendo a ver si se me ocurre algo, me siento bajo un manzano y espero a ver si una manzana me ayuda a darle explicaciòn... jaja. Escucho alternativas... y si alguien ha logrado captar mi idea... y logra explicarme un poco del tema se lo agradecería. Muchas gracias a todos que hayan dedicado tiempo en leer este hilo. Saludos, |
#2
|
||||
|
||||
Bueno... la verdad es que por ahora... me estoy inclinando en usar y mejorar mi unidad. Sigo tratando de entender eso del metodo de clase y TVentana.... ya veré si encuentro la luz a todo este asunto.
Saludos, PD: Disculpen que en el post anterior haya soltado semejante texto... quería tratar de exponer con claridad mi idea y lo que podía llegar a entender. |
#3
|
||||
|
||||
No se si no entendí bien o me parece que estamos reinventando la rueda...
El que una ventana sea o no modal no radica en alguna de sus propiedades, es decir no es que haya ventanas que son modales o no modales "per se" . Mas bien se trata de un comportamiento de la ventana al momento de mostrarse. De ahi que una ventana puede mostrarse en forma modal con ShowModal o amodal con Show. Asi tenemos que quien decidirá si una ventana se muestra o no en forma modal eres tu mismo y esto solo se lo indicas a la ventana.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#4
|
||||
|
||||
Cita:
Lo que pretendo es implementar es funciones, procedimientos que brinden mayor funcionalidad y manejo para el tratamiento de ventanas tanto ya sea como modales o no. Por ejemplo: Si tienes varias ventanas... digamos unas 50 entre modales y no modales lo más natural es que busques implementar código reutilizable para ver como se muestran... que debe realizar.. etc... etc... lo que ofrece Ian en su ejemplo es un método de clase que crea ventanas y guarda ciertos valores (en Tag) para que luego... por poner un ejemplo: dependiendo de lo que almacene hablitar controles. Es una tarea comùn... y muy habitual. Ian, a mi entender, propone que estos métodos genéricos (para ambos usos) queden encapsulados en la clase... y evitarias tener que emplear unidades extras para lograr lo que bastaría ahora con un: Ventana.HazAlgo(bla, bla)... Mi intención es ampliar las ideas de Ian... y darle mayor métodos de clase y facilitarme el uso de varias unidades. Métodos genéricos... después... una vez ya declarados... es cuestión de usarlos cuando sean necesarios y los necearios para un aplicativo en particular. Mi problema es que Ian no termina de explicar, a mi entender, donde... y cómo implementar sus ejemplos. Se que un método de clase es:
Me marea el hecho es que que el pone: TVentanaModal.Mostrar y en ninguna parte me dice si TVenatanaModal es que... derivado de TForm... ¿Y si declaro la clase.... como la instancio? si.. con create pero ... y que además se "vea la forma" y pueda incorporarle botones... grids... en sintesis controles... es mi dilema... A ver si ahora si se me entiende mejor... Saludos, |
#5
|
||||
|
||||
Lo que anotas en tu código me suena como a un gestor de ventanas, pero mre resulta ocioso porque la propia ventana ya contiene código para hacer todo lo que mencionas.. Por otro lado creo que bastaría con extender la clase TForm e ir añadiendo la funcionalidad que requieras según el tipo de ventana o según lo que quieras hacer con cada ventana.
Seria de mas ayuda que empezaras por un diagrama estático UML para modelar lo que quieres hacer antes de empezar con código, te clarificaría mas el concepto ya que estamos hablando de cosas abstractas...
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#6
|
||||
|
||||
Yo lo de usar el .Tag me horroriza.
Cuando usé el .Tag en 3 componentes de un mismo form tenía un cacao mental que ni te cuento. Que si el tag se guardaba esto, en aquel componente significa lo otro... Si tienes un Form y quieres guardar el estado de la ventana, por poner un ejemplo, aplico el archiconocido KISS (Keep It Simple Stupid ) Ni constantes, ni tags, ni números. Queda claro nada más ver el código, solo hay dos posibilidades "Estado Normal" y "Estado Modal" Las funciones de clase no las uso mucho, ya que de hecho, cuando se ejecutan aún no existe el objeto en memoria (no se ha creado aún), así que hay que tener cuidado al usarlo. La herencia visual desde cero. Creas una ventana llamada BaseForm: (file -> New -> Form) Ahora como bien dices, vas a File -> new -> other -> forms -> heredar de (tbaseForm) La nueva ventana aparece así:
Solo queda implementar los métodos en la ventana que toque:
Si tienes 10 ventanas (clientes, proveedores, factura, albaran, productos, ...) todas heredan de TBaseForm, por tanto ya tiene su propiedad Id. A lo que voy, crear cualquier ventana e ir a un registro, se simplifica:
Da igual si usas ADO, BDE, MDOLIB, etc La Forma Base puede tener controles en su interior, pero eso si, no podrás quitarlos en una ventana heredada, por tanto, hay que pensar bien qué llevará un TBaseForm, por ejemplo un Toolbar y el botón "Buscar", el resto de botones del toolbar se pueden añadir después a TfrmCliente. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ventanas Modales | subzero | Varios | 1 | 27-09-2006 02:30:13 |
DLL y ventanas no modales | droguerman | OOP | 0 | 15-09-2006 03:24:27 |
Ventanas modales en Kylix | salvica | Lazarus, FreePascal, Kylix, etc. | 2 | 15-09-2006 01:36:01 |
Ventanas modales | PTW | Varios | 1 | 19-05-2005 16:21:22 |
Nuevas dudas sobre ventanas modales | radiohead | OOP | 2 | 26-10-2004 15:34:34 |
|