Lista de Objetos em Delphi

Veja neste artigo como podemos criar uma lista de objetos para armazenar as informações de vários objetos criados de uma determinada classe.

Olá pessoal, venho neste artigo mostrar um pouco mais sobre o nosso Delphi. Desta vez veremos como fazer uma lista de objetos usando o TList e uma classe criada. No nosso exemplo vamos criar inicialmente a classe TCliente. Para isso, vamos precisar de uma nova unit: salve-a com o nome de Cliente.pas. Em seguida criaremos apenas os métodos básicos de uma lista, como Count, Add e Remove. Vemos a sua implementação no código da Listagem 1.

Criando listas de objetos em Delphi

Listagem 1. Código da unit Cliente ao ser criada

unit Cliente; interface implementation end.

Agora vamos preparar a nossa classe. Observe que declarei a classe TCliente herdando de ? TObject.

Logo em seguida declarei as propriedades da classe: IDCliente, Nome e CNPJ, como mostra a Listagem 2. Neste momento pressionamos as teclas “CTRL+SHIF+C” para que o Delphi possa preparar os métodos gets e sets.

Listagem 2. Declaração das propertys da classe TCliente

unit Cliente; interface Type TCliente = class private { private declarations } protected { protected declarations } public { public declarations } property IDCliente: Integer; property Nome: String; property CNPJ: String; published { published declarations } end; implementation end.

Como o objetivo do artigo não é mostrar a validação nos métodos, vou remover o “LIXO” gerado pelo Delphi, então nosso código ficará como o apresentado na Listagem 3.

Listagem 3. Implementando e Excluindo código desnecessário

unit Cliente; interface Type TCliente = class private FCNPJ: String; FIDCliente: Integer; FNome: String; { private declarations } protected { protected declarations } public { public declarations } property IDCliente: Integer read FIDCliente write FIDCliente; property Nome : String read FNome write FNome; property CNPJ : String read FCNPJ write FCNPJ; published { published declarations } end; implementation end.

Até aqui concluímos a criação da classe TCliente e de seus atributos.

Vamos ver agora a criação da nossa lista de Clientes, e para isso vamos criar outra unit e salvá-la como ListaCliente.pas, como mostra a Listagem 4.

Listagem 4. Código da unit ListaCliente ao ser criada

unit ListaCliente; interface implementation end.

Com a nossa unit criada agora vamos poder declarar nossa classe e seus métodos. É muito importante lembrar de sempre declarar USES quando formos utilizar objetos/classes que estão em outras Units, como vemos na Listagem 5.

Listagem 5. Declarando Classe e Métodos

unit ListaCliente; interface uses Classes, Cliente, Dialogs; {Observe que aqui fizemos referencias as duas classes necessárias para fazer o Exemplo } Type TListaCliente = class private { private declarations } FListaClientes : TList; protected { protected declarations } public { public declarations } constructor Create; procedure Adicionar(pCliente: TCliente); procedure Remover(Index: Integer); function Count: Integer; published { published declarations } end; implementation end.

Agora que já declaramos tudo, mas falta implementar método a método, certo? Então vamos começar pelo mais fácil: o nosso construtor, como mostram as Listagens 6 a 9.

Listagem 6. Implementando método Create

constructor TListaCliente.Create; begin inherited Create; FListaClientes := TList.Create; end;

Listagem 7. Implementando método Count

function TListaCliente.Count: Integer; begin Result := FListaClientes.Count; end;

Listagem 8. Implementando método Adicionar

procedure TListaCliente.Adicionar(pCliente: TCliente); begin FListaClientes.Add(pCliente); end;

Listagem 9. Implementando método Remover

procedure TListaCliente.Remover(Index: Integer); begin if Index < Count then FListaClientes.Delete(Index) else ShowMessage("Item não encontrado!"); end;

Com isso nós já temos a lista pronta para ser utilizada. Agora vamos construir um pequeno exemplo e colocar o que foi visto no artigo em prática.

Não vamos perder tempo com Tela, por isso crie um formulário na nossa aplicação ou então aproveite o que o Delphi já cria automaticamente. Mude seu nome para FrmCliente e salve o mesmo como uFrmCliente.pas. Monte uma tela com a seguinte interface da Figura 1. Veja que o nome dos componentes estão visíveis.

Figura 1. Layout do Formulário de Cliente.

O primeiro passo depois do layout pronto é incluir no FrmCliente as uses em Cliente e ListaCliente, como mostra a Listagem 10.

Listagem 10. Uses nas classes criadas

unit uFrmCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Cliente, ListaCliente;

Na Listagem 11 declaramos uma variável do tipo TListaCliente para poder guardar os clientes cadastrados na nossa lista.

Listagem 11. Criando variável para armazenar os Objetos

type TFrmCliente = class(TForm) BtnAdicionar: TButton; BtnRemover: TButton; BtnContar: TButton; EdtIDCliente: TLabeledEdit; EdtNome: TLabeledEdit; EdtCNPJ: TLabeledEdit; private { Private declarations } tempListaCliente : TListaCliente; // Variável para armazenar a Lista public { Public declarations } end;

Logo em seguida precisamos instanciar nossa lista e, para isso, vou usar o próprio evento onCreate do formulário para facilitar a implementação, como mostra a Listagem 12.

Listagem 12. Instanciado a Lista de Clientes

procedure TFrmCliente.FormCreate(Sender: TObject); begin tempListaCliente := TListaCliente.Create; end;

Neste momento já estamos aptos a manusear a nossa lista, incluindo, removendo e até contando. Porém, não temos itens dentro da lista, então vamos começar pelo Adicionar, como mostra a Listagem 13.

Listagem 13. Evento onClick do BtnAdicionar.

procedure TFrmCliente.BtnAdicionarClick(Sender: TObject); Var tempCliente : TCliente; begin tempCliente := TCliente.Create; with tempCliente do begin IDCliente := StrToInt(EdtIDCliente.Text); {Usamos StrToInt para poder converter o conteúdo de String para Inteiro} Nome := EdtNome.Text; CNPJ := EdtCNPJ.Text; end; tempListaCliente.Adicionar(tempCliente); end;

Agora vamos utilizar o botão para remover. Note que estou usando um InputQuery apenas para selecionar o Item a ser removido, como mostra a Listagem 14.

Listagem 14. Evento onClick do BtnRemover.

procedure TFrmCliente.BtnRemoverClick(Sender: TObject); Var tempID: String; begin if InputQuery("Remover Cliente","Digite o item a ser removido",tempID) then begin tempListaCliente.Remover(StrToInt(tempID)); end; end;

E por último, mas não menos importante, tem o Count, que contará quantos itens temos na nossa lista, como mostra a Listagem 15.

Listagem 15. Evento onClick do BtnContar.

procedure TFrmCliente.BtnContarClick(Sender: TObject); begin ShowMessage("Total de Registro da Lista: " + IntToStr(tempListaCliente.Count)); end;

Concluindo nosso artigo, este exemplo mostrou de forma básica como podemos trabalhar com uma lista de objetos dentro do Delphi, funcionando em qualquer uma das versões do Delphi.

Links Úteis

  • Guia de Referência Delphi:
    Neste Guia de Referência você encontrará o conteúdo que precisa para iniciar seus estudos em Delphi, uma plataforma para desenvolvimento de aplicativos completa, principalmente para soluções desktop e mobile.

Saiba mais sobre Delphi ;)

Artigos relacionados