Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TDBCtrlGrid para un TPV tactil. ¿Como avanzar por paginas? (https://www.clubdelphi.com/foros/showthread.php?t=73201)

maiquemasque 07-04-2011 13:10:51

TDBCtrlGrid para un TPV tactil. ¿Como avanzar por paginas?
 
Hola de nuevo;

Estoy haciendo un TPV tactil y utilzo un TDBCtrlGrid. Todo va perfecto, he colocado un DBImage y un DBText, todo funciona a la perfección. Pero...resulta que no quiero mostrar las barras de scroll, y de hecho no lo hago. Y para navegar por los productos, pues he colocado un par de botones bien tochos jeje. Y ahí está el problema, no se como hacer para avanzar y retroceder una pagina completa, no un registro.

Por si no me explico bien, sería algo asi:

Se muestran 6 registros por ejemplo, entonces ....
------------------------------------------
| || || |
| 1 || 2 || 3 |
| || || |
------------------------------------------
------------------------------------------
| || || |
| 4 || 5 || 6 |
| || || |
------------------------------------------
------------------- -------------------
| < | | > |
------------------- --------------------
al hacer clic en siguiente, que muestre los siguientes 6 y etc y con el botón atrás lo contrario...

------------------------------------------
| || || |
| 7 || 8 || 9 |
| || || |
------------------------------------------
------------------------------------------
| || || |
| 10 || 11 || 12 |
| || || |
------------------------------------------

Le he dado mil vueltas, he buscado mucho. Yo pensaba situarme en el ultimo registro que se muestra (no el ultimo del dataset), pero no se como hacerlo. A partir de ahí avanzaría tantos registros como se muestran.

¿Alguien tiene alguna idea?, gracias

ecfisa 07-04-2011 13:36:23

Hola maiquemasque.

Creo que podrías valerte de la función MoveBy del DataSet para lograrlo.
Cita:

function MoveBy(Distance: Integer): Integer;
Ejemplo
Código Delphi [-]
   DataSet.MoveBy(6);  // 6 registros hacia adelante
   DataSet.MoveBy(-6); // 6 registros hacia atrás

Un saludo.

maiquemasque 07-04-2011 14:12:47

Gracias ecfisa, pero te cuento:

Imagina que el DBCtrlGrid tiene 7 filas. Si estoy situado en la última, la 7, ese codigo va bien. Pero si estoy en cualquier otra no funciona a la primera ejecución.

1-2-3-4-5-6-7 (estoy en el 3)

si avanzo con MoveBy el numero de filas tengo (7) entonces me muestra esto:

5 - 6 - 7 - 8 - 9 - 10 (se me posiciona en 10, y a partir de ahi como se posiciona en el último, va bien).

Pero esa primera vez, como verás muestra el 5, 6 y 7 que ya se mostraban antes.

y si estas en el 1, pues solo te muestra como nuevo, el 8 (del 2 al 8).

Y yo lo que necesito, lo ideal es que este donde esté posicionado, muestre los siguientes 7. Para ello el MoveBy serviría si supiera como colocarme antes en la ultima fila.

Sigo en ello, pero no doy con la solución, gracias de nuevo :)

ecfisa 07-04-2011 15:39:22

Hola de nuevo.

El ejemplo del mensaje anterior, fué como para orientarte de que herramienta podías valerte... ;)

Supongamos que hay 10 registros :A,B,C,D,E,F,G,H,I,J.
Y que muestres de a 4 en el DBCtrlGrid.
La primera vista sería: A,B,C,D, luego de hacer scroll hacia adelante debería verse: E,F,G,H.
Para que el registro E quede en la parte superior, deberías avanzar 4*2 posiciones y retroceder 4...

Algo como: (es otro ejemplo... :))
Código Delphi [-]
procedure TForm1.Avanzar(Sender: TObject);
begin
  DataSet.MoveBy(DBCtrlGrid1.RowCount*2);
  DataSet.MoveBy(-DBCtrlGrid1.RowCount);
end;
También tomá en cuenta, que al hacer scroll, puede que no haya 4 registros para mostrar por que se alcanzo el fin o el inicio de la tabla. (ya sea vayas en un sentido u otro).
Para contemplar esa situación, te doy como dato de ayuda que la función MoveBy devuelve cuantos registros pudo moverse.


Un saludo. :)

rgstuamigo 07-04-2011 16:22:43

Disculpenme pero no acabo de ver la complicacion:
Código Delphi [-]
DBCtrlGrid1.DataSource.DataSet.First;//voy al primer registro
DBCtrlGrid1.DataSource.DataSet.Prior;// voy al anterior registro de donde estoy actualemnte
DBCtrlGrid1.DataSource.DataSet.Next;// voy al siguiente registro de donde estoy actualmente
DBCtrlGrid1.DataSource.DataSet.Last;//voy al último registro
, o será que no entiendo bien el problema...:rolleyes::confused:
Saludos...:)

ecfisa 07-04-2011 16:32:28

Hola rgstuamigo.

Según entiendo, maiquemasque quiere que el DBCtrlGrid realize un scroll en un sentido u otro al ser presionados los respectivos Buttons al efecto, y no usar las ScrollBars.

Usando las pocas neuronas activas que tengo en este momento, me acordé que existe el procedimiento ScrollBy que quizá se podría usar en este caso. Pero no sé si no será más complejo de ese modo.


Un saludo.

Caro 07-04-2011 16:40:07

Hola maiquemasque, puedes utilizar las propiedades PanelCount y PanelIndex de tu DBCtrlGrid:

Código Delphi [-]
 
 Total := DBCtrlGrid1.PanelCount;
 NumReg := Total-DBCtrlGrid1.PanelIndex-1;
 DataSet.MoveBy(Total+NumReg);

Saluditos

ecfisa 07-04-2011 16:55:37

Cita:

Hola maiquemasque, puedes utilizar las propiedades PanelCount y PanelIndex de tu DBCtrlGrid:
Y colorín colorado, con el código de Caro... este cuento ha terminado. :D

Un saludo.:)

rgstuamigo 07-04-2011 16:57:41

Tenía que ser una mujer la que nos dé una solucion...:D:D ..
¡ mujeres al poder......!:)

maiquemasque 07-04-2011 17:13:46

¡Muchísimas gracias! Gracias a todos por la ayuda

El código de Caro funciona de cine, es justo lo que necesitaba, thanks! Que bien, con la de vueltas que le he dado.

rgstuamigo, lo que tu dijiste es otra cosa, eso es para moverse de registro en registro y para ir al primero y último.

ecfisa, de todas formas probé tu código también, y no sirve, sorry. Incluso deja un ultimo registro sin verse.

Lo dicho, gracias a todos por vuestro tiempo, mañana viernes....¡buen finde a todos!

ecfisa 07-04-2011 17:19:39

Hola maiquemasque.

Cita:

ecfisa, de todas formas probé tu código también, y no sirve
Es que como te dije antes en mi segundo mensaje, no te puse código funcional para que copies y pegues.
Sólo te estaba orientando sobre que función debías usar: MoveBy. Si mirás el código de Caro verás que la encontrás allí. ;)

Un saludo. :)

maiquemasque 07-04-2011 17:30:44

Si ecfisa, perdona, es verdad, faltaba completarlo utilizando PanelCount y PanelIndex. Y el caso es que las llegué a ver mirando en la ayuda. Si hasta estuve viendo de que componente derivaba el TDBCtrlGrid para ver si podía utilizar algún método que estuviera en esa clase...en fin, que al final era tan sencillo jeje.

See you! ■ ■ ■


La franja horaria es GMT +2. Ahora son las 01:04:21.

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