Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 12 de Junho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
128 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Armazenando objetos em componentes visuais
Publicado por rboaro : Sexta, Março 15, 2013 - 01:56 GMT-3 (752 leituras)
Comentários 5 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Diego Garcia Recentemente descobri que é possível armazenar objetos dentro de itens de componentes visuais, como por exemplo o TListView, TComboBox, TStringList, etc. Vamos ver isso na prática, começando com a criação da nossa classe de teste que terá seus objetos armazenados nos componentes.


type
TTeste = class
private
FCodigo: integer;
FNome: string;
FDescricao : string;
public
property codigo : integer read FCodigo write FCodigo;
property nome : string read FNome write FNome;
property descricao : string read FDescricao write FDescricao;

end;

Agora faremos uma rotina para povoar um ComboBox com uma lista de objetos desta classe TTeste que fizemos, já armazenando o ponteiro para cada objeto.

procedure TFrmPrincipal.alimentarComboBox(AObjetos: TList);

var
oTeste : TTeste;
begin
for oTeste in AObjetos do
cmbTeste.AddItem(oTeste.nome, oTeste);
end;

E por fim, vamos recuperar a instancia do nosso objeto a partir do item selecionado no ComboBox.

procedure TFrmPrincipal.btnMostrarObjetoSelecionadoClick(Sender: TObject);
begin
with TTeste(cmbTeste.Items.Objects[cmbTeste.ItemIndex]) do
ShowMessageFmt('Código: %d | Nome: %s | Descrição: %s',[codigo,nome,descricao]);
end;

É claro, são apenas exemplos didáticos, mas essa técnica evita o uso de controles pelo texto ou índice do ComboBox, obrigando nesse segundo caso que o combo respeite uma determinada ordem que pode deixar de fazer sentido. Vale ai um cuidado com os MemoryLeeks que podem ocorrer se você não se lembrar de liberar os objetos que estão no ComboBox da memória. Para alimentar um TListView o processo é exatamente o mesmo, porem para recuperar o objeto utilizamos a propriedade Data de um TListItem.

procedure TFrmPrincipal.btnMostrarObjetoSelecionadoListViewClick(Sender: TObject);

begin
with TTeste(lsvTeste.Selected.Data) do
ShowMessageFmt('Código: %d | Nome: %s | Descrição: %s',[codigo,nome,descricao]);
end;

Confesso que se tivesse descoberto esse recurso a pelo menos 1 ano atrás, teria me ajudado muito em alguns projetos. Para saber qual objeto possui esse recurso, procure pela propriedade data, vale lembrar que as classes descendentes da classe TStrings já possuem esse propriedade por herança.


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: Caduzera (edu_carlos@ig.com.br) : Mar 18, 2013 - 02:40
(Informações sobre o membro | Enviar uma mensagem) http://
realmente muito interessante, parabéns !!


por: tiago.prs (tiago.prs@gmail.com) : Mar 19, 2013 - 10:16
(Informações sobre o membro | Enviar uma mensagem)
Montei pra mim um form genérico de pesquisa onde passo uma lista de objetos para popular um ClientDataSet usando CreateDataSet.

Então o método que cria e exibe o form recebe o tipo da classe por meio de generics. Monto a tela usando RTTI.

Nada d+! Porém, um pouco dentro do tema do seu artigo, uso uma coluna do tipo Integer para armazenar a referência do objeto e depois poder recuperá-lo.

Obtendo a referência:
---------------------
For Obj In ALista Do
CdsReferObj.AsInteger := Integer(Pointer(Obj));

Recuperando:
------------
Result := TTeste(Pointer(CdsReferObj.AsInteger));
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados