Escolar Documentos
Profissional Documentos
Cultura Documentos
DEVMEDIA Login
Documentação
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 1/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA Login
Neste exemplo utilizamos a classe TObjectList para lidar com uma coleção de
objetos. Essa é uma classe genérica e funciona de forma semelhante à TList,
porém ela se encarrega de liberar seus itens da memória quando é destruída. Isso
evita o vazamento de memória (memory leak) em nossas aplicações, que ocorre
Para demonstrar o uso desse tipo de coleção criamos uma estrutura orientada a
objetos na qual temos duas classes: TVenda e TVendaItem . Além disso temos um
formulário para fazer a manipulação dos objetos dentro da nossa coleção. Esses
elementos estão organizados em units, da seguinte forma:
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 2/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Classe TVenda
TObjectList :
uses
System.Generics.Collections, System.SysUtils, uVendaItem;
01 TVenda = class
02 private
03 FIDVenda: Integer;
04 FData: TDateTime;
05 FListaVendaItem: TObjectList<TVendaItem>;
06 { private declarations }
07 protected
08 { protected declarations }
09 public
10 { public declarations }
11 property IDVenda: Integer read FIDVenda write FIDVenda;
12 property Data : TDateTime read FData write FData;
13 property ListaVendaItem: TObjectList<TVendaItem> read FListaVendaItem
14 write FListaVendaItem;
15 constructor Create;
16 destructor Destroy; override;
17 procedure AdicionarVendaItem(pProduto: String);
18 published 72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 3/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Linha 17: Declaração do método responsável por adicionar um novo item a essa
venda.
Linha 3: Aqui declaramos uma variável que será responsável por controlar o
índice do item que está sendo adicionado a coleção;
Linha 5: Utilizamos o método Add da coleção, passando para ele um novo objeto
do tipo TVendaItem ;
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 4/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Linha 6: Nesta linha obtemos o índice do último item da coleção, ou seja, aquele
DEVMEDIA
que acabou de ser adicionado. Precisamos desse índice para referenciar esse
Login
01 constructor TVenda.Create;
02 begin
03 inherited;
04 FIDVenda := 0;
05 FData := EncodeDate(1900,1,1);
06 FListaVendaItem := TObjectList<TVendaItem>.Create;
07 end;
Linha 3: Nesta linha garantimos que será executada uma chamada ao método
Create da classe ancestral de TVenda , nesse caso TObject;
nossa venda;
01 destructor TVenda.Destroy;
02 begin
03 FreeAndNil(FListaVendaItem);
04 inherited; 72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 5/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
05 end;
DEVMEDIA Login
Linha 4: Aqui garantimos que será executada uma chamada ao Destroy da classe
Classe TVendaItem
01 TVendaItem = class
02 private
03 FIDVendaItem: Integer;
04 FIDVenda: Integer;
05 FProduto: String;
06 { private declarations }
07 protected
08 { protected declarations }
09 public
10 { public declarations }
11 property IDVendaItem: Integer read FIDVendaItem write FIDVendaItem;
12 property IDVenda: Integer read FIDVenda write FIDVenda;
13 property Produto: string read FProduto write FProduto;
14 published
15 { published declarations }
16 end;
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 6/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Form TFrmListaObjetos
DEVMEDIA Login
Neste formulário, cuja interface pode ser vista na Figura 1, usamos as classes
de nidas anteriormente para simular a criação de uma venda, a adição de itens e
sua posterior listagem em um controle do tipo TMemo:
Na seção private desse form declaramos uma variável do tipo TVenda, da seguinte
forma:
private
Venda: TVenda;
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 7/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Venda := TVenda.Create;
end;
A partir daí já podemos preencher essa venda e inserir itens. Para isso utilizamos
o evento OnClick do botão “Cadastrar Venda”:
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 8/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Sugestão de conteúdo
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 9/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Em 2017
Receber Newsletter
Poste aqui sua dúvida ou comentário que nossa equipe responderá o mais rápido
possível.
Edmilson Malaquia
Parabéns a equipe.
Tenho uma dúvida.
tenho um objeto do tipo tobjectlist<TObject> e quero atribuir a ele um objeto do tipo
Tobjectlist<TClienteModel>.
Como poderia usar um typecast nessa situação.
Obrigado
há 10 meses
HÉLIO DevMedia há 10 meses DEVMEDIA
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 10/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Olá Edimilson,
DEVMEDIA Login
Infelizmente, isso não é possível, pois é um quebra de paradigma da Orientação a Objetos
porque tobjectlist<TObject> é uma lista que gera um tipo dinamicamente e
Tobjectlist<TClienteModel> é outro objeto com o tipo gerado dinamicamente, e estes novos
objetos gerados dinamicamente não são herança um do outro.
list:= Tobjectlist<TObject>.Create;
você pode adicionar o objeto TClienteModel (lembrando que ele é decendente de TObject)
diretamente assim:
cm:=TClienteModel.Create;
list.add(cm);
Edmilson Malaquia há 10 meses
[autor] WESLEY YAMAZACK há 10 meses
Adicionar um comentário...
Wilton Santos
type
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 11/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
[TableName('pdg_Nivel')]
DEVMEDIA
TNivel = class(TGenericEntity)
Login
private
Fid: Integer;
FNivel: string;
public
[FieldName('Ni_id'), KeyField('Ni_id')]
[FieldName('Ni_Nivel')]
end;
TNivelObjList = TObjectList<TNivel>;
implementation
--------------------------------
Tenho outra classe por nome GRUPO que precisara dos objetos desta classe (NIVEL), como no
exemplo da venda, mas um pouco diferente, quase o contrario, ao invés de agregar o item da venda,
quero apenas listar em uma combobox a lista de objetos desta classe NIVEL para recupera-la ao
salvar na outra classe (GRUPO); veja a classe GRUPO:
type
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 12/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
[TableName('pdg_grupo')]
DEVMEDIA
TGrupo = class(TGenericEntity)
Login
private
FId: integer;
FidEstabl: integer;
FNombre: string;
FCiclo: integer;
FSeccion_Ano: integer;
FTurno: string;
... etc
Tenho um form que possue o ccbNivel (combobox), quero listar os niveis lá e depois quero salvar o id
do Nivel dentro da classe GRUPO, tipo assim:
var
var_Nivel : integer;
Nomestr: string;
g : TGrupo;
begin
var_nivel := Integer(cbbNivel.Items.IndexOfObject(cbbNivel.ItemIndex));
g := TGrupo.Create;
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 13/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
with g do
DEVMEDIA Login
begin
try
idEstabl := AEstabl;
Nombre := Nomestr;
Nivel := var_nivel;
Acontece que não estou conseguindo, poderiam ajudar-me nesta rotina, por favor?
ERROS: 1-Nao consigo carregar o combo. 2-Ao tentar recuperar var_nivel me traz: Incompatible
types: 'TObject' and 'Integer'
HELP, HELP!
há +1 ano
Daniella Costa há +1 ano DEVMEDIA
Olha, a tua ideia é bem legal e acredito que a comunidade DevMedia pode te ajudar dando
soluções pro seu problema. Por isso, abrimos um chamado no fórum:
http://www.devmedia.com.br/forum/ajuda-para-carregar-dado-em-um-combobox/585010
Wilton Santos há +1 ano
Que bom Daniela, gostei muito dessa iniciativa de vocês! Estou muito satisfeito com o
trabalho de vocês! Obrigado!
Guilherme Parreira há +1 ano DEVMEDIA
Um abração!!
:DD
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 14/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA
Adicionar um comentário... Login
Davidson Santos
Primeiramente parabéns a toda a equipe da dev pelo novo formato das aulas, estão bem mais
objetivas e dinâmicas e pra quem faz aulas de back-end Java vai sacar, estão bem mais divertidas
também... Gostei muito do microexemplo, poupa tempo e conhecendo a galera, logo teremos
microexemplos relacionados ao conteúdo dos cursos e complementando o aprendizado. O caminho é
esse! Parabéns devdesigners, devcontents, enfim, devloucos...
há +1 ano
Daniella Costa há +1 ano DEVMEDIA
WOW Davidson! Que bom que vc gostou hein! Obrigada pelo elogio!
Abraço
Gladstone Gomes há +1 ano DEVMEDIA
Guilherme Parreira há +1 ano DEVMEDIA
Um abração!!
:DD
Adicionar um comentário...
ARTHUR JARDIM
Gostei do formato, acho que o conteúdo escrito ajuda de mais.. continuem assim..
há +1 ano
ARTHUR JARDIM há +1 ano
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 15/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA
Joel Rodrigues há +1 ano DEVMEDIA
Login
Explica melhor pra nós como seria essa questão dos índices que a gente tenta preparar algo.
Abraço.
ARTHUR JARDIM há +1 ano
Então Joel, estava falando sobre o método Sort do TObjectList<> que recebe como parâmetro
uma interface do tipo IComparer<T>, você pode criar uma classe que implemente essa
interface para ordenar a lista ou usar a classe TComparison<> para criar um delegate, com a
lista ordenada você também pode executar BinarySearch. Segue um exemplo de como
implementar o TComparison<> com delegate:
var
comparison: TComparison<TPessoa>;
delegateComparer: TDelegatedComparer<TPessoa>;
begin
begin
end;
begin
end; }
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 16/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA
// passe o método de comparação para o delegate!
Login
delegateComparer := TDelegatedComparer<TPessoa>.Create(comparison);
try
Lista.Sort(delegateComparer);
finally
delegateComparer.Free;
end;
end;
Joel Rodrigues há +1 ano DEVMEDIA
Já anotei aqui para abordarmos esse assunto, que realmente é bem bacana. =)
Abraço.
Juliano Santos há +1 ano
Show de bola, como sempre a Devmedia inovando em seu conteúdo, bastante didático.
Guilherme Parreira há +1 ano DEVMEDIA
:DD \o/
Adicionar um comentário...
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 17/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA
Lucas Guimarães Login
Perfeito! Bonito, Claro, Direto ao ponto! É isso que o povo quer, é isso que o povo precisa! kkkkk
há +1 ano
Moderacao DevMedia há +1 ano DEVMEDIA
E fica de olho que teremos muito mais microexemplos de várias outras linguagens.
Adicionar um comentário...
Flavio França
Boníssimo pra ficar otimíssimo tem que ter um em android. brincadeiras a parte, ficou sensacional.
Grato.
há +1 ano
Joel Rodrigues há +1 ano DEVMEDIA
Ah, então se prepara que vai ficar otimíssimo, porque já estamos preparando microexemplos
de Android, hein!
Abraço.
Adicionar um comentário...
Alessandro Ribeiro
Sensacional!!! Vcs estão mandando muito bem, apesar de não utilizar Delphi o formato está ótimo,
gostei bastante!!! (PHP - Java). Forte abraço a todos da equipe!
há +1 ano
Moderacao DevMedia há +1 ano DEVMEDIA
Em breve teremos mais conteúdos neste formato com varias linguagens diferentes. :DDD
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 18/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
Tmj.. []s
DEVMEDIA Login
Cleyton há +1 ano
curtir bastante o formato dos cursos, esse conteúdo veio na hora certa, estava procurando
conteúdos sobre delphi para aprender. só uma duvida, esse conteúdo abrange desde a
versão 5 do delphi ??
Daniella Costa há +1 ano DEVMEDIA
Oi Cleyton, que bom que vc gostou. Com relação a sua dúvida, não funciona no Delphi 5,
apenas a partir do Delphi 2009, ok.
Abraço
Adicionar um comentário...
Fórum
Revistas
Baixe o App
APIs
Fale conosco
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 19/20
24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi
DEVMEDIA Login
72
https://www.devmedia.com.br/tobjectlist-como-trabalhar-com-colecoes-de-objetos-no-delphi/38586 20/20