Você está na página 1de 20

24/08/2018 TObjectList: Como trabalhar com coleções de objetos no Delphi

DEVMEDIA Login

Documentação

TObjectList: Como trabalhar com


coleções de objetos no Delphi
Neste microexemplo você aprenderá a trabalhar com a classe TObjectList no Delphi. Trata-se de
uma classe genérica por meio da qual podemos manter uma coleção de objetos, que são
acessíveis posteriormente por um índice.

Marcar como lido Anotar

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

quando itens adicionados à coleção não são liberados.

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:

uVenda: unit contendo a classe TVenda;


uVendaItem: unit contendo a classe TVendaItem;
uFrmListaObjetos: unit contendo o formulário principal.
72

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

Cada uma dessas classes será explicada mais adiante.


DEVMEDIA Login

Classe TVenda

Nesta classe temos três propriedades: IDVenda (Integer), Data (TDateTime) e


ListaVendaItem(TObjectList<TVendaItem>). Além disso, implementamos seu
construtor, destrutor e o método AdicionarVendaItem .

Na unit uVenda , o primeiro ponto a ser observado é que referenciamos na seção

uses a unit System.Generics.Collections , pois é nela que está declarada a classe

TObjectList :

uses
System.Generics.Collections, System.SysUtils, uVendaItem;

Note que também estamos referenciando a unit uVendaItem , na qual declaramos a

classe TVendaItem , e a System.SysUtils , na qual encontra-se a função EncodeDate

que será usada mais adiante.

Na sequência temos a de nição da classe TVenda , como vemos abaixo:

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

19    { published declarations }


20 end;
DEVMEDIA Login

Linhas 3 a 5: Atributos privados que representam o id, a data e os itens da venda,


respectivamente;

Linhas 11 a 14: Propriedades públicas que encapsulam o acesso aos atributos


privados. Note que cada propriedade é responsável por ler e escrever valores em
cada um dos atributos privados;

Linhas 15 e 16: Declaração do construtor e do destrutor da classe,


respectivamente;

Linha 17: Declaração do método responsável por adicionar um novo item a essa
venda.

O método AdicionarVendaItem é responsável por instanciar um objeto do tipo

TVendaItem dentro da propriedade FListaVendaItem e preencher suas

propriedades de forma estática, da seguinte forma:

01 procedure TVenda.AdicionarVendaItem(pProduto: String);


02 var
03  I: Integer;
04 begin
05  FListaVendaItem.Add(TVendaItem.Create);
06  I := FListaVendaItem.Count -1;
07  FListaVendaItem[I].IDVendaItem := I;
08  FListaVendaItem[I].IDVenda := FIDVenda;
09  FListaVendaItem[I].Produto := pProduto;
10 end;

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

objeto nas próximas linhas;

Linhas 7 a 9: Preenchemos o item recém-criado.

Mais abaixo, na implementação do método Create da classe TVenda , estamos

atribuindo valores iniciais aos elds e também instanciando a nossa coleção de


itens:

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;

Linha 4: Atribuímos o valor 0 ao eld FIDVenda ;

Linha 5: Utilizando a função EncodeDate setamos um valor padrão para a data da

nossa venda;

Linha 6: Neste momento estamos instanciando a nossa coleção de itens, para


adicionarmos itens a ela posteriormente.

Por m, na implementação do método Destroy da classe TVenda precisamos

liberar a nossa coleção da memória e ela se encarrega de liberar todos os itens


que contém:

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 3: Nesta linha liberamos a nossa coleção da memória e consequentemente


todos os seus itens;

Linha 4: Aqui garantimos que será executada uma chamada ao Destroy da classe

ancestral de TVenda , ou seja, TObject .

Classe TVendaItem

A classe TVendaItem possui apenas três propriedades, a m de simular de forma


simpli cada os itens e uma venda. Sua de nição pode ser vista abaixo:

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;

Linhas 3 a 5: atributos privados que representam o id do item, o id da venda e o


nome do produto, respectivamente;

Linhas 11 a 13: propriedades públicas que encapsulam o acesso aos atributos


privados. Note que cada propriedade é responsável por ler e escrever valores em
cada um dos atributos privados.

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:

Figura 1. Layout do form principal

Na seção private desse form declaramos uma variável do tipo TVenda, da seguinte
forma:

private
Venda: TVenda;

Em seguida é necessário instanciar esse objeto, o que foi feito no construtor do


form, para garantir que após o form ser criado já poderemos usar esse objeto
normalmente:
72

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

procedure TFrmListaObjetos.FormCreate(Sender: TObject);


DEVMEDIA
begin
Login

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”:

procedure TFrmListaObjetos.BtnCadastrarVendaClick(Sender: TObject);


01 begin
02  Venda.IDVenda := 1;
03  Venda.Data := Now;
04
05  Venda.ListaVendaItem.Clear;
06  MmDadosVenda.Clear;
07
08  Venda.AdicionarVendaItem('Sony Vaio XR8472');
09  Venda.AdicionarVendaItem('Dell Vostro');
10  Venda.AdicionarVendaItem('HP I7');
11
12  BtnListarVenda.Enabled := True;
13  BtnCadastrarVenda.Enabled := False;
14 end;

Linhas 2 e 3: Preenchemos as propriedades do objeto Venda;

Linhas 5 e 6: Limpamos a coleção de itens da venda e o memo;

Linhas 8 a 10: Adicionamos três itens à venda;

Linhas 12 e 13: Habilitamos o botão de listar dados da venda e desabilitamos o


botão de cadastrar nova venda.

Na sequência utilizamos o botão “Listar Venda” para imprimir no memo os dados


da venda e seus itens. Para isso alteramos seu evento OnClick, da seguinte forma:

01 procedure TFrmListaObjetos.BtnListarVendaClick(Sender: TObject);


02 var
03  VendaItem: TVendaItem;
04 begin
05  MmDadosVenda.Lines.Add('IDVenda: ' + IntToStr(Venda.IDVenda));
72

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

06  MmDadosVenda.Lines.Add('Data: ' + FormatDateTime('dd/mm/yyyy', Venda.Data));


07
DEVMEDIA
08  MmDadosVenda.Lines.Add('');
Login

09  MmDadosVenda.Lines.Add('<<Lista de produtos>>');


10
11  for VendaItem in Venda.ListaVendaItem do
12    MmDadosVenda.Lines.Add('Produto : ' + VendaItem.Produto);
13
14  BtnListarVenda.Enabled := False;
15  BtnCadastrarVenda.Enabled := True;
16 end;

Linhas 5 e 6: Adicionamos ao memo os dados do id e data da venda;

Linhas 8 e 9: Adicionamos ao memo duas linhas para separar os dados da venda


dos seus itens;

Linhas 11 e 12: Percorremos os itens da venda usando um laço for e imprimimos


no memo os dados de cada um;

Linhas 14 e 15: Desabilitamos o botão de listagem e habilitamos o botão de


cadastrar venda.

Por m, no método Destroy do form liberamos o objeto Venda da memória:

procedure TFrmListaObjetos.FormDestroy(Sender: TObject);


begin
FreeAndNil(Venda);
end;

Sugestão de conteúdo

Artigo: Como criar listas de objetos no Delphi


Artigo: Trabalhando com tipos genéricos no Delphi

Marcar como lido Anotar

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

DEVMEDIA Por Wesley


Login

Em 2017

Este artigo faz parte do curso


ListView no Delphi: Como listar objetos

RECEBA NOSSAS NOVIDADES

Informe o seu e-mail

Receber Newsletter

Suporte ao aluno - Deixe a sua dúvida.

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.

mas não se preocupe, se você cria uma lista do tipo

list:= Tobjectlist<TObject>.Create;

você pode adicionar o objeto TClienteModel (lembrando que ele é decendente de TObject)
diretamente assim:

cm:=TClienteModel.Create;

list.add(cm);

Espero ter ajudado. qualquer dúvida estou as ordens!

 
Edmilson Malaquia há 10 meses

Muito obrigado... desculpe a arrogância de ontem... estava chateado com o chefe.


Desculpe por ter descontado no texto. Estava só demonstrando a emoção sem violência.
Senão é capaz de eu ter um derrame engolindo insatisfação. Vou tentar aplicar o exemplo.
Uma ótima semana. Essa equipe é show de bola.

 
[autor] WESLEY YAMAZACK há 10 meses

Fala Edmilson, estamos aki pra isso meu amigo :)

Qualquer coisa é só dar um alo, vamo q vamo :)

grande abraço e conte sempre conosco.

 
Adicionar um comentário...

Wilton Santos

Muito bom, fiquei com uma duvida:


Minhas classes são um pouco diferentes porque uso ENTITY, ou seja, são populadas de ATTRIBUTOS
e busco do banco ja os dados e no final ja crio a lista. Exemplo:

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;

procedure Setid(const Value: Integer);

procedure SetNivel(const Value: string);

public

[FieldName('Ni_id'), KeyField('Ni_id')]

property id : Integer read Fid write Setid;

[FieldName('Ni_Nivel')]

property Nivel : string read FNivel write SetNivel;

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;

FNivel: TNivelObjList; //veja onde quero trazer os dados

FCiclo: integer;

FSeccion_Ano: integer;

FTurno: string;

procedure setFId(const Value: integer);

procedure setFNombre(const Value: 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:

procedure TFrmGrupo.btnGuardarClick(Sender: TObject);

var

var_Nivel : integer;

Nomestr: string;

g : TGrupo;

begin

Nomestr := cbbNivel.Text +', '+ cbbCiclo.Text +', '+cbbSeccion.Text;

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

Olá Wilton, tudo bem!?

Que bom que está usando o nosso conteúdo em seus projetos ;)

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

forte abraço e bons códigos ;)

 
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

Sensacional, Wilton! Muito obrigado pelos elogios! Hehehe...


Qualquer coisa é só chamar!

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

uhhuuuu adorei o devloucos perfeito huahuahauahu abracos :)

 
Guilherme Parreira há +1 ano DEVMEDIA

Irado, né, Gladstone?


#SomosTodosDevLoucos!!

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

que tal um exemplo mostrando como ordenar e criar índices.

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

Fala, Arthur. Valeu mesmo pelo feedback. :)

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:

procedure OrdenarLista(Lista: TListaPessoas);

var

comparison: TComparison<TPessoa>;

delegateComparer: TDelegatedComparer<TPessoa>;

begin

// método anonimo para ordenação crescente por ID

comparison := function (const P1, P2: TPessoa): Integer

begin

Result := CompareText(P1.Id, P2.Id);

end;

// método anonimo para ordenação decrescente por ID

{ comparison := function (const P1, P2: TPessoa): Integer

begin

Result := - CompareText(P1.Id, P2.Id);

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

// classe que implementa TComparer<T> e facilita o uso.

DEVMEDIA
// passe o método de comparação para o delegate!
Login

delegateComparer := TDelegatedComparer<TPessoa>.Create(comparison);

try

// Usando método Sort da nossa lista passando nosso "ordenador"

Lista.Sort(delegateComparer);

finally

delegateComparer.Free;

end;

end;

 
Joel Rodrigues há +1 ano DEVMEDIA

Show, Arthur. Obrigado pela sugestão.

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

Woooow, Juliano! É tão bom ler isso!


Que bom que você curtiu!!

Qualquer coisa estamos por aqui.


Grande abraço e bons estudos!!

: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

Opa Lucas, fico feliz que tenha gostado. :DDDD

E fica de olho que teremos muito mais microexemplos de várias outras linguagens.

Tmj.. Bons estudos.

 
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

Haha, show demais, Flavio. Valeu pelo feedback. =)

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

Opa Alessandro, show ter curtido (Y)

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 ??

gostaria de ver mais cursos neste formato, parabéns!!!

 
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...

Ver mais comentários

Fórum

Revistas

Baixe o App

APIs

Fale conosco

Hospedagem web por Porta 80 Web Hosting

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

Você também pode gostar