Listar properties publicas de uma classe
Olá a todos, a questão é a seguinte, tenho uma classe simples:
type
TClientes = class
private
FSexo: string;
FNome: string;
FChave: integer;
procedure SetChave(const Value: integer);
procedure SetNome(const Value: string);
procedure SetSexo(const Value: string);
public
property Chave : integer read FChave write SetChave;
property Nome : string read FNome write SetNome;
property Sexo : string read FSexo write SetSexo;
end;
Gostaria de criar uma camada de persistência em win32 que recebesse o objeto populado (com dados), le-se as properties PUBLICAS da classe do mesmo, e montasse todo sql, a questão é todo material qu encontrei na net diz que tem que ser descendente de TComponent e as propeties tem que ser published pra eu conseguir recuperar as informações com RTTI.... , mas eu gostaria mesmo de ler as propriedades PUBLICAS de uma classe .... ja são 3 noites quase sem dormir....rs....to ralando pra fazer isto, se alguem puder me ajudar agradeço de coração.
Abraço.
type
TClientes = class
private
FSexo: string;
FNome: string;
FChave: integer;
procedure SetChave(const Value: integer);
procedure SetNome(const Value: string);
procedure SetSexo(const Value: string);
public
property Chave : integer read FChave write SetChave;
property Nome : string read FNome write SetNome;
property Sexo : string read FSexo write SetSexo;
end;
Gostaria de criar uma camada de persistência em win32 que recebesse o objeto populado (com dados), le-se as properties PUBLICAS da classe do mesmo, e montasse todo sql, a questão é todo material qu encontrei na net diz que tem que ser descendente de TComponent e as propeties tem que ser published pra eu conseguir recuperar as informações com RTTI.... , mas eu gostaria mesmo de ler as propriedades PUBLICAS de uma classe .... ja são 3 noites quase sem dormir....rs....to ralando pra fazer isto, se alguem puder me ajudar agradeço de coração.
Abraço.
Quartieri
Curtidas 0
Respostas
Quartieri
27/07/2007
up
GOSTEI 0
Marco Salles
27/07/2007
a questão é todo material qu encontrei na net diz que tem que ser [b:8786eba71a]descendente de TComponent[/b:8786eba71a] e as propeties tem que ser [b:8786eba71a]published[/b:8786eba71a] pra eu conseguir recuperar as informações com RTTI
Ate aonde eu sei isto é condição..
GOSTEI 0
Quartieri
27/07/2007
Valeu Marco, mas sera que num tem jeito mesmo.....?
GOSTEI 0
Rjun
27/07/2007
Na verdade, a classe precisa ser herdade de TPersistent. Você pode até conseguir de uma classe herdada de TObject desde que na definição da classe você use {$M+} e {$M-}.
Isso eu não testei, mas pelo que li, funciona. Mas parece que a propriedade realmente precisa ser [b:230b76712b]published[/b:230b76712b].
{$M+}
TMyClass = class
end;
{$M-}
Isso eu não testei, mas pelo que li, funciona. Mas parece que a propriedade realmente precisa ser [b:230b76712b]published[/b:230b76712b].
GOSTEI 0
Marco Salles
27/07/2007
[b:e0c87ac62a]citação de RJun[/b:e0c87ac62a]
Muito bem colocado...
excelente informação...
Na verdade, a classe precisa ser herdade de TPersistent.
Muito bem colocado...
Você pode até conseguir de uma classe herdada de TObject desde que na definição da classe você use {$M+} e {$M-}.
Código:
{$M+}
TMyClass = class
end;
{$M-}
Isso eu não testei, mas pelo que li, funciona. Mas parece que a propriedade realmente precisa ser published.
excelente informação...
GOSTEI 0
Quartieri
27/07/2007
Opa, essa ajuda já foi otima, :)
Brigadão.
Brigadão.
GOSTEI 0
Quartieri
27/07/2007
Pessoal....Deu Certo!!!
olha só a classe:
**********************
type
{$M+}
TMyClass = class
private
FTel: string;
Fchave: integer;
Fnome: string;
procedure Setchave(const Value: integer);
procedure Setnome(const Value: string);
procedure SetTel(const Value: string);
published
property chave : integer read Fchave write Setchave;
property nome : string read Fnome write Setnome;
property Tel : string read FTel write SetTel;
end;
{$M-}
**********************
código pra ler as properties :
**********************
procedure TForm1.Button2Click(Sender: TObject);
var
Count, Loop: Integer;
List: PPropList;
begin
Count := GetPropList(TypeInfo(Tmyclass), tkAny, nil);
GetMem(List, Count * SizeOf(PPropInfo));
try
GetPropList(TypeInfo(Tmyclass), tkAny, List);
for Loop := 0 to Pred(Count) do
memo1.lines.Add(List^[Loop]^.Name);
finally
FreeMem(List, Count * SizeOf(PPropInfo));
end;
end;
**********************
Marcos e RJun, muito obrigado. :)
olha só a classe:
**********************
type
{$M+}
TMyClass = class
private
FTel: string;
Fchave: integer;
Fnome: string;
procedure Setchave(const Value: integer);
procedure Setnome(const Value: string);
procedure SetTel(const Value: string);
published
property chave : integer read Fchave write Setchave;
property nome : string read Fnome write Setnome;
property Tel : string read FTel write SetTel;
end;
{$M-}
**********************
código pra ler as properties :
**********************
procedure TForm1.Button2Click(Sender: TObject);
var
Count, Loop: Integer;
List: PPropList;
begin
Count := GetPropList(TypeInfo(Tmyclass), tkAny, nil);
GetMem(List, Count * SizeOf(PPropInfo));
try
GetPropList(TypeInfo(Tmyclass), tkAny, List);
for Loop := 0 to Pred(Count) do
memo1.lines.Add(List^[Loop]^.Name);
finally
FreeMem(List, Count * SizeOf(PPropInfo));
end;
end;
**********************
Marcos e RJun, muito obrigado. :)
GOSTEI 0
Marco Salles
27/07/2007
Boa mesmo....
GOSTEI 0