![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
Reholas.
Estuve pensando casi 1 hora como responder el mensaje anterior, sin mucho éxito, verás: El problema que intentan solucionar todas las rutinas es encontrar si la ventana está creada o no y después interactuar con ellas. Usando otra filosofía nos quitamos ese problema de encima: Ya no tenemos que buscar en todas las ventanas de TScreen para saber si está creada o no, basta con:
DestruirForma se consigue accediendo a Form1.Close ExpandirForma se puede sustituir por el método SetBounds del TForm, que ya permite modificar sus cuatro propiedades top, left, width, height y es una sola llamada. Sí le vería sentido a ExpandirForma si al agrandar el ancho no cupieses en pantalla y entonces modificara su Left para que tuviese el ancho especificado por parámetro. Las rutinas MinimizarAplicacion y FinalizarAplicacion son más del tipo "Sistema GH" de Al González, en ese aspecto no entro, ya que le tengo bastante respeto a Al, y a sus conocimientos ; yo al menos no usaría un procedimiento que solo tenga una línea de código.Si ya estan diseñadas las funciones y las estas utilizando, no cambies el código, pero no te aconsejaría que creases mil y una función, (mira sistema GH antes )Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#3
|
||||
|
||||
|
Gracias Lepe
Lepe gracias por responder... la verdad es que a tu código lo voy entiendo y tiene sentido. Eso si, hay algo que no me cierra:
Cita:
Por tanto... cuando uno realiza File -> New -> other -> forms toma las formas presentes en el proyecto... en este caso Project1.dpr ![]() Mi intenciòn es tener una clase genérica, y no que quede guardada en un proyecto en particular. Si me puedes aclarar esa duda... a lo mejor pueda apreciar mejor las alternativas. El código que había puesto en un anterior post era como una práctica... en los primeros días en que me senté frente a Delphi. Si es cierto que tiene funciones que son inútiles mantenerlas ![]() Ahora lo se... le saqué el polvo al disco duro... y apareció. La verdad es que la usaba cuando hacia mis prácticas para la facu y aplicaciones chicas.Lo que pasa es que ando viendo como mejorar esto del tratamiento de ventanas para que se me facilite la vida ![]() .... tengo que empezar a meter código para mi tesis... y después de unos análisis me di cuenta de que va tener bastantes pantallas ... y tener una libreria como esa... por dios.... ¡necesito algo mejor!![]() |
|
#4
|
|||
|
|||
|
Buenas y santas,
Pare ser completamente honesto no entendí del todo cuál es el hilo de la cuestión. Si ahora hablamos de crear clases pues bueno, tranquilamente podrías en una unit definir una clase heredada de un TCustomForm o TForm con las propiedades, métodos y funciones que quieras. Luego al añadir un formulario nuevo no hace falta hacer mucho más que añadir la unit de tu TCustomFormX generado a las uses y reemplazar la definición TForm por TCustomFormX. Evidentemente olvidate de que en el diseñador de objetos dentro del Delphi veas tus nuevas definiciones, pero de ésta manera no necesitás añadirla al IDE, sino en donde lo vayas a utilizar como un unit más. (mepa que hasta yo me perdí, sino se entendió me avisan )No hay ciencia en eso, aunque si tienes rutinas para instanciar tus ventanas y heredás aun más tu clase TCustomFormX podrías crear rutinas del tipo:
Ya también si deseas puedes realizar procesos sobre todas las ventanas que tengas abiertas recorriendo el objeto Screen.Forms y consultando por el tipo de clase podrías filtrar ciertos valores. Si dije cualquier bolazo solo háganmelo saber porque como dije no entendí bien que es lo que se busca. PD: Existía unos componentes que bien no recuerdo el nombre (APE, MDIModal o algo así) que permitían un manejo muy precioso de las ventanas modales. Buscar en torry puesto que no recuerdo.
__________________
Suerte .: Gydba :. |
|
#5
|
||||
|
||||
|
Te respondo con otra pregunta: La unidad Sysutils.pas ¿a qué proyecto corresponde? No me salgas con que es una unidad inherente a Delphi... tú puedes hacer lo mismo ¿no?
Aunque un Form normalmente está dentro de un proyecto, se puede tener en una carpeta llamada "Forms utiles" convenientemente añadida al library Path de delphi. Puedes usar ese Form en varios proyectos simultáneamente. Normalmente "todo lo que inventamos" ya ha sido pensado por alguien y tiene una versión mejor , por eso he aprendido a no complicarme la vida. Los requerimientos que tienes hoy, sin duda, variarán mañana; como no somos genios tendremos que modificar las cosas una y otra vez. Ahora estas pensando en formularios de una sola instancia, usando la variable global que propone delphi (FrmClientes, FrmFacturas); debido a que continuamente estamos aprendiendo, mañana necesitarás varias instancias de una misma ventana y no podrás usar esas variables, por tanto todas las rutinas que tienes hechas no sirven, tendrás que modificarlas ![]() Posiblemente haya una forma de trabajar para lo que pides (que conceptualmente se me escape), al menos para ventanas modales yo no sé como tratarlas de forma genérica, ya que además de cerrarse y obtener el típico mrOk/mrCancel necesitamos información adicional y para ello necesitamos acceder a la propia ventana o incluir algún evento personalizado. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#6
|
|||||
|
|||||
|
Muchas Gracias
Gydba y Lepe muchas gracias por tratar de entenderme
![]() ![]() Cita:
... hay que ·$%& que soy. La verdad es que no la pensé así.Cita:
Mi misión es tener métodos genéricos. Esas cosas ya para mi son particularidades de cada aplicativo. Ya veré como darle la "especialidad". Cita:
) tener definido métodos, funciones, o procedimientos genéricos (y en lo posible reutilizable) que trabajan sobre formas modales y no modales. El dilema es: ¿Cómo hacerlo? ¿Cuales son las alternativas?Lo que pasa es que preferiría escuchar alternativas antes que cerrarme por una sola opción. Cita:
Cita:
Saludos, |
|
#7
|
|||
|
|||
|
Quizás es demasiado general lo que dices, puesto que hay que ver que tipo de rutinas buscas. Cuanto más te metas en lo que son las ventanas modales te darás cuenta que en última instancia tienen serias limitaciones puesto que el propio SO se encarga de todo en último plano. Con limitaciones me refiero al hecho de desarrollar rutinas para controlar el comportamiento tanto de éstas como de las ventanas no modales.
Para terminar te puedo sugerir que te fijes en éstos componentes que desarrollaron para entornos MDI, quizás te nutran más de cualquier cosa que pueda decir: http://www.torry.net/quicksearchd.ph...ngine&Title=No OFF TOPIC: En mi opinión está bárbaro que uno invierta cierto tiempo en aprender cosas que generalmente parecen ordinarias o una perdida de tiempo. Por lo menos a mi la satisfacción de pasarme una semana viendo como las VCL dibujan un botón, una grilla o un label para luego generar nuevos componentes me gratifica más que cualquier paga por trabajo. Así que ánimos! OFF TOPIC ^ 2: No estarás hablando del juego "Faraón" de Sierra, verdad?
__________________
Suerte .: Gydba :. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|