Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #34  
Antiguo 06-06-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Bueno kbaby, he terminado el ejemplo. Espero que con el ejemplo se entienda.
El ejemplo consiste en un código que guarda y abre un archivo de texto.

Puedes comprobar que funciona para uno o más datos... no importa cuandos cambios sean. Notarás que que se hacen en directo: en su posición natural. Nada de estar eliminando y agregando.

Separé el código en funciones y procedimientos a propósito para tu notaras como es que se reutiliza código y además para no darte todo regalado.
Estudia el código no pierdas esfuerzo en comprender que es un procedimiento y que es una función. Lo descubrirás a medida de veas código.

Te explico porqué funciona.
Básicamente tenemos una estructura de esta forma en el archivo:

0 - DNI
1 - NOMBRE
2 - APELLIDO
3 - CIUDAD

y se va repitiendo. Bueo imagina ahora que la primera persona tiene un valor indice 0. La segunda un indice 1, y asi sucesivamente. Entonces podemos afirmar esto:

Código:
Posicion en archivo | Indice o posición de la persona
-----------------------------------------------------------------
0 - DNI1            | 0 - Persona1
1 - Nombre1         |
2 - Apellido1       |
3 - Ciudad1         |
.................................................................
4 - DNI2            | 1 - Persona2
5 - Nombre2         |
6 - Apellido2       |
7 - Ciudad2         |
.................................................................
Si te fijas bien, el indice a cada persona incrementa sólo cuando se tienen todos los datos. Por tanto si extraemos el dato para la persona1, sus datos iran desde 0 a 3, para la segunda de 4 a 7.
¿Que tiene en común el indice con la posición de los datos?
Fácil: su división entera con 4.
Hagamos cálculos:

0 div 4 = 0
...
3 div 4 = 0
4 div 4 = 1
...
7 div 4 = 1
8 div 4 = 2

Veamos... en posición 8, quien comienza... exacto! Una nueva persona.
¿Que hago yo?
Me valgo de ese indice para tener referencia a la persona. Ese indice lo tengo que guardar en algún lado para poder recuperar los datos desde la rejilla hacia el LisBox.

Yo preferí guardar ese dato, en la columna 0 de la rejilla de modo que se impida modificarlo. En las demás celdas de dicha fila se guardan sus datos.

¿Cómo se hace entonces?
1. Leer de la fila i-ésima del StringGrid la columna 0. Guardar dicho dato en una variable. Yo la llamé indice.

Código Delphi [-]
indice := STringGrid1.Cells[0,i] // i: i-ésima fila

2. Teniendo ese índice puedo hacer el paso inverso:

2.1. Como en la columna 1 (j = 1) tenemos el DNI, entonces el DNI para dicha persona en el ListBox ocupa la posición k = (Indice x 4)

Entonces hacemos:

Código Delphi [-]
ListBox1.Items[k] := TStringGrid.Cells[1,i]

2.2. Como en la columna 2 (j = 2) tenemos el Nombre, entonces el Nombre para dicha persona en el ListNox ocupa la posición k = (Indice x 4) + 1:


Código Delphi [-]
ListBox1.Items[k] := TStringGrid.Cells[2,i]

2.3. Como en la columna 3 (j = 3) tenemos el Apellido, entonces el Apellido
para dicha persona en el ListBox ocupa la posición k = (Indice x 4) + 2:


Código Delphi [-]
ListBox1.Items[k] := TStringGrid.Cells[3,i]

En forma general se tiene que cualquier dato ocupa una posición k-ésima en el listBox en base a esta fórmula:

k := (Indice x 4) + (j - 1)

Siendo j la columna del dato que leemos.

De forma inversa, podemos afirmar que:

STringGrid1.Cells[PosDato,i] := ListBox1.Items[(Indice x 4) + (PosDato - 1)]

Siendo PosDato la posición en que vienen:
1 -> DNI
2 -> Nombre
3 -> Apellido
4 -> Ciudad

Nuevamente, aconsejo revisar el código que te paso. Haz lo siguiente, seleccona algún botón, por ejemplo el Botón "Buscar Todos". Haz doble click y verás esto:

Código Delphi [-]
procedure TfrmPrincipal.bBuscarTodosClick(Sender: TObject);
var cantidad: integer;
begin
  LimpiarRejilla;
  cantidad := BuscarYVolcar(eBuscar.Text,rgOpcion.ItemIndex);
  if Cantidad = 0
     then ShowMessage('No se encontraron concidencias')
     else begin
           sgRejilla.Enabled := true;
           bVolcarAListBox.Enabled := true;
          end;
end;

¿Que es ese LimpiarRejilla?
Para saber lo que hace, debes presionar Crtl y dar click en dicha línea. Notarás que mientras tengas presionada la tecla Crtl, el cursos cambiará a la forma de mano y que el código parece ser un link.

Pues eso es: te "linkea" hacia el código. En este ejemplo al código de LimpiarRejilla.
De igual manera puedes hacer con BuscarYVolcar, y cualquier código que veas.

Y nuevamente, analiza en frio y notarás como funciona el código.
Te aconsejo que primero lo compiles y pruebes el ejecutable, sin mirar código... después analiza el código.

Está correctamente escrito con comentarios para que se entienda.

Espero tus novedades.

Saludos,
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo.zip (4,6 KB, 4 visitas)
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
 



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
Ayuda con código. wofox Varios 6 11-12-2007 00:16:21
Ayuda con un codigo JoNieve C++ Builder 0 21-04-2007 12:27:33
Ayuda con error en codigo :-( jorgegetafe Varios 6 07-02-2007 19:29:04
Codigo de Barras.... Ayuda!!!!! adolfoz Varios 14 15-11-2006 17:13:55
Ayuda con código de barras ramiretor Varios 0 28-06-2003 00:42:58


La franja horaria es GMT +2. Ahora son las 17:39:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi