O componente CheckListBox
Conheça o componente CheckListBox neste artigo de Everson Volaco.
Artigos Delphi 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.
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);
clbItems.Clear; //Limpa a lista de items do clbItems
with cdsCustomer do
Open; //Abre o cdsCustomer
clbItems.Items.Add(FieldByName('Company').AsString); //Adiciona o valor do campo Company
Close; //Fecha o cdsCustomer
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;
Dialogs, StdCtrls, CheckLst, DB, DBClient;
TTexto = class
vValor : String;
constructor Create(const pValor : String);
property Valor : String read vValor write vValor;
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);
vValor := pValor;
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:
strAux : TTexto; //Variável do tipo TTexto
clbItems.Clear;
strAux := TTexto.Create(FieldByName('CustNo').AsString);
clbItems.Items.AddObject(FieldByName('Company').AsString, strAux);
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);
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);
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
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.