Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Detectar item seleccionados en ListView (https://www.clubdelphi.com/foros/showthread.php?t=92618)

Ricardo2010 11-12-2017 22:42:03

Detectar item seleccionados en ListView
 
Buenas, tengo el inconveniente con la ListView que no he podido encontrar la forma de detectar cuando un item esta seleccionado. Lo que digo que tengo una ListView con la propiedad en AccessoryType en Checkmark, esto para que me muestre un check en cada item, pues bien se muestra correctamente y cuando le dan un clic lo marco o desmarco el item.
El problema es cuando una vez que trato de grabar debo recorrer la listview completa verificando los items que se encuentran marcados y los que no para ello he tratado distintas formas de realizarlo pero al momento de probar en el movil me da error
Lo que he realizado es

for I := 0 to ListView1.ItemCount-1 do
begin
// ShowMessage('valor '+ListView1.Items.Item[i].Text);

if ListView1.Items.Item[i].Objects.AccessoryObject.Visible then
begin
// valor:=I;
// showmessage (ListView1.Items.Item[i].Text ); cualquier acción que efectúe aquí me da error en la ejecución
end;
if ListView1.Items[i].Objects.AccessoryObject.Visible then
begin

// ShowMessage('valor '+ListView1.Items.Item[i].SubItems.Strings[1]);cualquier acción que efectúe aquí me da error en la ejecución
// showmessage (ListView1.Items.Item[ListView1.ItemIndex].Detail);
end;
end;

La pregunta es como puedo ver a que item le colocaron el true el check o en false recorriendo completa la listview

Gracias

Casimiro Notevi 11-12-2017 23:12:36

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Neftali [Germán.Estévez] 12-12-2017 10:06:57

PuedeS pRobar a acceder con la propiedad CheckedIndexes de los Items.
Algo así:

Código Delphi [-]
procedure TForm2.ListView1Click(Sender: TObject);
var
  str:String;
  lItems:TArray;
  i:integer;
begin
  lItems := ListView1.Items.CheckedIndexes();
  Str := '';
  for I := 0 to Length(lItems) - 1 do begin
    Str := Str + '  ' + IntToStr(lItems[i]);
  end;
  Caption := Str;

  ListBox1.Clear;
  for I := 0 to Length(lItems) - 1 do begin
    ListBox1.Items.Add(ListView1.Items.Item[lItems[i]].Text);
  end;
end;


juank1971 12-12-2017 16:58:24

Otra Manera con FindDrawable
 
Saludos si a mí me paso lo mismo, es un hueco en los tutoriales y los videos que he visto casi todos solamente muestran la forma de crear los TlistView y TListBox pero en casi ninguno está la forma de acceder a la información mostrada, yo me pase casi una semana buscando en todas partes incluso la misma ayuda del Delphi y realmente pase trabajo para encontrar eso.

La forma que también me gusto que vi de Daniele Teti, para acceder a los resultados de los ítems en el TlistView por el nombre fue esta:



Código Delphi [-]
procedure TForm1.ListView1ItemClick(const Sender: TObject;
    const AItem: TListViewItem);
    var Test:string;
  begin
    Test := AItem.Objects.FindDrawable('ItemDePrueba').Data.asstring;
    ShowMessage(Test);
  end;
ItemDePrueba es un item que agrege al Tlistview
también creo que se puede asignar valores a esa propiedad data, no es solo para leer

Ricardo2010 12-12-2017 22:45:25

primero gracias por responder.

Neftali, tengo problemas con la definición del TArray ya que esta no la encuentra , como la agrego esta en algún clase para poner en Uses o la tengo que definir en Type

Gracias

Neftali [Germán.Estévez] 12-12-2017 23:09:36

Cita:

Empezado por Ricardo2010 (Mensaje 523357)

Neftali, tengo problemas con la definición del TArray ya que esta no la encuentra , como la agrego esta en algún clase para poner en Uses o la tengo que definir en Type


http://docwiki.embarcadero.com/Libra.../System.TArray
http://docwiki.embarcadero.com/Libra...ections.TArray

System.Generics.Collections

Ricardo2010 12-12-2017 23:54:20

Cita:

Empezado por Neftali (Mensaje 523359)

Neftali gracias, si la habia agregado pero como me da error de compilación creía que podría ser otra system , el error que me da es

Código Delphi [-]
[DCC Error] FormCheckList.pas(519): E2010 Incompatible types: 'TArray' and 'System.TArray'

Neftali [Germán.Estévez] 13-12-2017 11:29:52

A veces cuando hay conflictos de este tipo, puedes hacer la definiciñon añadiendo delante el nombre de la unit, segun convenga:

Código Delphi [-]
  lItems:System.TArray;  lItems:System.Generics.Collections.TArray;

De todas formas, me acabo de dar cuenta de que el "parser" del editor nos ha jugado una mala pasada. La definición del array está mal, ya que el parser ha eliminado lo que estaba entre los signos de mayor y menor.
De ahí los problemas.

Compara esta imagen, con el código que puse más arriba:


Ricardo2010 13-12-2017 15:50:13

Cita:

Empezado por Neftali (Mensaje 523372)
A veces cuando hay comflictos de este tipo, puedes hacer la definiciñon añadiendo delante el nombre de la unit, segun convenga:

Código Delphi [-]
  lItems:System.TArray;  lItems:System.Generics.Collections.TArray;

De todas formas me acao de dar cuenta de que el "parser" del editor nos ha jugado una mala pasada. La definición del array está mal, ya que el parser ha eliminado lo que estaba entre los signos de mayor y menor.
De ahí los problemas.

Compara esta imagen, con el código que puse más arriba:



Gracias Neftali


La franja horaria es GMT +2. Ahora son las 16:32:39.

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