Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-08-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Fragmentar/Paginar Resultado

Resulta que yo tengo un List con X cantidad de items. Estos, pueden oscilar desde 1 a 1000. Lo que yo quiciera hacer, es fragmentar o paginar estos items, por ejemplo, agruparlo cada 10 o 20 items.
Por ejempo, si el List.Count=100, entonces, quiciera agruparlo en 5 grupos de 20. Y asi, con cualquier valor de List.Count, una suerte de funcion, asi:

Código:
function Paginar(ListCount:integer;Pagina:Integer):integer;
 
//donde
 
//ListCount:=List.Count;
//Pagina:=Cantidad de Items por Pagina
Si por ejemplo tengo un List.Count=65, tendria que devolverme:
-20
-20
-20
-5

No se si se entiende lo que quiero hacer, pero no se me ocurre como.
Alguna sugerencia o idea???

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 03-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Entiendo muy bien lo que quieres, pero no me queda clara una cosa ¿A donde quieres enviar cada grupito?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 03-08-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Entiendo muy bien lo que quieres, pero no me queda clara una cosa ¿A donde quieres enviar cada grupito?
En el List (StringList) tengo almacenado el Path de imagenes, las cuales quiero mostrar como Thumbs, pero quiciera mostrarlos cada 20 por ejemplo, para no tener que cargar ni crear todos los Thumbs y consumir exagerada memoria. No es lo mismo crear 100 Thumbs, que ir creando de a 20 en 5 pasos. Si yo hago un recuento mayor al numero que quiero paginar, voy activando botones, para ir avanzando o retrocediendo en el List, cosa de mostrar de 1 a 20, de 21 a 41, de 41 a 61, etc, asi hasta el ultimo.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 03-08-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Al igual que jhonny... me estaba preguntando... ¿cual es el objetivo de agrupar los elementos?

Yo estaba pensando en mantener el grupo en el mismo List. El truco consistiría en ordenarlos por grupo:

elem1g1
elem2g1
...
elemNg1 - fin grupo 1
elem1g2
elem2g2
...
elemNg2 - fin grupo 2

De modo que lo que hay que recordar es la cantidad de grupos. Y no estar almacenando cada grupo por separado. La idea es para recorrer cada grupo se haga algo como (si quisieramos buscar los elementos del primer grupo. Siendo K la cantidad de grupos):

Código:
for i := 1 to ((List.Count -1) div K) do
  begin
    ... lo que haya que hacer...
  end;
Ahora, si necesariamente debes mantener a cada grupo separado. Creo que la solución puede pasar por hacer cosas como esta:

Código:
....
TGroup = class(TList);
...

TListGroup = class
  private 
    FGroups: TList;
    FGroupsCount: integer;
  ...  
  public
    AddToGroup(Group: integer; Elemento: string);
  ...
end;
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 03-08-2007 a las 20:39:00.
Responder Con Cita
  #5  
Antiguo 03-08-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Lo que se me ocurrio es hacer lo siguiente:

Código Delphi [-]
 Pagina:=20;
  for i:=1 to List.Count do
    begin
      w:=w+1;  //acumulador
      if w=Pagina     //Conto 20?
        then begin
          w:=0;
          ListBox1.Items.Add('Pagina de '+IntToStr(i-Pagina)+' a '+IntToStr(i));
        end;
    end;

Y si por ejemplo el List.Count=100 me funciona, pero no se me ocurre, como hacer cuando List.Count=105, tengo que resolver eso.

Lo de los grupos lo habia pensado, pero tengo tan ordenado el tema de la lista que me da miedo cambiar el codigo.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 03-08-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Mamu, hace tiempo tuve que manejar algo parecido a lo que tu buscas. Tenía que implementar el test Chi-Cuadrado que lo que hace es armar grupos (series) de elementos de una lista de números y con ellos calcula unos estadísticos.

Al algoritmo lo implementé con arrays dinámicos. Y me olvidaba de la creación de TList. Si estas interesado, te lo puedo enviar para que lo estudies. Yo lo que hice fue aplicar el artilugio que te comentaba anteriormente.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 03-08-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por mamu Ver Mensaje
Y si por ejemplo el List.Count=100 me funciona, pero no se me ocurre, como hacer cuando List.Count=105, tengo que resolver eso.
Prueba esta modificacion a ver si va, pero la verdad no entiendo exactamente cual es el problemas, si entiendo lo que quieres hacer mas no el problema que describes al comienzo

Código Delphi [-]
 Pagina:=20;
  for i:=1 to List.Count do
    begin
      w:=w+1;  //acumulador
      if w=Pagina     //Conto 20?
        then begin
          w:=0;
          ListBox1.Items.Add('Pagina de '+IntToStr(i-Pagina)+' a '+IntToStr(i));
        end;
    end;
   //Si sale valida que no tenga nada w, es decir imprimio todos los valores
   if w<>0 then
      ListBox1.Items.Add('Pagina de '+IntToStr(i-w)+' a '+IntToStr(i));    //Muestra los que falta
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #8  
Antiguo 03-08-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
SOLUCIONADO

Implemente esto como prueba y funciona perfecto, tal cual lo necesitaba.
Luego lo voy a adaptar a una funcion.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var i,w,z,cant,porcion:integer;
begin
  w:=0;
  z:=20;
  porcion:=0;
  cant:=StrToInt(Edit1.Text);
  for i:=1 to cant  do
    begin
      w:=w+1;
      if w=z  //Conto 20?
        then begin
            w:=0;
            ListBox1.Items.Add('Pagina de '+IntToStr(i-z+1)+' a '+IntToStr(i));
            porcion:=porcion+1;
          end;
    end;
  //Faltan??? menores a Z=20
  if w<>0
  then ListBox1.Items.Add('Pagina de '+IntToStr(i-w)+' a '+IntToStr(cant));
end;

Delphius es interesante el dato, y desde ya cuando quieras compartirlo, bienvenido sea.

Saludos y Gracias a todos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
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
Fragmentar Imagenes... DarkDrakon Gráficos 1 01-03-2007 09:50:19
sql resultado carols018 MySQL 2 23-11-2006 16:48:17
Como paginar una tabla de 2000 renglones GCASTILLO Internet 0 03-10-2006 01:42:51
Resultado extraño... vantta C++ Builder 5 01-02-2005 11:45:33
Paginar registros JulioGO PHP 4 25-10-2004 01:50:32


La franja horaria es GMT +2. Ahora son las 14:05:08.


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