Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Question Proyecto con estructura dinámica (creación de botones)

Hola a todos, pues tal y como dice el titulo, tengo que crear un proyecto el cuál una de las pantallas principales estaría formada por botones dentro de un Scrollbar. Estos botones suponen el número de productos que existen. Así que la creación de estos botones a partir de los básicos deben ser dinámicos, es decir, según necesidades. Así como el borrado de los mismos por productos que vayan desapareciendo. En primer lugar se me había ocurrido crear un montón de botones y luego según necesidades, poner la propiedad visible a true o no según haga falta. No sé si este es el método correcto para esto.

En fin, lo que pido es una ayuda o guía, sobre como crear este proyecto, es decir, la filosofía para programarlo. Tener en cuenta, que cada vez que se cree un botón tengo que asociarle lo que tiene que hacer al pulsarlo, por ejemplo, no es lo mismo pulsar sobre un botón que ponga coca-cola que otro que ponga capuchino.

En principio esto es lo que hay para iniciar el foro e ir recogiendo opiniones de todos, gracias por vuestra cooperación.

POSDATA: Solo tengo internet en el trabajo, así que hasta mañana al medidía no puedo volver a ver este hilo. Lo aviso para que no se piense que no respondo a posibles cuestiones que se hagan.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #2  
Antiguo 22-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por CORBATIN
una de las pantallas principales estaría formada por botones dentro de un Scrollbar.
Voy a suponer que esto no es cierto... Quizas dentro de un ScrollBox... pero dentro de un ScrollBar, no lo creo.

Cita:
Empezado por CORBATIN
se me había ocurrido crear un montón de botones y luego según necesidades, poner la propiedad visible a true o no según haga falta.
Esto limitará el máximo número de productos al máximo número de botones puestos en tiempo de diseño, lo cual puede convertirse en una grave limitación.

Cita:
Empezado por CORBATIN
cada vez que se cree un botón tengo que asociarle lo que tiene que hacer al pulsarlo, por ejemplo, no es lo mismo pulsar sobre un botón que ponga coca-cola que otro que ponga capuchino.
Claro, cada botón deberá tener una referencia al producto que corresponde, y un método genéroco que haga el trabajo del botón, valiendose de esa referencia que será el que se asocie a este.

Al final, no veo cual es tu inconveniente puntual en el asunto.... asi que te dire lo que se me ocurre a mi para enfrentarlo:

En lo referente a los botones, podes derivarte una nueva clase de botón, que tenga el código del artículo. Algo como:
Código:
type 

TArtButton = Class(TButton)
  private
    FCodigoProducto : String;
  public
    Property CodigoProducto : String read FCodigoProducto write FCodigoProducto;
  End;
Luego en tu forma, un método genérico para procesar lo que haya que hacer al pulsar el botón...

Código:
  Procedure Form1GenericBotonClick(Sender : TObject);
  Begin
    if (sender is TArtButton) Then
      ProcesarPedido((Sender As TArtButton).CodigoProducto);
    else
      ShowMessage('Error');
  End;
y al crear los botones, asociar a su evento OnClick el Form1GenericBotonClick.

Estoy asumiendo que hay un método o procedimiento llamado ProcesarPedido que recibe el código del artículo.

Creo que con estas ideas ya tenes suficiente para empezar... no??

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 22-04-2004
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
Pues¿ cuál es la duda?

Si lo quieres es simplemente una especie de maquina vendedora pues simplemente insertas en tu formulario tantos botones como deseas y en el evento OnClick correspondiente "despachas" el producto asociado al botón.

Cuando se acabe un producto inhabilitas u ocultas su botón y cuando se vuelva a surtir el producto habilitas nuevamente el botón.

// Saludos
Responder Con Cita
  #4  
Antiguo 23-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Thumbs up

Gracias por vuestra ayuda, pero en realidad no existe ningún procedimiento, es decir, simplemente me han propuesto el proyecto, por lo que aún no había ni empezado con él. El hecho de escribir este mensaje es para poder recoger ideas sobre el tema, aunque la duda se centraba más bien, sobre la idea de crear y destruir botones en tiempo de ejecución. Por ello tengo que tener en cuenta, que si lo creo/destruyo en tiempo de ejecución, pues tengo que guardar en algún sitio cuáles son los botones que tengo que mostrar y su código correspondiente o en su defecto, sus eventos asociados. Por ello la idea que me das Roman, pues no me vale, sería demasiado estático.

Desde luego la idea de jachguate es perfecta, crear una nueva clase de botón con una propiedad de código de producto asociado y sobre ese código trabajar, es genial.

Ahora os explico cuál sería la filosofía a seguir según yo, así podemos debatir el tema con algo más de participaciòn:

En principio, se me había ocurrido al iniciar por primera vez el programa, recorrer la tabla de productos de forma ordenada por su codigo de producto (para que los botones siempre tengan el mismo orden), ir creando los botones por cada producto y añadirles a la nueva propiedad codproducto el código de producto leído de la BD, además de su evento onclick generico (como apuntaba antes jachguate). Guardar la cantidad de botones y el valor de su propiedad codproducto en un archivo .ini, y cada vez que tenga que abrir ese form, leer del archivo .ini para mostrar los botones (creo que leer del .ini sería más rápido que leer cada vez de la BD, sobre todo si esta en red).

Cuando el usuario quiera crear/destruir un nuevo botón, lo único que tendría que hacer es volver a recorrer la tabla de productos de forma ordenada, crear los que correspondan y volver a grabar los datos en el archivo .ini.

DUDA:
En el caso de que esos nuevos botones lleven un gráfico, mostraría un dialogo de buscar archivos y lo insertaría al botón el gráfico elegido, pero ¿que pasaría con los gráficos de los botones que existían antes? ¿de dónde los saco ahora?

POSIBLE SOLUCION :
Para solucionar el problema anterior, también se me ha ocurrido crear un nuevo botón al mismo tiempo que se confirma la creación de un nuevo producto.

Solo quedar decir que cada vez que se cree un botón, tendría que tener grabado también en un archivo .ini, la posición del último botón, es decir, los valores left y top, para poder colocar correctamente el nuevo botón.
Por último os agradecería que escribieseis el código de alguna idea para crear esos botones de forma dinámica.

Bueno, esto más o menos lo que yo haría. Espero haber suministrado suficiente información para poder seguir debatiendo este tema.
Os doy las gracias por adelantado.

OBSERVACIÓN :
Con respecto a la nueva clase de botón, tal vez también se podría usar la propiedad tag para escribir aquí el código de producto y luego cambiarlo a integer si fuese el caso con la respectiva función.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #5  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por CORBATIN
Ahora os explico cuál sería la filosofía a seguir según yo, así podemos debatir el tema con algo más de participaciòn:
Dado que no venis con dudas puntuales, no esperes una participación masiva. Se supone que este es el trabajo de un analista, y nadie va a querer hacerlo gratis...

Cita:
Empezado por CORBATIN
Guardar la cantidad de botones y el valor de su propiedad codproducto en un archivo .ini, y cada vez que tenga que abrir ese form, leer del archivo .ini para mostrar los botones (creo que leer del .ini sería más rápido que leer cada vez de la BD, sobre todo si esta en red).
Y que pasa si en el otro puesto han añadido/borrado artículos?? yo creo que debes leer siempre de la bd.

Cita:
Empezado por CORBATIN
En el caso de que esos nuevos botones lleven un gráfico
Si ya tenes una base de datos, porque no metes alli también los gráficos??

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 23-04-2004
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola foro:
La idea de Juan Antonio me parece muy buena, me parece tambien que la duda del compañero es como le hago para crear los botones en tiempo de ejecución, lo que tienes que hacer es una rutina que tenga como variable (esto pienso yo pero puedo haber otras recomendaciones) un arreglo de botones, la rutina de creación sería algo como:

Código:
procedure TForm1.FormCreate(Sender: TObject);
var
Botones: Array[1..100] of TButton;
begin

   Botones[1] := TButton.Create(self);

   with Botones[1] do
   begin
      Left := 56;
      Top := 10;
      Width := 75;
      Height := 25;
      Parent := Self;
      Visible := True;
      Caption := 'Creado 1';
   end;

   Botones[2] := TButton.Create(self);

   with Botones[2] do
   begin
      Left := 56;
      Top := 350;
      Width := 75;
      Height := 25;
      Parent := Self;
      Visible := True;
      Caption := 'Creado 2';

   end;
que fue hecha para la clase TButton, puedes usar otra clase como la que ya te recomendaron.

Saludos y espero te sirva
__________________
Ernesto R.
Responder Con Cita
  #7  
Antiguo 23-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
No pido que nadie me haga un análisis del proyecto, tan solo estoy sugeriendo opiniones sobre lo que pienso hacer, siento que sea así como lo has entendido.

Por último, un ejemplo de código "normal y corriente" para crear botones en tiempo de ejecución, gracias.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #8  
Antiguo 23-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Código:
ejemplo código para crear botones en tiempo de ejecución
Quería decir que si alguién desinteresadamente quiere decirme o darme un ejemplo de crear botones en tiempo de ejecución, gracias de nuevo.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #9  
Antiguo 23-04-2004
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 CORBATIN
Quería decir que si alguién desinteresadamente quiere decirme o darme un ejemplo de crear botones en tiempo de ejecución, gracias de nuevo.
Pues es precisamente lo que te dio ramiretor
Responder Con Cita
  #10  
Antiguo 23-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Lo siento, por lo que se ve mientras yo escribía mi mensaje tú también lo hacías, gracias por tú ayuda, un saludo.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #11  
Antiguo 24-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por ramiretor
lo que tienes que hacer es una rutina que tenga como variable (esto pienso yo pero puedo haber otras recomendaciones) un arreglo de botones,
El problema con este tipo de implementación, es que siempre habria un máximo teórico predefinido para el número de botones. Podrias usar la característica de arreglos abiertos de delphi, declararndo la variable simplemente como array of, y usando setlength para establecer su tamaño en tiempo de ejecución.

El punto, es que ya tenes un arreglo de componentes ligado a la forma, que perfectamente te puede servir para hacer cualquier recorrido. Sinceramente creo que el arreglo de botones no es necesario... pero esto es cuestión de gustos... y en gustos se rompen géneros...

Hasta luego.

Responder Con Cita
  #12  
Antiguo 24-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por CORBATIN
No pido que nadie me haga un análisis del proyecto, tan solo estoy sugeriendo opiniones sobre lo que pienso hacer, siento que sea así como lo has entendido.
Pues quizas no nos pongamos de acuerdo en este punto; pero de cualquier forma he sido de los (pocos) que ha contrubuido con vos, como has dicho en otro hilo: desinteresadamente.

Hasta luego
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 24-04-2004 a las 23:15:10.
Responder Con Cita
  #13  
Antiguo 26-04-2004
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Gracias a todos por vuestra colaboración, creo que ya tengo suficiente para empezar con el proyecto, en caso de nuevas dudas, os volveré a consultar, saludos .
__________________
No hay vientos favorables para quién no conoce su rumbo.
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


La franja horaria es GMT +2. Ahora son las 11:57:43.


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