Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sobre ListView (https://www.clubdelphi.com/foros/showthread.php?t=12484)

altp 17-07-2004 12:10:18

Sobre ListView
 
Hola a todos.

Tengo un pequeño problema. Tengo un Listview con 2 items.
Para localizar algo en el primer item pongo ListView.FindCaption(...), pero el problema viene cuando quiero localizarlo en el segundo item.

Me podrían ayudar?

Gracias

Lepe 17-07-2004 13:19:50

No sé si lo he comprendido bien.

Si quieres localizar un dato que está en la segunda columna de un ListView, puedes usar un bucle así:

Código Delphi [-]
for i:= 0 to listView.items.count -1 do
begin
  if listview.items[i].Subitems[0] = 'pepe' then
     break;
end;

if i< Listview.items.count then ShowMessage(' Encontrado en el item '+inttostr(i));

No sé si hay una forma mejor, pero esta es la que he encontrado mirando rapidamente las propiedades y metodos.

Saludos

altp 19-07-2004 12:54:39

Gracias Lepe por responder.

Yo lo que quiero es algo al FindCaption, e probado con FindData pero no soy capaz de hacerlo funcionar.

Tu idea ya la he probado, pero no kiero hacer un bucle para localizar el dato.

Creo que la solución puede estar en FindData pero ahí me kedo.

Saludos.

Lepe 20-07-2004 11:45:27

El método FindData sirve para buscar información asociada a cada elemento, pero no de Subitems, me explico, si quieres, puedes asociar un objeto (o registro) a cada elemento del ListView, para localizar esos datos. FinData solo tiene sentido si has añadido los elemntos de esta forma:
Código Delphi [-]
type TInfo = record       // Tipo Informacion
        HoraInicio,HoraFin : TDateTime; //podrías guardar cualquier cosa que se te antoje ;)
end;
    TpTInfo = ^TInfo; // Tipo Puntero al tipo Informacion

procedure TForm1.Button1Click(Sender: TObject);
var H :TpTInfo;
begin
  with ListView1.items.Add do
  begin
     Caption := 'PC3';
     SubItems.Add('Ocupado');
     SubItems.Add('');
     SubItems.Add('');
     SubItems.Add('');

    // ojo no hay control de errores de memoria....new podría dar una excepcion
     New(H);
     H^.HoraInicio := Now;
     H^.HoraFin:=IncMinute(h^.HoraInicio, 30);
     Data:= H; // al elemento añadido, le asociamos el registro.
  end;
end;
Y no creo que sea lo que necesitas.

Ten en cuenta que cada elemento del ListView tiene asociado un Tstring que son todas las columnas restantes del Listview, por tanto, no queda más remedio que acceder a cada elemento para despues mirar su propiedad Subitems.

Por otra parte a FindData tienes que pasarle el puntero que previamente has guardado en la propiedad Data, (en el ejemplo que he puesto, H) .

Solucion al tema: Buuuuuuucle sin alcohol ;)

Saludos, espero que te aclare algo más

altp 20-07-2004 12:20:30

Gracias Lepe, me has explicado FindData de una manera excepcional.

Si no queda más remedio lo tendré que hacer con un bucle.

Me ha gustado mucho buuuuuuucle sin alcohol.

Saludos


La franja horaria es GMT +2. Ahora son las 02:52:26.

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