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.

Layout do Formulário de Cliente
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 ;)