FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Componente a partir de Diseño GUI?
Buenas tardes, he buscado en varios foros y googleando y no encuentro un ejemplo que responda a mi inquietud, tal vez he usado las palabras claves inadecuadas pero la verdad es que siempre prefiero buscar la respuesta antes que preguntar, para no hacer perder tiempo a nadie si es que la respuesta es obvia y está en varios sitios.
El tema es el siguiente, hace tiempo que codifico en Delphi, he creado muchisimos componentes visuales y no visuales, y no he tenido problemas hastsa ahora. Cuando son visuales, el diseño lo suelo hacer en algún formulario y luego tomo referencia de los componentes que componente a mi "futuro componente", tomo referencia de las coordenadas X e Y relativas, y codifico lo mismo. El resultado es idéntico, pero debo escribir a mano la creación de cada TLabel, TEdit, TSpinEdit y la lista sigue de componentes que forman parte de mi componente; luego debo indicar el parten,el left, el top, y todas todas las propiedades de cada uno de los componentes que no son las por defecto al crear el mismo. En la actualidad me encuentro frente al desafío de crear un componente bastante complejo el cual segun el análisis deberá ser un Tpanel ya que podrá haber varios dentro de un formulario; ahora bien quisiera ahorrarme tener que diseñarlo gráficamente para luego copiar todas las propiedades y codificarlas a mano. He aquí la pregunta ¿Hay alguna práctica o truco para diseñar gráficamente un componente y luego poder acceder al código y coordenadas de sus partes componentes? El elemento que debo diseñar es la copia de un formulario que ya tengo pero que contiene numerosos tabs (pero ahora deberá ser un Tpanel), posee algo asi como 1000 componentes que reflejan la complejidad del objeto y realmente me quisiera evitar tener que codificar a mano semejante cantidad de código para crear el mismo. Lo que suelo hacer es hacer alt+f12 para acceder directamente al codigo de creación del formulario pero no me sirve para lo que quiero hacer ahora ya que no escapo de tener que copiar y pegar cada propiedad y demases. Espero se haya entendido mi inquietud, desde ya muchas gracias. Saludos |
#2
|
||||
|
||||
Has probado con frames ?
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#3
|
||||
|
||||
No lo entiendo. Algo se me escapa.
Si es "la copia de otro form", ¿por qué no copias el archivo .dfm y pas? Sea de la manera que sea, yo entraría por parsear el código delphi y dfm (cargarlos en TStringLists) y a partir de ahí, generar el código fuente del Form resultado. ejem... a ver si me explico: y después harías el .dfm también. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
#5
|
|||
|
|||
Gracias por tu respuesta, no no he probado porque justamente pensaba en un Tpanel y no en una ventana dentro de otra, no tengo experiencia en frames, pero echaré un vistazo a ver si se adapta a mis necesidades.
Cita:
Por eso es que digo que hoy por hoy es un form, pero me parece quedaría mejor siendo un Tpanel (lo puedo inhabilitar, hacer invisible, mover, etc). No tengo experiencia en frames como me mencionó fjcg pero por ahí se resuelve por ese lado con algun form sin bordes ni nada. Lo que propones suena razonable aunque quería ver si había alguna forma más directa y automática Cita:
Gracias a todos por su ayuda, ahora me pondré a ver el tema más en detalle y a hacer algunas pruebas, cuando lo pueda resolver, volveré comentando cómo lo hice porque seguro a alguno le servirá como camino a seguir o como camino a no seguir |
#6
|
||||
|
||||
Tema formularios:
Se me ocurre que puedes generar el formulario 'al vuelo'. Además, puedes ponerle el parent que quieras, y de esa manera puede quedar 'incrustado' dentro de otro formulario. Para generar el formulario 'al vuelo' InstanciaFormulario1:= Application.CreateForm(TFormBusqueda, FormBusqueda); InstanciaFormulario2:= Application.CreateForm(TFormBusqueda, FormBusqueda); Previamente tienes que definir las variables var InstanciaFormulario1, InstanciaFormulario2: TFormBusqueda; Luego les asignas el parent ( aunque en este caso no tengo total seguridad de que la llamada sea así ) Tema Frames: Los frames los puedes crear 'al vuelo', tantos como quieras. Un frame puede constar de un TPanel y los controles que quieras dentro de él, así como el código asociado a los mismos. Espero haberte ayudado. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#7
|
||||
|
||||
Te paso un cutreejemplo de frames con un TPanel. Espero que te sirva.
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - Última edición por fjcg02 fecha: 11-02-2012 a las 16:32:32. |
#8
|
||||
|
||||
Lo que yo te recomiendo para tu caso es que utilices formularios empotrados. O en su defecto TFrames a cómo te lo han dicho. Creo que es lo mejor que puedes hacer. Son como un componente, pero tienes la posibilidad de hacerle cambios visualmente.
Saludos, Chris |
#9
|
||||
|
||||
Cita:
Lo que yo te recomiendo para tu caso es que utilices TFrames. O en su defecto formularios empotrados // Saludos |
#10
|
||||
|
||||
Otra opción
La otra alternativa que tienes es lo que muestra Marteens en este hilo.
http://www.marteens.com/trick2a.htm pero personalmente creo que con Frames es suficiente. |
#11
|
|||
|
|||
Gracias a todos por sus sugerencias, finalmente luego de probar los Tframes y los TForm empotrados (o no), me he decidido por los Tforms. El tema es que con los Tframes se me armaba un lío enorme con declararlos en tiempo de ejecución (seguro mis habilidades no son las mejores, no le hecho la culpa a Delphi pero la verdad con TForm se me hizo 100 veces más sencillo).
Los TFrames me marearon con eso de Crearlos en el repositorio de Delphi y luego a partir de allí usarlos, etc. Me es más cómodo tener TForms en código y crearlos en tiempo de ejecución, sobre todo porque no quiero lidiar con tener que instalar esos TFrames que defino en todas las PCs donde lo vaya a compilar. El tema es que uso JediVCS como sistema de control de versiones y programo desde 2 o 3 PCs diferentes por diversas cuestiones entonces si hago cambios en paleta de componentes se me hace muy tedioso migrar eso a las demás instalaciones; si lo tengo en código es cuestion de sincronizarme con el repositorio y listo, ya lo tengo en todas las PCs. Y a los formularios los puedo ver en tiempo de diseño y rediseñarlos; algo que es importante es que si bien todos los formularios tienen una info en común, he notado que gran parte de eso corresponde a la lógica del negocio por lo tanto lo tengo en otra clase. No obstante si alguno tiene más sugerencias al respecto, estaría bueno que las expongan porque seguro a algún otro usuario tal vez le resulte más cómodo o mejor la opción de los TFrames. |
#12
|
||||
|
||||
No entiendo qué tiene que ver el repositorio. No necesitas guardar ahí los frames para usarlos, sólo debes incluirlos como cualquier otra unidad en tu proyecto.
Tampoco entiendo eso de que a los formularios los puedes ver y rediseñar en tiempo de diseño. Exactamente lo mismo puedes hacer con un Frame e incluso más: por un lado, el frame en sí lo puedes diseñar en su propia ventana, exactamente como haces con un formulario; pero, además, una vez que insertas una copia del frame en un formulario, dicha copia la puedes personalizar visualmente como cualquier otro componente visual del formulario. Finalmente, crear un frame durante la ejecución no tiene ninguna dificultad mayor que la de un formulario:
// Saludos |
#13
|
|||
|
|||
Roman, gracias por tu sugerencia, la verdad no lo probé mucho, vi que no tenia mucha diferencia con los formularios y use los formularios
No digo que el frame no pueda diseñarlo en el IDE, simplemente que para embeber un formulario en mi aplicacion no noto grandes diferencias con el frame (no tendré que heredar formulario de otro formulario). Entonces debido a eso y a que ya tengo las interfaces hechas en formulario, simplemente le agrego el código de la gestión del negocio en una clase asociada y listo. Con respecto a crear el frame en tiempo real, como dije antes no tuve el tiempo (tal vez tampoco la paciencia) para hacerlo y por eso me decidí por el formulario, no obstante es posible, pensandolo ahora, que tenga un frame para una parte de mis formularios que es en todos igual; ahí si ya le veo más sentido práctico. Muchas gracias |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cambiar nombre de componente al insertar en Diseño | agustibaldo | OOP | 4 | 06-04-2010 18:49:02 |
Delphi no encuentra el componente de diseño (BPL) | ContraVeneno | Varios | 7 | 01-10-2008 22:58:02 |
Componente que hay que activar en ejecucion, aunque se ve en fase diseño? | José Luis Garcí | OOP | 21 | 14-09-2007 22:41:27 |
crear componente a partir del archivo PAS | edusus | Varios | 2 | 03-04-2006 00:25:33 |
Componente para agilizar diseño de interfaces | Mauro.NET | OOP | 0 | 04-08-2005 02:28:45 |
|