Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
¿Cómo saber qué items seleccionados en TListBox?

Hola a todos.
Estoy intentando detectar todos items seleccionados en un FMX.TListBox para android. (En el caso de que sea posible).
Estoy intentando con esto:
Código Delphi [-]
for i  := 0 to ListBox1.Items.Count-1 do
if ListBox1.Selected[i]=True then  ShowMessage(ListBox1.Selected.Text);
Pero no me compila en FMX.
Agradecería si alguien tiene una solución, o si me confirma que no es posible, para no seguir intentándolo.
Saludos.
Responder Con Cita
  #2  
Antiguo 28-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Por que no compila? Cual es el error?
Responder Con Cita
  #3  
Antiguo 28-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola, Agustin.

El mensaje exacto es "Class does not have a default property" y pone el cursor sobre los corchetes cuadrados de la [i] itinerante en
Código Delphi [-]
ListBox1.Selected[i]=True
He intentado hacerlo con paréntesis así
Código Delphi [-]
ListBox1.Selected(i)=True
y se para en el paréntesis con el mensaje: "Missing operator or semicolon".

Cuando NO cambio la propiedad MultySelectStyle del TListBox a None y quito la itinerancia, es decir con el código de la siguiente manera:

Código Delphi [-]
{for i  := 0 to ListBox1.Items.Count-1 do
if ListBox1.Selected[i]=True then } ShowMessage(ListBox1.Selected.Text);
me responde el mensaje con el último seleccionado. Con el último en el orden de selección, aunque haya más de uno seleccionado, independientemente de su indice en el TlistBox.

Todavía hay algo más "curioso". Antes de entrar en la lista, y para rehacerla, tenia este código:
Código Delphi [-]
ListBox1.Visible:=True;
ListBox1.ItemIndex := -1; // Si no seleciona ningún item lo sabremos por esto

for I := 0  to ListBox1.Items.Count-1 do
 ListBox1.Items.Delete(I);

ListBox1.Items.Add('uno');
ListBox1.Items.Add('Otro');
ListBox1.Items.Add('y otro');

Pues bien, al salir de la lista y volver a editarla, NO BORRA TODOS LOS ITEMS ANTERIORES.
A lo mejor borra uno o dos, y añade otra vez los tres items. (Aunque ha realizado la rutina completa)

Utilizando la propiedad ListBox1.Clear, ya no sucede esto. ¿¡Cosas.....!? Bueno, esto es una anécdota, no me preocupa, porque ListBox1.Clear funciona bien.
Responder Con Cita
  #4  
Antiguo 28-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cuando se eliminan los items items de una lista, se hace desde atras para adelante (primero se borra el ultimo, luego se borra el anteultimo, y asi)

Imaginate que borras el primero (indice 0). Ahora la lista tiene que mover los elementos para que el que tenia indice 1, ahora tenga indice 0. Es por eso que tu bucle for no elimina todos los elementos

Te dejo este código de prueba para que experimentes:

Código Delphi [-]
procedure TForm1.btnLimpiarBienClick(Sender: TObject);
var
  I: Integer;
begin
  for I := ListBox1.Items.Count - 1 downto 0 do
    ListBox1.Items.Delete(I);
end;

procedure TForm1.btnLimpiarMalClick(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Items.Delete(I);
end;

procedure TForm1.btnCopiarSeleccionadosClick(Sender: TObject);
var
  I: Integer;
begin
  Memo1.ClearContent;
  for I := 0 to ListBox1.Items.Count - 1 do
  begin
    if ListBox1.ListItems[i].IsSelected then
      Memo1.Lines.Add(ListBox1.Items[i]);
  end;
end;

procedure TForm1.btnCrearItemsClick(Sender: TObject);
begin
  CreateItems;
end;

procedure TForm1.CreateItems;
begin
  ListBox1.Items.Add('uno');
  ListBox1.Items.Add('Otro');
  ListBox1.Items.Add('y otro');
  ListBox1.ItemIndex := -1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.MultiSelectStyle := TMultiSelectStyle.Default;
  CreateItems;
end;

Aun asi, me sigue pareciendo mejor que se use el metodo Clear del ListBox que usando el bucle for
Responder Con Cita
  #5  
Antiguo 28-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Gracias por todo Agustín (MAESTRO).

¡¡¡CUANTO ME QUEDA POR APRENDER...!!!

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
¿como obtener dos items seleccionados en un checklistbox? danielmj Varios 3 10-11-2014 23:23:17
Exportar items de un TListBox del siguiente modo? THACKER Varios 12 16-12-2009 10:37:20
Tlistbox distinto color de items mjjj Varios 1 21-07-2008 21:16:19
Como tratar multiples seleccionados en DBGrid vivamotos C++ Builder 1 14-09-2006 19:26:40
Saber elementos seleccionados de listbox con multiselect activado chux OOP 3 17-10-2005 23:42:58


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


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