O componente CheckListBox

Manipulando dados com o componente CheckListBox

 

Neste artigo veremos como manipular dados em um CheckListBox de forma que possamos armazenar e utilizar um valor chave para cada item adicionado no componente.

O CheckListBox  é um componente nativo da VCL, isto é, está presente com a instalação do Delphi. Você pode encontrá-lo na paleta Additional da Component Palette do Delphi. No exemplo deste artigo mostraremos de forma prática o uso do CheckListBox para carregar dados armazenados em um arquivo xml, utilizando um de seus “nós” como campo chave para cada valor carregado no CheckListBox. Para o exemplo deste artigo foi utilizado o Delphi 7 com o arquivo customer.xml, disponível junto com a instalação do Delphi.

 

Nota. O exemplo mostrado neste artigo pode ser facilmente adaptado para manipular dados armazenados em um banco de dados. 

Exemplo de uso

Vamos criar um aplicação Delphi para mostrar as informações armazenadas em um arquivo xml utilizando o componente CheckListBox. O objeto deste exemplo é capturar o valor do campo chave de cada item selecionado no CheckListBox adicionando a um componente ListBox. Inicie uma nova aplicação Delphi (File/New/Application). Altere o nome do Form1 para FrmPrincipal e salve a unit como untFrmPrincipal. Para o arquivo de projeto de o nome de checklistbox.dpr. Adicione um componente CheckListBox (paleta Additional), dois componentes Button, dois componentes Label, e um componente ListBox (todos da paleta Standard) ao form FrmPrincipal e configure-os de acordo com a figura 1.

 

Figura 1 . Ajustando os componentes visuais do form FrmPrincipal

No componente clbItems adicionaremos as informações do arquivo xml, enquanto que no lbSelecionados mostraremos os valores chaves dos items selecionados no clbItems.

- Adicione um componente ClientDataSet (paleta Data Access) ao form e altere sua propriedade Name para cdsCustomer.

- Aponte a propriedade FileName do componente ClientDataSet para o arquivo customer.xml.

 

Obs. Por padrão o arquivo customer.xml está localizado no diretório “C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data\”. 

 

No evento OnClick do botão btnCarregar digite o seguinte código:

 

procedure TFrmPrincipal.btnCarregarClick(Sender: TObject);

begin

   clbItems.Clear; //Limpa a lista de items do clbItems

   with cdsCustomer do

   begin

       Open; //Abre o cdsCustomer

       First;

       While not Eof do

       begin

         clbItems.Items.Add(FieldByName('Company').AsString); //Adiciona o valor do campo          Company

         Next;

       end;

       Close; //Fecha o cdsCustomer

    end;

end;

 

Rode a aplicação Delphi e clique sobre o botão btnCarregar. Selecione algumas opções no CheckListBoxclbItems (Veja a figura 2).

 

Figura 2 . Selecionando items no CheckListBox

Após selecionarmos os items que queremos na lista, como faremos para capturar o valor de um campo chave, como por exemplo, o campo CustNo de cada item selecionado? A resposta para está pergunta é bastante simples, pois basta criarmos uma classe para utilizarmos como apoio para armazenar os valores do campo chave e do campo que será mostrado no CheckListBox. Antes da declaração da classe TFrmPrincipal na unituntFrmPrincipal entre com o código em negrito abaixo:

 

unit untFrmPrincipal;

 

interface

 

uses

   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

   Dialogs, StdCtrls, CheckLst, DB, DBClient;

type

   TTexto = class

      private

         vValor : String;

      public

         constructor Create(const pValor : String);

         property Valor : String read vValor write vValor;

   end;

type

  TFrmPrincipal = class(TForm)

  ...

  ...

 

No código acima nós declaramos uma classe de nome TTexto, que utilizaremos para armazenar o conteúdo do campo chave, e a partir da propriedade Valor poderemos capturar este conteúdo posteriormente. Para o método Create da classe TTexto entre com o seguinte código:

 

constructor TTexto.Create(const pValor: String);

begin

  inherited Create;

  vValor := pValor;

end;

 

Aproveitaremos o método Create da classe para passar o valor do campo chave que será armazenado na variável vValor. Altere o evento OnClick do botão btnCarregar para:

 

procedure TFrmPrincipal.btnCarregarClick(Sender: TObject);

var

  strAux : TTexto; //Variável do tipo TTexto

begin

  clbItems.Clear;

  with cdsCustomer do

begin

     Open; //Abre o cdsCustomer

     First;

     While not Eof do

     begin

        strAux := TTexto.Create(FieldByName('CustNo').AsString);

        clbItems.Items.AddObject(FieldByName('Company').AsString, strAux);

     Next;

     end;

     Close;

     end;

     end;

 

Adicionando o código acima, utilizamos uma variável do tipo TTexto para armazenar o valor do campo CustNo do registro corrente. Usando o método AddObject da propriedade Items do CheckListBox conseguimos adicionar ao componente clbItems o objeto strAux (TTexto) vinculado ao valor do campo Company. O próximo passo é implementarmos o botão btnMostrar para que possamos trazer o código dos items selecionados no clbItems e adicioná-los ao ListBoxlbSelecionados. Para o evento OnClick do botão btnMostrar digite o seguinte código:

 

procedure TFrmPrincipal.btnMostrarClick(Sender: TObject);

var

  i : Integer;

begin

     lbSelecionados.Clear; //Limpa a lista de items do clSelecionados

     for i := 0 to clbItems.Items.Count - 1 do

        if clbItems.Checked[i] then //Se o item corrente estiver selecionado

          lbSelecionados.Items.Add(TTexto(clbItems.Items.Objects[i]).Valor);

end;

 

No código adicionado no botão btnMostrar percorremos todos os items do CheckListBox utilizando o método Checked para verificar se o item está selecionado, ou não. Caso o item esteja selecionado, adicionamos o valor do campo CustNo referente ao item em questão no componente lbSelecionados.

 

Nota. Utilizamos o método Objects da propriedade Items do clbItems em conjunto com a propriedade Valor da classe TTexto para recuperar o valor do campo chave (CustNo). 

 

Rode a aplicação Delphi novamente. Clique sobre o botão btnCarregar para trazer os dados armazenados no arquivo customer.xml. Selecione alguns items da lista e clique no botão btnMostrar para adicionar no componente lbSelecionados o valor chave de cada item selecionado. Veja a aplicação em execução na figura 3.

 

Figura 3 . Capturando o valor chave dos items selecionados no CheckListBox

Conclusões

Vimos neste artigo que o uso do componente CheckListBox pode ser bastante útil em nossas aplicações, pois podemos utilizá-lo para mostrar ao usuário final os valores descritivos, enquanto trabalhamos com os valores chaves internamente na aplicação.