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.
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 ;)
- Curso: O que é Delphi?:
Este curso tem como objetivo apresentar uma tecnologia que está sempre se renovando para acompanhar as necessidades e tendências do mercado de desenvolvimento de software: o Delphi. - Curso: Criando minha primeira aplicação em Delphi:
Neste curso você aprenderá os primeiros passos para criar uma aplicação em Delphi.