Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Controles para Touchscreen (https://www.clubdelphi.com/foros/showthread.php?t=91834)

darkerbyte 09-05-2017 22:42:42

Controles para Touchscreen
 
Hola amigos

Voy a hacer una aplicación para Touchscreen, típico, otra de punto de venta, a petición del cliente.

Pero quisiera que me dieran un poco de asesoría. Voy a obtener el listado de productos de la base de datos, quisiera saber si hay algún control como un DBgrid pero mas adecuado para este uso.

Quisiera que en base al numero de productos y resolución de la pantalla pueda determinar el numero de columnas y filas, y que tenga un evento onClick sobre cada Item.

Mi otra opción es hacer un montón de botones y e ir ocultándolos para adaptarlos según la cantidad de productos pero se me hace poco eficiente.

Pero ustedes que tienen experiencia con este tipo de interfaz quisiera me dieran algún consejo.

Gracias de antemano

Neftali [Germán.Estévez] 10-05-2017 09:35:47

Se puede hacer de muchas maneras y no se exactamente lo que tienes en mente.
Lo primero que se me ocurre (y parece lo más natural) es utilizar botones (posiblemente en un TList/TObjectList/...).

Independientemente de los controles, revisa este vídeo sobre (TGridPanel) que es posible que te pueda ayudar.
Enlace a la docWiki.

Neftali [Germán.Estévez] 10-05-2017 09:50:43

Cita:

Empezado por darkerbyte (Mensaje 516473)
Mi otra opción es hacer un montón de botones y e ir ocultándolos para adaptarlos según la cantidad de productos pero se me hace poco eficiente.

Esto no lo había leído.
Crea sólo los botones necesarios para tus productos en ejecución. Nada de crear un montón de botones en diseño e ir ocultando luego.

Si buscas en los foros encontrarás muchos mensajes sobre crear controles en runtime.

mallenat 10-05-2017 10:49:44

Si no te importa adquirir componentes te dejo algunas recomendaciones:
  • tmssoftware.com/site/advcardlist.asp
  • tmssoftware.com/site/advsmoothlistbox.asp
  • tmssoftware.com/site/advsmoothimagelistbox.asp
  • tmssoftware.com/site/AdvSmoothTileList.asp

Personalmente yo uso el AdvSmoothTileList para cosas parecidas.

bitbow 10-05-2017 16:49:54

Existe un componente TDBCtrlGrid con el cual se pueden conseguir lo que requieres de forma sencilla.

Saludos.

darkerbyte 12-05-2017 03:22:36

Probando
 
Gracias amigos por sus consejos

Si es necesario comprar no tengo inconvenientes porque quiero lograr algo de calidad
algo como esto:







Voy a probar los controles que me han recomendado.

Mil gracias nuevamente

newtron 12-05-2017 10:42:05

Bueno... por si te sirve de algo yo consigo esta apariencia con controles estándar y uno gratuito para los botones que se llaman FancyButton.



Saludos

darkerbyte 12-05-2017 20:08:20

Cita:

Empezado por newtron (Mensaje 516596)
Bueno... por si te sirve de algo yo consigo esta apariencia con controles estándar y uno gratuito para los botones que se llaman FancyButton.



Saludos

Hola Newtron.

Si me sirve ¿Como hiciste el grid con los botones? Son Speedbuttons? y los vas creando en tiempo de ejecución?
No había escuchado de ese componente, es de alguna suite? me podrías dar mas info?

Muchisimas gracias desde ya

yusnerqui 13-05-2017 02:21:16

Yo no tengo experiencia en este tipo de trabajos, pero acabo de probar un ListView con el tamaño de los iconos a 120 pixcels y creo que el efecto que produce es el que deseas, la tarea aqui sería agregar dinámicamente las imágenes al imagelist, y el efecto visual es bueno, es una idea:o.

yusnerqui 13-05-2017 02:40:41

Vale, si lo que quieres es poner botones dinámicamente en un panel, tira un panel en el formulario y haz algo como esto

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
const
cc=3;
var sp : TSpeedButton;
  i,fila,col:integer;
begin
  for  i :=0 to 6 do
  begin
    sp:=TSpeedButton.Create(Panel1);
    sp.Parent:=Panel1;
    sp.Width:= 100;
    sp.Height:= 100;
    //calculo la fila y columna donde pondré el botón
    col:=i mod cc;
    fila:= (i-col) div cc;
    //En dependencia de la fila y columna doy las cordenadas, recuerda que mis botones serán de 100 por 100 con 2 pixceles de separación
    sp.Left:=100*col+2;
    sp.Top:= 100*fila +2;
  end
end;

end.

Esta es otra idea, tu dirás si es eso lo que quieres, o estoy escribiendo tonterías ;)

saludos

newtron 13-05-2017 09:13:32

Cita:

Empezado por darkerbyte (Mensaje 516626)
Hola Newtron.

Si me sirve ¿Como hiciste el grid con los botones? Son Speedbuttons? y los vas creando en tiempo de ejecución?
No había escuchado de ese componente, es de alguna suite? me podrías dar mas info?

Muchisimas gracias desde ya

Los botones no van en un grid, son unos componentes que creamos heredando del speedbutton y que se van rellenando en función de lo que necesites, en la parte izquierda lo rellenamos con las familias y en la derecha con los artículos correspondientes a esa familia y para ir pasando artículos o familias hacia delante o hacia atrás pulsamos en los botones que tienen las flechas a la izquierda o derecha. De esa manera se puede navegar por las familias/artículos.

Este es el aspecto de la pantalla en modo de edición:



Por otro lado los botones no son de una suite, es un componente que puedes descargar (creo) de aquí.

Saludos

darkerbyte 17-05-2017 07:47:12

Ahhh creo que ya entendí

Puedo dejar por ejemplo 9 speedbuttons.
Hago mi consulta y obtengo los id's e imágenes de los primeros 9 productos.
Si son mas de 9 habilito el speedbutton que tiene la flecha a la derecha
Si el usuario hace click en la flecha, hago mi consulta y obtengo los siguientes nueve y los asigno a los botones.
Y puedo utilizar el TAG del boton por ejemplo para guardar el ID del producto para que cuando el usuario haga click sepa cual producto quiere meter

La tecnica sería la misma para las categorías.

De esta forma no tenemos que crear complejos mecanismos para crear botones dinamicamente, ni tener tantos botones en memoria.
Además tenemos un control mas preciso en el diseño del form.

Brillante... Brillante

newtron 17-05-2017 09:58:02

Cita:

Empezado por darkerbyte (Mensaje 516730)
Brillante... Brillante

Lo sé lo sé... :cool: :D:D:D

darkerbyte 17-05-2017 19:03:27

Cita:

Empezado por yusnerqui (Mensaje 516639)
Vale, si lo que quieres es poner botones dinámicamente en un panel, tira un panel en el formulario y haz algo como esto

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
const
cc=3;
var sp : TSpeedButton;
  i,fila,col:integer;
begin
  for  i :=0 to 6 do
  begin
    sp:=TSpeedButton.Create(Panel1);
    sp.Parent:=Panel1;
    sp.Width:= 100;
    sp.Height:= 100;
    //calculo la fila y columna donde pondré el botón
    col:=i mod cc;
    fila:= (i-col) div cc;
    //En dependencia de la fila y columna doy las cordenadas, recuerda que mis botones serán de 100 por 100 con 2 pixceles de separación
    sp.Left:=100*col+2;
    sp.Top:= 100*fila +2;
  end
end;

end.

Esta es otra idea, tu dirás si es eso lo que quieres, o estoy escribiendo tonterías ;)

saludos


Gracias amigo yusnerqui fue un gran ejemplo de como crear componentes dinamicamente, cosa que desconocía.


La franja horaria es GMT +2. Ahora son las 08:49:35.

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