Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
Question Crear TabSheet...

Que tal?

Tengo un Page Control que contendrá desde 1 hasta N TabSheets, estos TabSheets tendrán un DBGrid.

Como se puede crear estos TabSheets en tiempo de ejecución?, y a su vez sus respectivos DBGrids??

gracias y saludos

VB
Responder Con Cita
  #2  
Antiguo 07-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Eso que quieres hacer viene en la ayuda de Delphi...me pregunto 2 cosas

1.- Los grids son identicos? Es decir contendran las mismas columnas (posiblemente no los mismos datos)

Cual es tu idea o que piensas hacer...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 08-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
Thumbs up gracias por responder...

Cada TabSheet tendrá un solo DBGrid, pero el numero de columnas de cada grid puede variar.

Tengo pensado hacer Catálogos parametrizables, de tal manera que si tengo un catálogo de articulos en una pestaña, en otra pestaña podria tener que proveedores me venden ese artículo, en otra pestaña podría tener los costos, precios de venta, margenes de utilidad, etc. por sucursal.

saludos

P.D.
revisaré la ayuda de Delphi, pero no están demás unos Tips de los expertos. )


Cita:
Empezado por AzidRain
Eso que quieres hacer viene en la ayuda de Delphi...me pregunto 2 cosas

1.- Los grids son identicos? Es decir contendran las mismas columnas (posiblemente no los mismos datos)

Cual es tu idea o que piensas hacer...
Responder Con Cita
  #4  
Antiguo 08-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿qué ganas con tener N-tabsheets?

Si cambias de tabsheet, ocultas la anterior, así que...¿no podrías utilizar un solo DBGrid? 5 DBgrids, con sus respectivas consultas y datos en memoria, consume recursos.

Usando una consulta y los datos, solo tendrías que guardar la sentencia sql de artículos (un string) y reutilizas el Query y el DBGrid.

Por otra parte, mezclar temas distintos en una sola ventana puede llegar a ser engorroso para el usuario. Yo pondría botones con proveedores, otro con costes, otro con ventas, etc, al pulsar el botón abres la ventana de cada uno de ellos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 08-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
Thumbs up

que tal?

lo que pasa es que lo quiero hacer lo mas parametrizable posible, para que los cambios que haga se reflejen sin necesidad de recompilar y estar enviando el EXE a todas las sucursales. Todos los parametros los guardaría en tablas.

lo de poner varias pestañas con los datos que mencioné es porque así me lo pidió el cliente. Ni modo, al cliente lo que pida.

Por lo pronto ya logré crear TabSheets en tiempo de ejecución, falta crear un DBGrid para cada TabSheet.

saludos



Cita:
Empezado por Lepe
¿qué ganas con tener N-tabsheets?

Si cambias de tabsheet, ocultas la anterior, así que...¿no podrías utilizar un solo DBGrid? 5 DBgrids, con sus respectivas consultas y datos en memoria, consume recursos.

Usando una consulta y los datos, solo tendrías que guardar la sentencia sql de artículos (un string) y reutilizas el Query y el DBGrid.

Por otra parte, mezclar temas distintos en una sola ventana puede llegar a ser engorroso para el usuario. Yo pondría botones con proveedores, otro con costes, otro con ventas, etc, al pulsar el botón abres la ventana de cada uno de ellos.

Saludos
Responder Con Cita
  #6  
Antiguo 08-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ahh, vale, vale, si el cliente lo pide se hace y punto (ya me ha pasado jejej).

Crear el DBgrid es exactamente lo mismo. Crear, asignar el padre (parent) que será el tabsheet, asignar el el datasource y por último hacer un grid.RebuildColumns (esto hace que tome de la base de datos la definición de cada columna, con el displayWith (ancho de cada columna, formato para mostrar cada columna, etc).

En principio, tampoco hace falta llamar a Rebuildcolumns, creo que se hace internamente, aunque a mí me gusta hacerlo de forma explícita.

Si dentro de cada TabSheet va lo mismo, es decir, un grid, un par de botones, etc. Yo te aconsejaría hacer un Frame, en él pones el grid, los botones que te haga falta y alguna que otra rutina que necesites.

Después de crear el TabSheet, creas dentro una instancia de ese frame. Así quizás puedas tener más facilidad de trabajo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 08-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Para hacerlo parametrizable, yo guardaría algo así en la Base de datos, (supongo que es más o menos lo que has hecho) quizás te aporte algo:

Tabla de configuración:
Código:
Name                          Valor
TabsheetNames            articulos, proveedores, ventas

sqlarticulos             select codigoArticulo, descripcion  from articulos
sqlproveedores           select codigoprov, nombre  from proveedores where %s
sqlventas                select codigoVenta, codigo Articulo from ventas where %s
Para guardar los nombres de los tabsheet, te puedes ayudar del CommaText de un StringList

Se supone que cada tabsheet tendrá un Query asociado al grid, y guardamos el sql de cada uno de esas querys.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 08-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
tendrás por ahi algun ejemplito??, suponiendo que ya tengo el PageControl con sus TabSheets, el ADOQuery y el DataSource.

gracias

Cita:
Empezado por Lepe
Ahh, vale, vale, si el cliente lo pide se hace y punto (ya me ha pasado jejej).

Crear el DBgrid es exactamente lo mismo. Crear, asignar el padre (parent) que será el tabsheet, asignar el el datasource y por último hacer un grid.RebuildColumns (esto hace que tome de la base de datos la definición de cada columna, con el displayWith (ancho de cada columna, formato para mostrar cada columna, etc).

En principio, tampoco hace falta llamar a Rebuildcolumns, creo que se hace internamente, aunque a mí me gusta hacerlo de forma explícita.

Si dentro de cada TabSheet va lo mismo, es decir, un grid, un par de botones, etc. Yo te aconsejaría hacer un Frame, en él pones el grid, los botones que te haga falta y alguna que otra rutina que necesites.

Después de crear el TabSheet, creas dentro una instancia de ese frame. Así quizás puedas tener más facilidad de trabajo.

Saludos
Responder Con Cita
  #9  
Antiguo 09-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como te dije es más fácil crear un componente en ejecución (el frame) que 3 componentes.

En delphi, file -> new -> frame

ahora dentro colocas el grid, el datasource, el query y los enlazas todos. Obviamente no funciona porque falta asignar el sql, pero eso creo que es lo de menos ¿no?

Guarda como FrameBase (el Frame en sí, como si fuera un Form) y como UFrameBase el .pas

Si lo vas a usar en el Form1, haces esto:
Código Delphi [-]

uses UFrameBase;

procedure TForm1.Form1Create(....);
var frame :TFrameBase;
begin
   frame := TFrameBase.Create(Self);
   with frame do
   begin 
      top := 10;
      left:= 10;
      parent := TabSheet1;
      Query1.sql.text := 'select * FROM ARTICULOS';
      Query1.Open;
      DBGrid.RebuildColumns;
   end;
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 09-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Según veo como lo quiere tu cliente es que empieza siempre en la primera pestaña, luego de algún registro que esté consultado puede obtener detalles del mismo en las otras pestañas.

No entiendo tu concepto de "parametrizables", como lo planteas el número de tablas (y pestañas) que vas a utilizar es fijo (artículos,proveedores, ventas) por lo que no veo caso ir creando en tiempo de ejecución los querys y pestañas.

De acuerdo a como lo quiere tu cliente, necesitas efectivamente las tres tablas pero como ya vimos que dos de ellas son detalle de la primera,podrías usar un enfoque "Maestro-Detalle" y hacer los enlaces correspondientes. De forma que cada vez que cambias de artículo los otros querys se actualizan en automático con la información pertinente.

Ahora bien, no siempre se puede esto porque implica cargar las tablas completas...miles de registros a veces.

Entonces si se va a ejecutar el query cada vez que se quiere accesar a los detalles es exactamente el mismo caso de poner las pestañas previamente con sus grids dentro y unicamente ejecutar el query de cada grid de detalle cuando el cliente haga click en la pestaña por primera vez. La secuencia sugerida podria ser:

1.- El cliente abre la ventana y se le muestran los artículos (la ventana tiene las tres pestañas)
2.- El cliente hace click en proveedores para ver los que venden ese artículo
3.- La aplicación verifica si se seleccionó un artículo distinto y si no está ya abierto el query de proveedores...en su caso lo abre (con el parametro que corresponda)
4.-Se muestra el grid con los proveedores.
5.- Se repite 3 y 4 para las otras pestañas de detalle si el cliente las usa.
6.-Si el cliente cambia de artículo, cerrar los otros querys (ya no corresponden al artículo)
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #11  
Antiguo 11-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
gracias, lepe. Lo voy a intentar...

saludos


Cita:
Empezado por Lepe
Como te dije es más fácil crear un componente en ejecución (el frame) que 3 componentes.

En delphi, file -> new -> frame

ahora dentro colocas el grid, el datasource, el query y los enlazas todos. Obviamente no funciona porque falta asignar el sql, pero eso creo que es lo de menos ¿no?

Guarda como FrameBase (el Frame en sí, como si fuera un Form) y como UFrameBase el .pas

Si lo vas a usar en el Form1, haces esto:

Código Delphi [-]

uses UFrameBase;

procedure TForm1.Form1Create(....);
var frame :TFrameBase;
begin
frame := TFrameBase.Create(Self);
with frame do
begin
top := 10;
left:= 10;
parent := TabSheet1;
Query1.sql.text := 'select * FROM ARTICULOS';
Query1.Open;
DBGrid.RebuildColumns;
end;
end;





Saludos
Responder Con Cita
  #12  
Antiguo 11-12-2006
vladimirbp vladimirbp is offline
Miembro
 
Registrado: oct 2006
Posts: 13
Poder: 0
vladimirbp Va por buen camino
AzidRain

manejo el concepto de parametrizable ya que esa misma pantalla de articulos la podré reutilizar para crear otros catalogos que tambien podrían llevar 1 o mas pestañas.

Los parametros los guardaré en tablas y los cargaré al iniciar mi aplicación. Por ejemplo: SQL del catalogo, orden, botones que estaran visibles o invisibles segun el usuario, etc.

Cita:
Empezado por AzidRain
Según veo como lo quiere tu cliente es que empieza siempre en la primera pestaña, luego de algún registro que esté consultado puede obtener detalles del mismo en las otras pestañas.

No entiendo tu concepto de "parametrizables", como lo planteas el número de tablas (y pestañas) que vas a utilizar es fijo (artículos,proveedores, ventas) por lo que no veo caso ir creando en tiempo de ejecución los querys y pestañas.

De acuerdo a como lo quiere tu cliente, necesitas efectivamente las tres tablas pero como ya vimos que dos de ellas son detalle de la primera,podrías usar un enfoque "Maestro-Detalle" y hacer los enlaces correspondientes. De forma que cada vez que cambias de artículo los otros querys se actualizan en automático con la información pertinente.

Ahora bien, no siempre se puede esto porque implica cargar las tablas completas...miles de registros a veces.

Entonces si se va a ejecutar el query cada vez que se quiere accesar a los detalles es exactamente el mismo caso de poner las pestañas previamente con sus grids dentro y unicamente ejecutar el query de cada grid de detalle cuando el cliente haga click en la pestaña por primera vez. La secuencia sugerida podria ser:

1.- El cliente abre la ventana y se le muestran los artículos (la ventana tiene las tres pestañas)
2.- El cliente hace click en proveedores para ver los que venden ese artículo
3.- La aplicación verifica si se seleccionó un artículo distinto y si no está ya abierto el query de proveedores...en su caso lo abre (con el parametro que corresponda)
4.-Se muestra el grid con los proveedores.
5.- Se repite 3 y 4 para las otras pestañas de detalle si el cliente las usa.
6.-Si el cliente cambia de artículo, cerrar los otros querys (ya no corresponden al artículo)
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
problema al crear tabsheet Choclito Varios 10 08-04-2006 19:00:48
TabSheet REHome OOP 4 03-12-2004 05:33:23
TabSheet ramonibk Varios 3 23-09-2004 12:47:07
Crear TabSheet en Runtime previamente diseñado cacuna Varios 4 22-09-2004 06:52:10
Como Crear un TabSheet en Tiemo de Ejecucion Michel OOP 1 08-08-2003 00:43:32


La franja horaria es GMT +2. Ahora son las 16:02:02.


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