mai 18

Olá,

Recentemente fiz para um amigo um código de exemplo, então decidi postar ele aqui para outros que tiverem a mesma dúvida.

Recentemente escrevi um post parecido, sendo que as imagens eram arquivos físicos, agora escrevi o mesmo exemplo usando imagelist.

É um exemplo bem simples, uma determinada imagem é impressa na coluna do grid dependendo do valor de outra coluna.

Se o valor for ‘masculino’, exibe a bola verde, se for ‘feminino’ exibe a bola vermelha.

Link para download: http://www.prsolucoes.com/downloads/teste_grid_img_list.zip

imagemgrid2

mai 18

Olá,

Recentemente fiz para um amigo um código de exemplo, então decidi postar ele aqui para outros que tiverem a mesma dúvida.

É um exemplo bem simples, uma determinada imagem é impressa na coluna do grid dependendo do valor de outra coluna.

Se o valor for ‘masculino’, exibe a bola verde, se for ‘feminino’ exibe a bola vermelha.

Link para download: http://www.prsolucoes.com/downloads/teste_grid.zip

imagemgrid1

abr 22

Esse feriado passei boa parte do meu tempo desenvolvendo meu framework de persistência para usar em alguns projetos de meus clientes, para que fosse exterminado o problema de conexão direta dos componentes visuais com os Datasets da vida. Depois de muito fazer as aplicações usando a conexão direta com os Datasets(TDBEdit, TDBComboBox, TDBLookUpComboBox) vi que essa não era a melhor forma em grandes aplicações, mas em aplicações pequenas é extremamente útil e vantajoso. Então pensei e pesquisei como fazer tudo manualmente, e vi que uma boa solução seria separar em camadas criando classes de gerência e de modelo. Mas os modelos podem ter 50 atributos (nome, telefone, cpf, rg, …) e como o gerente saberia quais são os atributos dessa classe para que ele jogasse os valores desses atributos para o banco e vice-versa? Foi ai que lendo uma das revistas Clube Delphi eu lembrei que tinha uma falando sobre o RTTI que é mais ou menos o reflection do Java. Já sabendo o que usar, fui pesquisar mais uma vez e achei centenas de exemplo e juntando tudo vou compartilhar a solução de como consegui e que com certeza poderá ajudar muita gente.

{**
 * Obter atributos de uma classe
 *}
procedure metodoQualquer(objeto: TObject);
var
lListaPropriedades : PPropList;
lContPropriedades  : Integer;
x                  : Integer;
y                  : Integer;
PropInfo           : TPropInfo;
valorAtributo      : Variant;
nomeAtributo       : String;
begin

//obtém informações dos atributos que são Publisheds
lContPropriedades := GetPropList(objeto.ClassInfo, tkAny, nil);
GetMem( lListaPropriedades, lContPropriedades * SizeOf(TPropInfo) );

try
GetPropList(objeto, lListaPropriedades);
for x := 0 to Pred(lContPropriedades) do
begin
//obtém informações da propriedade
PropInfo      := TPropInfo(lListaPropriedades^[x]^);
valorAtributo := GetPropValue(objeto, PropInfo.Name);
nomeAtributo  := PropInfo.Name;
end;
finally
FreeMem(lListaPropriedades);
end;

end;
end;

Essa é um método que eu criei para mostrar como utilizar a técnica, ali no parâmetro OBJETO poderá ser passado qualquer classe que herde de TOBJECT. Em valorAtributo eu armazeno o valor do atributo e em nomeAtributo eu armazeno o nome do atributo, apartir daí fica fácil. Obs: Precisa declarar a unit TypInfo, os atributos da sua classe precisam ser published para essa técnica conseguir enchergar e retornar na lista de atributos. Até a próxima, fiquem com Deus.