Contar o Número de Itens Selecionados no ListView

17/10/2019

0

Olá,

Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.

Estou utilizando o seguinte código no evento OnSelectItem do ListView.

O código funciona, porém o programa fica muito lento com o uso desse código.

//Loop para mostrar quantos itens estao selecionados
for i := 0 to ListView.Items.Count-1 do
    begin
    if ListView.Items[i].Selected = True then
    ItensSel := ItensSel+1;
    end;

//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';

//Após mostrar no StatusBar redefine a variavel ItensSel para 0
ItensSel := 0;


E no evento OnCreate do Form:
ItensSel := 0;


No ListView estou utilizando a opção MultiSelect := True;
Lucas Bernieri

Lucas Bernieri

Responder

Post mais votado

18/10/2019

da forma que está, a cada clique, o programa irá varrer todos os itens e recontar tudo. sugiro uma alteração de drástica, porém performática:
crie a variável e a inicialize da forma que você fez, no OnCrete do form.

no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo

type
  TForm2 = class(TForm)
    ListView1: TListView;
    StatusBar1: TStatusBar;
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FItensSelecinados: integer;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  FItensSelecinados := 0;
end;

procedure TForm2.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if Selected then
    Inc(FItensSelecinados)
  else
    Dec(FItensSelecinados);
  StatusBar1.Panels[1].Text := IntToStr(FItensSelecinados) + ' Selecionado(s)';
end;

end.

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

18/10/2019

Luiz Vichiatto

Olá Lucas
Acho que é melhor você colocar no evento OnClick do ListView
Por ficar demorado, vai depender da quantidade de itens que tem a lista

ItensSel := 0; //Mude para cá a inicialização
for i := 0 to ListView.Items.Count-1 do
    if ListView.Items[i].Selected = True then
            ItensSel := ItensSel+1;
 
//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';
 


**************************************
Olá,

Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.

Estou utilizando o seguinte código no evento OnSelectItem do ListView.

O código funciona, porém o programa fica muito lento com o uso desse código.

//Loop para mostrar quantos itens estao selecionados
for i := 0 to ListView.Items.Count-1 do
    begin
    if ListView.Items[i].Selected = True then
    ItensSel := ItensSel+1;
    end;

//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';

//Após mostrar no StatusBar redefine a variavel ItensSel para 0
ItensSel := 0;


E no evento OnCreate do Form:
ItensSel := 0;


No ListView estou utilizando a opção MultiSelect := True;
Responder

18/10/2019

Lucas Bernieri

da forma que está, a cada clique, o programa irá varrer todos os itens e recontar tudo. sugiro uma alteração de drástica, porém performática:
crie a variável e a inicialize da forma que você fez, no OnCrete do form.

no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo

type
  TForm2 = class(TForm)
    ListView1: TListView;
    StatusBar1: TStatusBar;
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FItensSelecinados: integer;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  FItensSelecinados := 0;
end;

procedure TForm2.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if Selected then
    Inc(FItensSelecinados)
  else
    Dec(FItensSelecinados);
  StatusBar1.Panels[1].Text := IntToStr(FItensSelecinados) + ' Selecionado(s)';
end;

end.


Funcionou certinho aqui, muito obrigado.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar