Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 30-05-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Fin del problema (no del hilo).

Aquí tengo el codigo made in kbaby para buscar a todos los que tienen el mismo DNI (o lo que sea).

Código Delphi [-]
procedure TForm1.Button5Click(Sender: TObject);
var salto,casilla:integer ;
begin
  panel2.visible:=false;
  edit3.Visible:=false;
  button5.Visible:=false;
  salto:=0;
  casilla:=0;
  while l.items.count > salto do begin
     If edit3.text = l.Items[salto] then begin
          t.cells[1,casilla+1]:=l.Items[salto];
          t.cells[2,casilla+1]:=l.items[salto+1];
          t.cells[3,casilla+1]:=l.items[salto+2];
          t.cells[4,casilla+1]:=l.items[salto+3];
          t.rowcount:=t.rowcount+casilla;
          inc(casilla);
          end;
     inc(salto,4);
     end;
end;

Funciona de maravilla jajaja.

He añadido al código un contador el de t.rowcount porque conforme encuentre a una persona la mesa en la tabla y aumente una fila.

Ahora lo siguiente que voy a hacer, es una vez volcado en la tabla (una persona o dos o las que sean) si la modifico, guardarla y que no se borren las otras. YeahhH!!!!

Última edición por kbaby fecha: 30-05-2008 a las 23:14:28. Razón: El código fallaba porque el inc estaba en lugar equivocado, gracias Delphius.
Responder Con Cita
  #42  
Antiguo 30-05-2008
Avatar de Fenareth
[Fenareth] Fenareth is offline
Miembro Premium
 
Registrado: oct 2007
Ubicación: Guadalajara, Jalisco, México
Posts: 494
Poder: 17
Fenareth Va por buen camino
Cita:
Empezado por kbaby Ver Mensaje
Fin del problema (no del hilo).

Aquí tengo el codigo made in kbaby para buscar a todos los que tienen el mismo DNI (o lo que sea).

Funciona de maravilla jajaja.

Ahora lo siguiente que voy a hacer, es una vez volcado en la tabla (una persona o dos o las que sean) si la modifico, guardarla y que no se borren las otras. YeahhH!!!!
Se siente bien cierto ???
Responder Con Cita
  #43  
Antiguo 30-05-2008
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
Cita:
Empezado por kbaby Ver Mensaje
Fin del problema (no del hilo).
Aquí tengo el codigo made in kbaby para buscar a todos los que tienen el mismo DNI (o lo que sea).
(...)
Un momentito... ¿solo son créditos tuyos? made in kabby, powered by Delphius.

Cita:
Empezado por fenareth Ver Mensaje
Se siente bien cierto ???
Si... se siente... bien...
Veo que mi alumnito está aprendiendo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #44  
Antiguo 30-05-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Cool

Que haría yo sin tí jajaja

Ya le hice unos retoques al código. Bueno me voy a dormir, mañana ya miro el paso inverso:

TStringGrid -> TListBox


Buenas noches
y....


gracias
Responder Con Cita
  #45  
Antiguo 31-05-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Bueno! Aquí regreso Con una pregunta para seguir adelantando cosas...

Quisiera utilizar un form2 (por falta de espacio) donde coloque una StringGrid (donde se volcarán todos los items de mi ListBox). Una vez volcados, quisiera hacer cálculos con ellos, el porcentaje de hombres/mujeres, el porcentaje de gente de Córdoba... etc... (eso si sé).

Mi duda es la siguiente... ¿qué tengo que hacer para en el form2 utilizar el listbox que tengo en el form1?.

Gracias.
Responder Con Cita
  #46  
Antiguo 31-05-2008
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
A ver... ¿Tu deseas tener una copia del STtringGrid del form1 en un TStringGrid de un form2?

Si es eso, creo que el archivo que había dejado al inicio del hilo te sirve de ayuda. Debes añadir en uses la unit del otro.

Y para "copiar" los datos necesitas recorrer fila a fila y columna a columna e ir copiandolos. Es decir:

Desde fila 1 hasta Cantidad de filas - 1 hacer:
Desde columna 1 hasta Cantidad de columnas -1 hacer:
Celda de StringGrid2 (columna, fila) = celda de StringGrid1 (columna, fila)

Espero que se entienda.
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #47  
Antiguo 01-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Delphius, ¿no podría utilizar mi boton volcar en mi form2? Mira el programa que hice, sería hacer otro boton similar, pero que volcara en otro StringGrid situado en form2.
Responder Con Cita
  #48  
Antiguo 06-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Cool

Aquí estoy de nuevo. El lunes, último día para entregar mi proyecto. Está fenomenal gracias!. Bueno bueno lo unico que me queda es hacer eso de que cuando vuelco a una persona al StringGrid y la modifico desde allí, guardarla en el listbox.

Como me dijiste delphius "piensa en frio" pues eso hice. Se me ocurrió hacer esto:

1. Busco a la persona por su DNI "así me aseguro que sólamente salga 1 persona".
2. Una vez tengo a la persona (con sus datos) en la rejilla, modifico los datos.
3. Hago un button que lo que haga es borrar a esa persona1 de la lista y con los nuevos datos que hay de esa persona1 en la rejilla los vuelco a edits que luego se guardarán en el listbox.

Yo creo que se puede hacer, y sería facil ya que dispongo de conocimientos para hacerlo. Sólo quiero una opinion:

¿está bien pensado?.

Bueno! Luego mas tarde me pondre a ponerlo en práctica y ya cuando lo termine, me lo traeré para que lo veais que está muy chuuuloooo!!!.
Saludos
Responder Con Cita
  #49  
Antiguo 06-06-2008
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
Cita:
Empezado por kbaby Ver Mensaje
Aquí estoy de nuevo. El lunes, último día para entregar mi proyecto. Está fenomenal gracias!. Bueno bueno lo unico que me queda es hacer eso de que cuando vuelco a una persona al StringGrid y la modifico desde allí, guardarla en el listbox.

Como me dijiste delphius "piensa en frio" pues eso hice. Se me ocurrió hacer esto:

1. Busco a la persona por su DNI "así me aseguro que sólamente salga 1 persona".
2. Una vez tengo a la persona (con sus datos) en la rejilla, modifico los datos.
3. Hago un button que lo que haga es borrar a esa persona1 de la lista y con los nuevos datos que hay de esa persona1 en la rejilla los vuelco a edits que luego se guardarán en el listbox.

Yo creo que se puede hacer, y sería facil ya que dispongo de conocimientos para hacerlo. Sólo quiero una opinion:

¿está bien pensado?.

Bueno! Luego mas tarde me pondre a ponerlo en práctica y ya cuando lo termine, me lo traeré para que lo veais que está muy chuuuloooo!!!.
Saludos
Hola kbaby, no me parece demasiado indicado realizar el borrado y luego agregarlo.
¿Si se puede modificar tranquilamente sin estar borrando e insertando para que hacer esos pasos? Sobre todo lo desaconsejo si utilizas Add en vez de Insert. Puesto que Add agrega al final, e Insert en la posición indicada en su parámetro y corriendo los demás elementos.

Si puedes localizar el indice al que hace mención los datos de dicha persona, tranquilamente puedes modificar los datos de dicho indice en el TListBox.

Código Delphi [-]
ListBox.Items[indice] := STringGrid.Cells[x,y];

Esa línea contra estas dos:

Código Delphi [-]
ListBox.Items.Delete(...)
ListBox.Items.Add(...)

No tengo Delphi a mano, pero creo que se entiende la idea.

Al volcar los datos desde el TStringGrid hacia el TListBox se sobreescriben todos los datos asociados a dicha persona.
El guardado físico (en el archivo txt) no le interesa si se modificaron 1, 3, 40 datos... guardará en el orden que se encuentren en el TListBox.

Si borras y agregas estarás corriendo los datos y si bien al final en el txt se guardarán como estan representados el efecto es distinto... Los datos inicialmente estaban en cierto orden, y al final... pueden que ya no conserven dicha posición.
Puede ser "molesto" el correr los datos de lugar.
Lo mejor sería sobreescribirlos.

¿Porqué quieres borrarlos? ¿No terminaste de comprender mi idea verdad?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #50  
Antiguo 06-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Cita:
¿Porqué quieres borrarlos? ¿No terminaste de comprender mi idea verdad?
Ajá y ni logro comprenderla. Y esto se debe a que el profesor no me enseño como hacerlo y hoy se lo pregunte y me dijo que buscará por internet y yo pensé esto. Si mi listbox tiene estos items:

nombre1
provincia1
telefono1
nombre2
provincia2
telefono2

Si yo busco a una persona (a la persona 1) y la vuelco en un stringgrid. Una vez alli, modifico su nombre1 (y pongo pepe). Luego borro nombre1, provincia1, telefono1. Y añado: pepe, provincia1, telefono1. Quedando:

nombre2
provincia2
telefono2
pepe
provincia1
telefono1

El orden de las personas no altera nada, siempre que los items tengan una posicion correcta por ejemplo, todos los telefonos tendran estas posiciones:

3-6-9-12...

Mientras esos órdenes no se alteren... puedo hacerlo ¿o no?

Grax
Responder Con Cita
  #51  
Antiguo 06-06-2008
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
Efectivamente kbaby, los datos siguen el orden.
Pero si te fijas ahora la persona que estaba primero, queda despues de una modificación en último lugar.

Y eso, puede ser molesto.

Como es de práctica lo que estás haciendo no importa mucho. Pero en situaciones reales puede marear un poco.

Lo que tu buscas se consigue en dos pasos, lo que yo digo se consigue en uno.
Si se puede sustituir en un solo paso ¿para que hacer más de la cuenta?

Te estoy preparando una demo para que veas de lo que hablo. Dame unos minutos más y te la tengo lista.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #52  
Antiguo 06-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Pues gracias. Al menos se que puedo preparar un codigo, por feo que sea, pero "pienso en frio" con papel :P

Jajaja. Gracias tio.
Responder Con Cita
  #53  
Antiguo 06-06-2008
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
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
  #54  
Antiguo 07-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Red face

Bueno como aquí tenemos mucho que hablar, voy a ir botton por botton para ir diciendo que tal me parece y darte gracias.

Button abrir: ¡Que bien queda! No me imaginaba que se podía hacer eso. A mi me enseñaron el otro procedimiento para abrir un archivo y claro, utilizaré ese para mi proyecto final. Pero para mis futuros programas, el que vi que utilizaste me parece muy bueno. Es que queda profesional jajaja. Gracias.

Button Guardar: ¿Yo puedo sustituir mi código entero por el que ví en tu button?
Código Delphi [-]
lbArchivo.Items.SaveToFile(Ruta);

Ese código, es muy pequeño para el que tengo que poner yo para guardar.
¿En qué se diferencia cada uno? Del que uso yo, al que usas tu.
Gracias.


Button Volcar al TSringGrid:
Código Delphi [-]
  LimpiarRejilla;
  VolcarARejilla;
  sgRejilla.Enabled := True;
  bVolcarAListBox.Enabled := True;

¿Y ese código tan pequeño? Yo uso, como puedes ver en mi anterior subida para que veais mi proyecto... un código muy largo y que hace, exactamente lo mismo. ¿Ese código lo puedo utilizar yo o necesito tocar antes algunas opciones de algun elemento?.
Me llamó la atencion lo de "LimpiarRejilla" "VolcarARejilla". ¿Delphi entiende las palabras en español?.
Gracias.

Button Buscar: Me parece genial el código. Pero... como... yo estuve casi una tarde pensando en otro código (powered Delphius) pues... usaré el que estuve pensando. Jajajaja. Pero gracias.
Lo de los criterios de búsqueda creo que me va mal o no se usarlo. Si yo pincho en el criterio DNI y pongo Guadalupe en la búsqueda. Me sale el usuario Guadalupe y en realidad tendría que salir que no hay paciente con ese DNI. Pienso :P Y cuando pincho en Buscar Todos me salta error.
Gracias.

Button Volcar al TListbox: ¿Es necesario que en la columna 0 salgan los número del indice de la persona? El código lo estoy aún pensando porque "GuardarCambios" ese comando... ¿delphi lo entiende? Es un comando en español y suponía que delphi entendía solo ingles.
Gracias.

Delphius, tengo que ir a clase que empiezan a las 12.00 (españa). Luego me detendre para ver el Ejemplo y apuntarme codigos en mi libreta. Luego te cuento mas cossas que tengo en la punta de la lengua.

Muchas Gracias



-----edito---------

No me había leído lo de Pulsar CTRL para ver loq ue hace lo de LimpiarRejilla, Guardar. No respondas a esas preguntas, estoy como tu dices: "analizando el código en frio".

Última edición por kbaby fecha: 07-06-2008 a las 10:35:50.
Responder Con Cita
  #55  
Antiguo 07-06-2008
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
Cita:
Empezado por kbaby Ver Mensaje
Bueno como aquí tenemos mucho que hablar, voy a ir botton por botton para ir diciendo que tal me parece y darte gracias.

Button abrir: ¡Que bien queda! No me imaginaba que se podía hacer eso. A mi me enseñaron el otro procedimiento para abrir un archivo y claro, utilizaré ese para mi proyecto final. Pero para mis futuros programas, el que vi que utilizaste me parece muy bueno. Es que queda profesional jajaja. Gracias.

Button Guardar: ¿Yo puedo sustituir mi código entero por el que ví en tu button?
Código Delphi [-]
lbArchivo.Items.SaveToFile(Ruta);


Ese código, es muy pequeño para el que tengo que poner yo para guardar.
¿En qué se diferencia cada uno? Del que uso yo, al que usas tu.
Gracias.
La diferencia es que tus códigos para abrir y guardar son de un nivel más bajo. trabajas en forma "directa" con el archivo. Mientras que yo, empleo la biblioteca VCL que ofrece Delphi. Como esta amplia biblioteca ya cuenta con objetos y clases que trabajan con archivos me evito el código que tu expones.

Cuando hacía mis prácticas en Pascal, cuando me iniciaba en lenguajes, debía trabajar del mismo modo que tu. Y de hecho, cuando me inicié en Delphi también lo segui haciendo. Si te resulta agradable tu método úsalo.

Cita:
Empezado por kbaby Ver Mensaje
Button Volcar al TSringGrid:

Código Delphi [-]
  LimpiarRejilla;
  VolcarARejilla;
  sgRejilla.Enabled := True;
  bVolcarAListBox.Enabled := True;

¿Y ese código tan pequeño? Yo uso, como puedes ver en mi anterior subida para que veais mi proyecto... un código muy largo y que hace, exactamente lo mismo. ¿Ese código lo puedo utilizar yo o necesito tocar antes algunas opciones de algun elemento?.
Me llamó la atencion lo de "LimpiarRejilla" "VolcarARejilla". ¿Delphi entiende las palabras en español?.
Gracias.
Pues, yo me las ingenio para que Delphi entienda español Aunque escribí ese código en castellano para que tu entiendieras. Por lo general escribo mis códigos en inglés... Delphi entiende mejor el inglés.

Antes de usarlo, entiende que és y que hace.

Cita:
Empezado por kbaby Ver Mensaje
Button Buscar: Me parece genial el código. Pero... como... yo estuve casi una tarde pensando en otro código (powered Delphius) pues... usaré el que estuve pensando. Jajajaja. Pero gracias.
Lo de los criterios de búsqueda creo que me va mal o no se usarlo. Si yo pincho en el criterio DNI y pongo Guadalupe en la búsqueda. Me sale el usuario Guadalupe y en realidad tendría que salir que no hay paciente con ese DNI. Pienso :P Y cuando pincho en Buscar Todos me salta error.
Gracias.

Me olvidé de decirtelo.
Buscar trabaja en forma independiente del criterio de búsqueda. Encuentra la primera concidencia dentro del todo el TListBox. Si pones un DNI y lo encuentra muestra los datos de dicha persona; si pones una Ciudad y la encuentra... también funciona. Como dije: es independiente.

En cambio, Buscar Todos necesita del criterio. Buscará todas las coincidencias según el criterio establecido.

Cita:
Empezado por kbaby Ver Mensaje
Button Volcar al TListbox: ¿Es necesario que en la columna 0 salgan los número del indice de la persona? El código lo estoy aún pensando porque "GuardarCambios" ese comando... ¿delphi lo entiende? Es un comando en español y suponía que delphi entendía solo ingles.
Gracias.

Pues yo preferí que liste los indices en dicha columna para impedir que se modifique. Si lo hago que lo liste en la columna 1, un error de dedo puede hacer fallar a todo el código.
Por ejemplo, supongamos que lo ponemos en la columna 1. Se vuelcan los datos... hago doble clic en la celda y borro ese indice y pongo otro...

¿A donde van a parar los cambios? A otro lugar. Y si en vez de un número pongo una letra... ¡peor! lindo error vas a obtener.

Entonces, para evitarme lios. el indice es inalterable y por ello está listado en la columna 0.

Repito... yo me las ingenio para que entienda Español, aunque si deseas... puedo probar a ver si entiende italiano.

Cita:
Empezado por kbaby Ver Mensaje
Delphius, tengo que ir a clase que empiezan a las 12.00 (españa). Luego me detendre para ver el Ejemplo y apuntarme codigos en mi libreta. Luego te cuento mas cossas que tengo en la punta de la lengua.

Muchas Gracias



-----edito---------

No me había leído lo de Pulsar CTRL para ver loq ue hace lo de LimpiarRejilla, Guardar. No respondas a esas preguntas, estoy como tu dices: "analizando el código en frio".
Algunas cosas sería bueno que te explicara, pero a modo de pistas... para que te ayuden a combatir un poco el frio.

¿Que diferencia notas entre esto:

Código Delphi [-]
procedure bAbrirClick(Sender: TObject);

y

Código Delphi [-]
procedure GuardarCambios(Fila: integer);

Fuera del idioma. Ambas cosas son lo mismo. Si te fijas... ambos tienen una palabra rara llamada procedure. Esto significa que son procedimientos.

El primer caso significa que el procedimiento corresponde a un Click del botón bAbrir y el segundo procedure lo que hace es guardar cambios. ¿Cúando se ejecuta el procedimiento?

Cuando sea necesario. Un procedimiento puede ser llamado por otro.

Ve al procedimiento y a la función como un conjunto de lineas de código que se ejecutan en cuanto se lo solicitan.

Hay funciones y procedimientos que tienen paréntesis. Por ejemplo el procedure GuardarCambios. Dentro de ese paréntesis se listan los parámetros que requiere el procedimiento para hacer lo que debe hacer.
En este caso el parámetro es uno, y se llama Fila.
¿Que es un parámetro? una variable que puede ser usada dentro del código de GuardarCambios para hacer las operaciones necesarias.

Si tienes la oportunidad de acceder al libro de Turbo Pascal de Luis Goyanes Aguilar (No estoy seguro de si el primer apellido está bien escrito) allí está bien explicado el uso de funciones y parámetros.

¿Porqué los procedimientos y funciones? Porque eso permite que esas porciones de código se ejecuten más de una vez cuando se desee. Y me evito poner el mismo código una y otra vez.

De ese modo, cuando tu haces;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  HazAlgo(Edit1.Text);
end;

Estás diciendo que ante la pulsación de Button1 se ejecute el código del procedimiento HazAlgo, con el valor del texto del Edit1 como parámetro.

Y si justo el procedimiento HazAlgo me sirve en otro lado ¿como hago?

Pues fácil. Lo volvemos a "llamar":

Código Delphi [-]
procedure TForm1.Label1Click(Sender: TObject);
begin
   HazAlgo(Label1.Caption);
end;

¿Que diferencia hay? Pues que en vez de usar el texto del Edit, ahora usamos el de un Label.

Espero que esta mini ayuda te sirva para comprender porqué Delphi entiende el Español.

Me parece, según mi opinión, que el uso de procedimientos y funciones es de cátedra básica en programación. El no enseñar eso... pues... me parece una total falta.
No se como te estarán dando clases de programación, pero el no haberte enseñado esos conceptos atenta contra la enseñanza. No se puede avanzar conceptualmente sin abordar el estudio de procedimientos y funciones.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #56  
Antiguo 09-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Bueno recien me hago un hueco de estudiar integrales y estadistica para poder ver un poco el ejemplo y tu post. Pues como te dije, yo no aprendí nada de eso. A mi me enseñan las cosas pero de modo lento... porque no todos los de mi aula tenemos la experiencia de tener un ordenador en casa para poder ensayar y a otros se le da mal el aprnedizaje del codigo. Entonces tenemos un nivel muy bajo, pero estas "llamadas" yo las hago de otra manera o lo que me enseñaron a mi por llamadas es cuando estas en un código y necesitas que actue otro button, entonces pones ButtonX.Click;

De todas formas me voy a poner ahora un ratito con el delphi a ver si saco algo. Muchas gracias, a ver si acabo examenes y me pongo a "delphilar".
Responder Con Cita
  #57  
Antiguo 09-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Y bien aquí estoy. Estuve dándole vueltas a tu código hasta me dieron ganar de copiarlo pero nada que no encuentro que "cosa" haces para que se modifique. Así que me creé este:

Código Delphi [-]
procedure TForm1.Button10Click(Sender: TObject);
var y: integer;
begin
  l.Items.clear; // limpio el listbox
  for y:= 1 to t.rowcount-1 do begin //antes de iniciar esto, mi rejilla
                                    // ya le volqué todas las personas
      edit1.text:=t.cells[1,y];
      edit2.text:=t.cells[2,y];
      edit4.text:=t.cells[3,y];
      edit5.text:=t.cells[4,y];
      button1.click; // ejecuta el boton de añadir

end;
end;

Cosas buenas:
- Hace lo que quiero que haga (cuando una persona esta en la rejilla y le modifico o sin modificar) guarda todos los datos de la rejilla en el listbox (limpiándolo previamente).

Cosas malas:
- Las personas no estan ordenadas por ningún criterio, así que cágate (perdon xD) cuando mi "hospital" tenga 1239123947823984905 usuarios y la muchacha de recepción le de por buscar al paciente Pepito Gomez (se muere ).

Jajaja que te parece tio voy a seguir echándole un ojo a eso de hacer llamadas a tu forma que me gusto!
Responder Con Cita
  #58  
Antiguo 10-06-2008
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
Cita:
Empezado por kbaby Ver Mensaje
Bueno recien me hago un hueco de estudiar integrales y estadistica para poder ver un poco el ejemplo y tu post. Pues como te dije, yo no aprendí nada de eso. A mi me enseñan las cosas pero de modo lento... porque no todos los de mi aula tenemos la experiencia de tener un ordenador en casa para poder ensayar y a otros se le da mal el aprnedizaje del codigo. Entonces tenemos un nivel muy bajo, pero estas "llamadas" yo las hago de otra manera o lo que me enseñaron a mi por llamadas es cuando estas en un código y necesitas que actue otro button, entonces pones ButtonX.Click;

De todas formas me voy a poner ahora un ratito con el delphi a ver si saco algo. Muchas gracias, a ver si acabo examenes y me pongo a "delphilar".
Me estaba temiendo de que tu no tienes equipo en casa, por como muchas veces me decías que anotabas cosas en tu libreta y te llevas los apuntes a casa.

Bueno no importa, lo importante es que continues y no te dejes vencer.
Lamento si te ha resultado duro que yo haya elejido ese modo de mostarte las cosas, pero me parece de que ese modo se consiguen mejores cosas.

Lo del "llamar" al bottonClick es una opción. Y es algo parecido a lo que hago yo... la diferencia es que tu pones el código a ejecutar en botones, mientras que yo hago que los botones llamen a ciertos procedimientos y son éstos quienes se encargan de hacer el trabajo.

Básicamente yo hago que el botón de la orden al procedimiento. Mientras que tu haces que todo el trabajo lo hagan botones. Esto no siempre es deseado. A medida que avancen tus conocimientos sobre el tema comprenderás las diferencias.

Um... lo que me dices sobre la enseñanza, pues... yo soy de opinar de que si se van a dar clases que se den bien. En otro caso que se vayan.

La enseñanza sea la que sea, debe darse correctamente y por más lenta que sea, es preferible explicar bien las cosas básicas antes que estar meses a medias.

¡Tu metele ganas!

Cita:
Empezado por kbaby Ver Mensaje
Y bien aquí estoy. Estuve dándole vueltas a tu código hasta me dieron ganar de copiarlo pero nada que no encuentro que "cosa" haces para que se modifique. Así que me creé este:

Código Delphi [-]procedure TForm1.Button10Click(Sender: TObject);
var y: integer;
begin l.Items.clear; // limpio el listbox
for y:= 1 to t.rowcount-1 do begin //antes de iniciar esto, mi rejilla
// ya le volqué todas las personas
edit1.text:=t.cells[1,y];
edit2.text:=t.cells[2,y];
edit4.text:=t.cells[3,y];
edit5.text:=t.cells[4,y];
button1.click; // ejecuta el boton de añadir
end;
end;


Cosas buenas:
- Hace lo que quiero que haga (cuando una persona esta en la rejilla y le modifico o sin modificar) guarda todos los datos de la rejilla en el listbox (limpiándolo previamente).

Cosas malas:
- Las personas no estan ordenadas por ningún criterio, así que cágate (perdon xD) cuando mi "hospital" tenga 1239123947823984905 usuarios y la muchacha de recepción le de por buscar al paciente Pepito Gomez (se muere ).

Jajaja que te parece tio voy a seguir echándole un ojo a eso de hacer llamadas a tu forma que me gusto!

Pue eso... sigue dandole ganas. Un truco más: Copia el código de los procedimientos y funciones que se llaman para un botón dentro del botón y notarás que igualmente funciona. Por ejemplo si yo tengo algo como esto:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Se_puede: boolean;
begin
  Llamar_a_A;
  Se_puede = Se_puede_hacer_B;
  if Se_puede
     then Llamar_a_B;
end;

Lo que hace Delphi, como para que entiendas, es hacer eso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Se_puede: boolean;
begin
  // aqui comienza el código de Llamar_a_A;
  // ....
 // aqui termina el código de llamar_a_A;
 Se_puede = // aquí el código de Se_puede_hacer_B
 if Se_puede
   then begin
            // aqui comienza el código de Llamar_a_B
            // ...
            // aqui termina el código de Llamar_a_B
          end;
end;

¿Se entiende? Es como tener un código enorme al cual parto en pedacitos mas chicos. Cada parte hace algo... y lo lindo de esto es que puede que esas partes sean más o menos independientes una de otra lo cual favorece a que se evita tener que estar repitiendo código. Si justo una de esas partes me sirve aqui y hallá... en ves de copiar su código la "llamo" y solita hara su trabajo (Si recibe parámetros, quien la llama le pasa los parámetros).

Más o menos lo podemos ver como un "díalogo". Formalmente se los puede llamar como el cliente y el subordinado. O en ocasiones el maestro y el subordinado.
A ver... te voy a dar un ejemplo con algo cotidiano. Supongamos que quiero comprar dólares. ¿Quien es el cliente? Nosotros. Puesto que somos los interesados en hacer algo. ¿Quién es nuetro subordinado? El cajero puesto que cedemos algo de nuestra actividad en alguien más. Podríamos decir "Para que hacerlo yo... si hay alguien que lo sabe hacer y lo hace bien?"

Entonces quedamos en que necesitamos comprar dolares (lo que deseamos hacer). Cuando llega nuestro turno de ser atendidos soltamos una frase como la siguiente "Buenos días, quiero comprar dólares" El subordinado nos dice: "Buenos dias. Muy bien, ¿Cuanto desea?". Le informamos el monto, y el nos responde con un "Son xxx pesos. ¿Le parece bien?" Si respondemos afirmativamente, nos solicita nuestro DNI. Se lo decimos, el confirma la transacción y al minuto nos entrega los dolares correspondientes y el vuelto en caso de ser necesario.

Si te fijas, alguien para hacer si trabajo ha necesitado saber algo por parte del cliente. En este caso, el cajero necesitaba conocer de nosotros la cantidad a comprar y nuestro DNI. En programación esto se suele hacer con el paso de parámetros.

¿Te parece raro lo que te he dicho?
Pues veamoslo como podríamos resolverlo esto en forma de código:

Código Delphi [-]
procedure TForm1.ComprarDolaresClick(Sender: TObejct);
var pesos, dolares, vuelto: real;
     DNI: integer;
     confirmar: boolean;
begin
    dolares := 0.0;
    pesos := StrToFloat(CantidadAComprar.Text); // es un TEdit
    DNI := StrToInt(DNI.Text);
    confirmar := Confirmar.Checked; // es un TCheckBox
    if Confirmar
       then begin
                dolares := pesos div 3.15 // 3.15 es la tasa de cambio
                vuelto := pesos - (dolares x 3.15);
                ButtonGuardarTransaccion.Click // asi lo harías tu...
              end;

Se que es un ejemplo... no pretende ser totalmente gráfico y real. ¿Como se puede resolver esto?

Una alternativa que yo utilizaría es esta:

Código Delphi [-]
procedure TForm1.ComprarDolares(AComprar: real; var TasaCambio: real);
var Confirmar: boolean;
begin
   PedirTasaCambio(TasaCambio);
   Confirmar = AnalizarCompra(TasaCambio);
   if Confirmar
     then Comprar(AComprar);
end;

De ese modo yo hago algo como esto para llamar a ese procedimiento:

Código Delphi [-]
procedure TForm1.ButtonComprarDolaresClick(Sender: TObject);
begin
   ComprarDolares(StrToFloat(Cantidad.Text), tasa);
   //Nota como primero paso convertiendo el texto de un TEdit en float,
   // tasa posiblemente sea una variable global
end;

¿Eso es todo? ¿Y aquel emborroso código inicial? ¿Donde ha quedado aquello del DNI, devolver el vuelto, darle el dinero... y demás...? Pues de eso se encarga el procedimiento Comprar.

Analicemos...
ComprarDolares es un procedimiento, no es un Button... es algo que se va a ejecutar cuando se presione el botón. Para que ComprarDolares funcione, necesita saber dos cosas:
1. La cantidad a comprar (parámetro AComprar)
2. Una tasa de cambio (parámetro por valor, TasaCambio).

¿De donde sale esa tasa de cambio? Para que la necesitamos? En realidad, cuando uno compra dolares uno va y se informa de la tasa de cambio y en base a ello decide... quien en realidad sabe de la tasa es el cajero...
Si te fijas, antes de TasaCambio: real, hay una palabra var. Esto hace que el parámetro sea por valor. Viene a ser como un parámetro de salida (que puede ser de utilidad para después).

Entonces, estamos frente a un díalogo entre los procesos y funciones y la forma de hacerlos hablar es a través de parámetros. Hay ocasiones en que no son necesarios los parámetros, otras en que si.

Nuestro botón se comunica con ComprarDolares, y éste a su vez con PedirTasaCambio, AnalizarCompra, y Comprar.

¿Quien es cliente y subordinado? Pues se trata de una cadena...
1. Primero: el procedimiento ComprarDolares es subordinado del Botón ComprarDolares. Por tanto el cliente (interesado) es el Botón.
2. Segundo: a su vez, el procedimiento ComprarDolares es cliente puesto que subordina parte del trabajo a Comprar, PedirTasaCambio, etc...
3. Posiblemente, y es de esperar que PedirTasaCambio, Comprar hagan otras cosas.... cosas que ha nosotros no nos interese saber, pero que le son necesarias para hacer su trabajo.

Por ejemplo: PedirTasaCambio, por dentro haga cosas como "VerificarConBancoCentral", "VerificarSiHayDolares", o cosas por el estilo...

El asunto es que a un problema grande, lo partimos en pedacitos chicos, que juntos hacen las cosas más grandes. Esto se conoce como el principio divide y vencerás. Esto lo verás más adelante en tu cursado.

Se que posiblemente te sientas mareado por todo lo que te he dicho... es normal, al comienzo cuesta entender las cosas.

Lo más sorprendente es que tu lo aplicas, y ni siquieras te haz dado cuenta... ¿O acaso el haber hecho un Button2.Click no es parte de esa filosofía?

Saludos, kbaby... Piensa en frio.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 10-06-2008 a las 04:07:04.
Responder Con Cita
  #59  
Antiguo 16-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Hola.

Siento responder tan tarde pues estuve (estuve!!) liado con los examenes que al final he acabado y creo que muy bien. Al final ya he acabado con finales y subidas de notas así que ahora a descansar este veranito.

Tengo una buena noticia!! Le presenté mi proyecto a mi profesor de informática. Lo analizó y tal... bueno me dio la nota y me puso un 10. ¡¡Un 10!!. Sí como puedes oir, la mejor nota. Que feliz!! Bueno, es que no sabes como me ha quedado finalmente despues de todos los retoques que le hice. De todos modo ahora a las 13:30 p.m voy a la subida de nota porque la media de las 3 evaluaciones es un 9,3 ((eval1+eval2+eval3)/3). Ya que voy, le dije a mi profesor, que me llevare el pendrive para guardarme todos los trabajos que tengo en el ordenador del aula para que no se me olviden como se hacen cosas simples y así traerme el programa (ya lo verás ajaja).

Bueno estuve viendo y leyendo tu mensaje anterior jaja. Pues si que es un lio, pero un lio gordo pero creo que conforme avance se podrá ir resolviendo. Es como cuando estás por primera vez enfrete a un polinomio muy grande. En realidad son sencillas sumas, restas, multiplicaciones y divisiones que se te presentan acumuladas en una misma estructura. En ese momento te bloqueas. Conocía el principio DYV y es verdad todo lo que dice.

Intentaré aprender muchas cosas de delphi durante este verano.

Me voy a proponer un proyecto... un juego Bueno lo que voy a intentar hacer estos dos meses de verano será un pequeño juego que se base en un buscaminas (algo facil supongo, pero bueno..). Espero que me sea leve... (bueno leve para ti, pQ estaré aqui dando por culillo.

Y bien, voy a ir a eso y luego te comento. Muchos saludos.

PD: Antes de irme, lo que si me gustaría aprender es como usar los TCheckBox.

He buscado por google, pero las explicaciones que vienen no las entiendo porque las explican a un nivel mas avanzado y esto es lo que me pasa con todo. Jajaja

Última edición por kbaby fecha: 16-06-2008 a las 11:49:17.
Responder Con Cita
  #60  
Antiguo 16-06-2008
Avatar de kbaby
kbaby kbaby is offline
Miembro
 
Registrado: oct 2007
Ubicación: Granada
Posts: 178
Poder: 17
kbaby Va por buen camino
Aquí vuelvo... con la mejor noticia....

En mi boletín de calificaciones tengo un 10 en informatica !!!! Siiii!!! Gracias

Como dije, aquí os dejo el enlace de mi super proyecto ^^ Mola Ehh ^^

Alomejor lo veis muy grande, es que nuestros monitores son super grandes y cuando sigo super grandes, es SUPER grandes jajaja. Tambien la fonts con la que lo hice está solo en el pc de mi colegio.

Bueno.

Delphius, me traje todos los proyectos que fui haciendo (muchos) desde que aprendi a sumar 2 edits hasta hacer lo que hago.
¿Qué tal si los voy subiendo poco a poco para la gente que se inicia? Los subo e indico lo que hace cada programa. Hay mucho código que puede ser util a otros (como a mi).

Mi proyecto final 2008 -> http://rapidshare.com/files/122835209/Final.rar.html

* Comprimido con Winrar
* Dentro viene los requisitos que tenía que tener mi programa
* El nombre de mi hospital es en honor a Paula (si lo lees... que te lo pases bien este verano).
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
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 04:36:38.


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