Ler valor de uma propriedade em runtime?
Galera, criei uma classe
Tpessoa = class(TComponent)
private
Fnome:string;
Fsal :integer;
Fdata:Tdate;
procedure Setnome(value:string);
function getnome:string;
published
property Nome:string read getnome write setnome;
property Sal :integer read Fsal Write Fsal;
property Data :Tdate read Fdata write Fdata;
end;
Estava com dúvidas de como levantar todas as Propriedades dela em runtime, mas descobri com que usando o método getPropList, é possível pegar os nomes das propriedades, mas agora, preciso ser capaz de ler o valor da propriedade e tbm atribuir um novo valor a mesma.
Ex:
var
myobj:Tpessoa;
i,Propcount:integer;
PropList : PPropList;
begin
myobj:=Tpessoa.crealte(self);
Propcount:=GetPropList(Myobj.ClassInfo,PropList) - 1 ; // levanto as propriedades do obj.
if PropCount > 0 then
begin
for Prop := 0 to PropCount do
begin
if Form1.findcomponent(PropList[Prop].Name) then
begin
//aqui eu passaria o valor do componente do form, q tem o
//mesmo nome da proprieade do obj, para a propriedade.
//mas não sei como fazer isto
end;
end;
end;
end;
Isto seria de grande valia, pois eu não precisaria criar rotinas para fazer a leitura ou a atribuição de valores, nos forms e sim nas classes.
Alguem tem uma dica ou exemplo ou sabe como posso fazer isto?
Obrigado
Tpessoa = class(TComponent)
private
Fnome:string;
Fsal :integer;
Fdata:Tdate;
procedure Setnome(value:string);
function getnome:string;
published
property Nome:string read getnome write setnome;
property Sal :integer read Fsal Write Fsal;
property Data :Tdate read Fdata write Fdata;
end;
Estava com dúvidas de como levantar todas as Propriedades dela em runtime, mas descobri com que usando o método getPropList, é possível pegar os nomes das propriedades, mas agora, preciso ser capaz de ler o valor da propriedade e tbm atribuir um novo valor a mesma.
Ex:
var
myobj:Tpessoa;
i,Propcount:integer;
PropList : PPropList;
begin
myobj:=Tpessoa.crealte(self);
Propcount:=GetPropList(Myobj.ClassInfo,PropList) - 1 ; // levanto as propriedades do obj.
if PropCount > 0 then
begin
for Prop := 0 to PropCount do
begin
if Form1.findcomponent(PropList[Prop].Name) then
begin
//aqui eu passaria o valor do componente do form, q tem o
//mesmo nome da proprieade do obj, para a propriedade.
//mas não sei como fazer isto
end;
end;
end;
end;
Isto seria de grande valia, pois eu não precisaria criar rotinas para fazer a leitura ou a atribuição de valores, nos forms e sim nas classes.
Alguem tem uma dica ou exemplo ou sabe como posso fazer isto?
Obrigado
Aledeol
Curtidas 0
Respostas
Marcelo Saviski
11/03/2004
use o:
GetPropValue (Componente, Nome_da_Propriedade);
GOSTEI 0
Aledeol
11/03/2004
Muito obrigado, isto vai ser realmente muito útil.
Um abraço :o
Um abraço :o
GOSTEI 0