ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Converter property para String

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
crpsistemas
Novato
Novato


Registrado: Quarta-Feira, 11 de Julho de 2012
Mensagens: 56

MensagemEnviada: Ter Dez 22, 2015 6:43 pm    Assunto: Converter property para String Responder com Citação

Saudações comunidade Active Delphi

Preciso novamente da ajuda de você para resolver situações com property.
Tenha uma classe básica de cliente:
Código:
unit uCliente;

interface

type
  TCliente = class
  private
    FCodigo: Integer;
    FCPF: String;
    FNome: String;
    procedure SetCodigo(const Value: Integer);
    procedure SetCPF(const Value: String);
    procedure SetNome(const Value: String);

  public
    property Codigo: Integer read FCodigo write SetCodigo;
    property Nome: String read FNome write SetNome;
    property CPF: String read FCPF write SetCPF;
  end;

implementation

{ TCliente }

procedure TCliente.SetCodigo(const Value: Integer);
begin
  FCodigo := Value;
end;

procedure TCliente.SetCPF(const Value: String);
begin
  FCPF := Value;
end;

procedure TCliente.SetNome(const Value: String);
begin
  FNome := Value;
end;

end.


Minha dúvida é a seguinte: Preciso converter a assinatura da propriedade para String (não é o valor e sim o nome da propriedade).
Gostaria, se possível, passar para a função de conversão o objeto com a propriedade: GetPropertyToString(objCliente.Codigo) e o retorno que preciso é: 'Codigo'; GetPropertyToString(objCliente.Nome) => 'Nome', etc.
É possível fazer isso?
Desde já, Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Qui Dez 24, 2015 12:05 pm    Assunto: Responder com Citação

Isso dá pra fazer com Custom Attributes, não tenho código em mãos pra te fornecer, basicamente é você atributar a propriedade com o nome dela e com a nova RTTI buscar esse atributo da propriedade em RunTime.

Dê uma olhada :

http://eugostododelphi.blogspot.com.br/2012/02/trabalhando-com-atributos-custom.html
_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
crpsistemas
Novato
Novato


Registrado: Quarta-Feira, 11 de Julho de 2012
Mensagens: 56

MensagemEnviada: Ter Dez 29, 2015 5:51 pm    Assunto: Responder com Citação

claudio.ferreira escreveu:
Isso dá pra fazer com Custom Attributes, não tenho código em mãos pra te fornecer, basicamente é você atributar a propriedade com o nome dela e com a nova RTTI buscar esse atributo da propriedade em RunTime.

Dê uma olhada :

http://eugostododelphi.blogspot.com.br/2012/02/trabalhando-com-atributos-custom.html


Olá claudio.ferreira!

Há +/- um mês estava com um problema parecido e você me indicou um livro, Coding in Delphi, por sinal excelente publicação. Com o estudo baseado neste livro consegui chegar a um método que recebe a o nome da propriedade do tipo String e retorna o atributo que esta propriedade seta. Veja:

Código:
function TForm1.GetPropertyAttribute(pProperty: String): string;
var
  Context: TRTTIContext;
  TempType: TRttiType;
  TempProperty: TRttiProperty;
  TempAttributes: TArray<TCustomAttribute>;
  TempValue: TValue;
  Attribute: TCustomAttribute;
begin
  Result := '';
  TempType := Context.GetType(TTeste);
  TempProperty := TempType.GetProperty(pProperty);
  TempAttributes := TempProperty.GetAttributes;
  for Attribute in TempAttributes do
  begin
    if Attribute is TLqColuna then
    begin
      TempValue := TLqColuna(Attribute).Nome;
    end;
  end;
  Result := TempValue.ToString;
end;


Só que este método aceita apenas string, por isso que eu queria converter property para string.
Se tiver alguma ideia, fico grato.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Qua Dez 30, 2015 10:46 am    Assunto: Responder com Citação

Está difícil entender o que voce quer. Se esta método que você postou já retorna o nome da propriedade que foi capturado pelo atributo que contém o nome da propriedade, então você já tem o que deseja, ou eu não entendi.
_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB