FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
Cita:
Cita:
Cita:
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; Código:
Procedure Form1GenericBotonClick(Sender : TObject); Begin if (sender is TArtButton) Then ProcesarPedido((Sender As TArtButton).CodigoProducto); else ShowMessage('Error'); End; 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 |
#3
|
||||
|
||||
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 |
#4
|
|||
|
|||
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. |
#5
|
||||
|
||||
Cita:
Cita:
Cita:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
|||
|
|||
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; Saludos y espero te sirva
__________________
Ernesto R. |
#7
|
|||
|
|||
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. |
#8
|
|||
|
|||
Código:
ejemplo código para crear botones en tiempo de ejecución
__________________
No hay vientos favorables para quién no conoce su rumbo. |
#9
|
||||
|
||||
Cita:
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. |
|
|
|