Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   posicion del cursor dentro de un listview (https://www.clubdelphi.com/foros/showthread.php?t=50387)

Avellas 15-11-2007 23:13:10

posicion del cursor dentro de un listview
 
Amigos. Continuando con mi aplicativo ahora tengo un problema con el listview

Estoy cargando los datos de una tabla en este componente, ahora necesito saber la posicion del registro dentro del listview..


Alguien me puede ayudar por favor??


Gracias

cHackAll 16-11-2007 01:24:48

usa la propiedad Objects del TStrings

ListView1.Items.Objects[1] := Pointer(12);

Avellas 16-11-2007 01:56:30

Gracias por la colaboracion, resulta que uso el codigo que me enviaste no existe la propiedad objects, por tanto no compila el programa. Uso delphi 6

jhonny 16-11-2007 16:33:41

No entiendo, en el titulo quieres saber la posición del cursor, pero al leer la descripción del problema veo cuando dices que quieres saber la posición del registro ¿Que es realmente lo que quieres y a que te refieres cuando dices que quieres saber la posición del registro?

Avellas 16-11-2007 16:59:06

Me refiero basicamente a la fila donde se encuentra ubicado el registro dentro del listview.

Gabo 16-11-2007 17:08:44

Para eso está Selected que te indica el primer item seleccionado de un ListView.

Ejemplos:

Código:


if (ListView1->Selected)
 
...=ListView1->Selected->Caption;
 
...=ListView1->Selected->SubItems[0][0]);


Gabo 16-11-2007 17:16:55

Me corrijo a mi mismo ya que por lo que se ve no entendí bien la pregunta.

Hay varias maners de hacer lo que dices, pero creo que deberías explicar mejor que es lo que quieres hacer, ya que como te digo hay varias formas y quizás nos estemos enredando un poco.

¿Cómo obtienes los datos para el ListView? ¿Están en un Dataset? ¿Lo recorriste uno a uno y así lo cargaste en el ListView o de otra forma? Se me ocurren varias preguntas ahora mismo pero creo que si explicas un poco más te daremos una mejor respuesta.

Siempre podrás recorrer el ListView hasta encontrar lo que buscas:

Código:

for (int i=0; i < ListView->Items->Count; i++)
{

    if(ListView->Items->Item[i]->SubItems [0][0]==...;
    {
      ...
    }
}


jhonny 16-11-2007 17:25:39

Yo entiendo lo mismo que entendio Gabo... aunque con el ejemplo que Gabo a mostrado se puede obtener mas información, la posición tambien se puede encontrar asi:

Código Delphi [-]
  ListView1.ItemIndex;

Avellas 16-11-2007 17:47:59

Gracias GABO, pero tengo una duda ese codigo es delphi?? y en que evento deveria manajarlo..??

jhonny 16-11-2007 17:51:48

Cita:

Empezado por Avellas (Mensaje 246643)
Gracias GABO, pero tengo una duda ese codigo es delphi?? y en que evento deveria manajarlo..??

Aunque te refieres a Gabo te respondere yo (Espero que no hayan problemas por esto :D)...

1) Si, es codigo delphi.

2) Colocalo en el evento que lo necesites, por ejemplo, si es un boton lo puedes colocar en el OnClik, quizá en el onChange del Listview o donde mas te sirva.

Avellas 16-11-2007 17:52:35

A ver si me explico mejor, los datos del listview los tomo de un query, quiero que en el momento de presionar el check en un registro el foco quede sobre ese registro para ir realizando una sumatoria, por lo tanto no me sirve hacer un for para buscar los que estan checkeados ya que debo realizar el proceso a medida que se van checkeando..

jhonny 16-11-2007 17:56:15

Jejeje, perdon antes de responderte lo siguiente quiero aclarar que No es Codigo Delphi, no se porque te dije que si, eso es codigo C++, pero para que convertirlo a Delphi solo debes cambiar los "->" por puntos.

jhonny 16-11-2007 17:59:24

Cita:

Empezado por Avellas (Mensaje 246645)
A ver si me explico mejor, los datos del listview los tomo de un query, quiero que en el momento de presionar el check en un registro el foco quede sobre ese registro para ir realizando una sumatoria, por lo tanto no me sirve hacer un for para buscar los que estan checkeados ya que debo realizar el proceso a medida que se van checkeando..

Un For no te quitara el foco, de todas formas creo que sería conveniente que explicaras mas detalladamente el asunto.

jhonny 16-11-2007 18:01:19

Ahh, ya, debiste comenzar por aqui http://www.clubdelphi.com/foros/showthread.php?t=50377, el for que te mostre en ese ejemplo no debe quitarle el foco al Check que seleccionaste.

Avellas 16-11-2007 18:27:53

He probado el codigo pero no funciona, le recomiendo a todos los que me puedan ayudar, estoy a punto de enloquecer con este reto..

Gabo 19-11-2007 12:07:15

Cita:

Empezado por Avellas (Mensaje 246643)
Gracias GABO, pero tengo una duda ese codigo es delphi?? y en que evento deveria manajarlo..??

Cita:

Empezado por jhonny (Mensaje 246644)
Aunque te refieres a Gabo te respondere yo (Espero que no hayan problemas por esto :D)...

1) Si, es codigo delphi.

Cita:

Empezado por jhonny (Mensaje 246646)
Jejeje, perdon antes de responderte lo siguiente quiero aclarar que No es Codigo Delphi, no se porque te dije que si, eso es codigo C++, pero para que convertirlo a Delphi solo debes cambiar los "->" por puntos.

Si, bueno, creo que debí poner que era C++. :D :D Lo pensé en un principio pero imaginé que no tendrías problema en pasarlo a Delphi. ;)

Cita:

Empezado por jhonny (Mensaje 246647)
Un For no te quitara el foco, de todas formas creo que sería conveniente que explicaras mas detalladamente el asunto.

Cita:

Empezado por Avellas (Mensaje 246657)
He probado el codigo pero no funciona, le recomiendo a todos los que me puedan ayudar, estoy a punto de enloquecer con este reto..

Lo siento Avellas, pero yo estoy perdido, no entiendo lo que quieres... :confused:

Lepe 19-11-2007 16:16:10

El lío que tienes es mantener la relación entre el ListView y los registros de la BBDD. Para ello en el propio ListView puedes guardar la clave primaria de la BBDD.

Al rellenar el ListView con los registros del Query, tendrás un bucle, pues dentro de ese bucle añadirías :
Código Delphi [-]
var v :TlistItem;
begin 
  while not tabla1.eof do
  begin 
     v := listView1.Items.Add;
     v.Caption := lo quesea;

     v.SubItems[0].Objects[0] := Pointer(tabla1ClavePrimaria.AsInteger);

end;

Listview1.Items es de tipo TListItems, y cada uno de ellos es un TListItem. El TListItem tiene la propiedad SubItems, y ésta última si es de tipo TStrings, y por tanto, tiene su propiedad Objects donde guardar la clave primaria.

Yo la verdad, echo de menos el evento "onItemCheck", el ListView debería tenerlo :(

Saludos


La franja horaria es GMT +2. Ahora son las 02:21:42.

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