GARANTIR DESCONTO

Fórum Listar properties publicas de uma classe #343753

27/07/2007

0

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.


Quartieri

Quartieri

Responder

Posts

30/07/2007

Quartieri

up


Responder

Gostei + 0

30/07/2007

Marco Salles

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


Responder

Gostei + 0

31/07/2007

Quartieri

Valeu Marco, mas sera que num tem jeito mesmo.....?


Responder

Gostei + 0

31/07/2007

Rjun

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

{$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].


Responder

Gostei + 0

01/08/2007

Marco Salles

[b:e0c87ac62a]citação de RJun[/b:e0c87ac62a]
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...


Responder

Gostei + 0

01/08/2007

Quartieri

Opa, essa ajuda já foi otima, :)

Brigadão.


Responder

Gostei + 0

03/08/2007

Quartieri

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


Responder

Gostei + 0

03/08/2007

Marco Salles

Boa mesmo....


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar