Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-08-2011
maunix maunix is offline
Miembro
 
Registrado: jul 2007
Posts: 10
Poder: 0
maunix Va por buen camino
Question ¿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
Responder Con Cita
  #2  
Antiguo 25-08-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Has probado con frames ?

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 26-08-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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:
Código Delphi [-]
// crea archivo
ts := TStringList.Create;
ts.Add('unit duplicada;');
ts.Add('');
ts.Add('uses Windows, Classes, ComCtrls ....');
ts.savetofile('c:\archivo.pas');
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.
Responder Con Cita
  #4  
Antiguo 26-08-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que GExperts tiene exactamente lo que necesitas:

Components to Code
Responder Con Cita
  #5  
Antiguo 26-08-2011
maunix maunix is offline
Miembro
 
Registrado: jul 2007
Posts: 10
Poder: 0
maunix Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Has probado con frames ?

Saludos
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:
Empezado por lepe
No lo entiendo. Algo se me escapa.

Si es "la copia de otro form", ¿por qué no copias el archivo .dfm y pas?
Actualmente la información está en formularios TForm, pero cada formulario muestra la información de un dispositivo (estoy monitoreando hardware), ahora bien en cuanto al nuevo diseño del soft, la idea es que cada elemento dispositivo sea un Tpanel porque la complejidad se ha aumentado y un dispositivo 1 puede ser del tipo A pero a su vez un dispositivo 2 puede a su vez estar formado por varios dispostivos A y B... entonces para mostrar en forma más uniforme la información había pensado en componentes heredados de Tpanels donde cada uno maneje la complejidad de su dispositivo en sí y el resto es acomodar la info en la pantalla.

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:
Empezado por duilioisola
Creo que GExperts tiene exactamente lo que necesitas
Echaré un vistazo, gracias por el dato.


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
Responder Con Cita
  #6  
Antiguo 26-08-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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 -
Responder Con Cita
  #7  
Antiguo 26-08-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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 15:32:32.
Responder Con Cita
  #8  
Antiguo 26-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #9  
Antiguo 26-08-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
Lo que yo te recomiendo para tu caso es que utilices formularios empotrados. O en su defecto TFrames
Yo lo diría alrevés:

Lo que yo te recomiendo para tu caso es que utilices TFrames. O en su defecto formularios empotrados



// Saludos
Responder Con Cita
  #10  
Antiguo 27-08-2011
Avatar de Osorio
Osorio Osorio is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 251
Poder: 21
Osorio Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 07-09-2011
maunix maunix is offline
Miembro
 
Registrado: jul 2007
Posts: 10
Poder: 0
maunix Va por buen camino
Smile

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.
Responder Con Cita
  #12  
Antiguo 07-09-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:

Código Delphi [-]
var
  F: TMiFrame;

begin
  F := TMiFrame.Create(Self);
  F.Left := 8;
  F.Top := 40;
  F.Parent := Self;
end;

// Saludos
Responder Con Cita
  #13  
Antiguo 08-09-2011
maunix maunix is offline
Miembro
 
Registrado: jul 2007
Posts: 10
Poder: 0
maunix Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar nombre de componente al insertar en Diseño agustibaldo OOP 4 06-04-2010 17:49:02
Delphi no encuentra el componente de diseño (BPL) ContraVeneno Varios 7 01-10-2008 21:58:02
Componente que hay que activar en ejecucion, aunque se ve en fase diseño? José Luis Garcí OOP 21 14-09-2007 21:41:27
crear componente a partir del archivo PAS edusus Varios 2 02-04-2006 23:25:33
Componente para agilizar diseño de interfaces Mauro.NET OOP 0 04-08-2005 01:28:45


La franja horaria es GMT +2. Ahora son las 07:09:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi