Conforme explicação extraída e devidamente traduzida do help do Delphi:
"Variants represent values whose type is not determined at compile time. Instead, the type of their value can change at runtime. Variants can mix with other variants and with integer, real, string, and boolean values in expressions and assignments; the compiler automatically performs type conversions. By default, variants can't hold values that are records, sets, static arrays, files, classes, class references, or pointers. You can, however, extend the Variant type to work with any particular example of these types. Tudo que você precisa é criar um descendente da clase TCustomVariantType que indique como o tupo Variant executará as operações padrão nessa condições." Ou seja, por default não existe conversão de Variant para verificar instâncias de objetos, mas existe uma maneira de resolver essa pinimba sem precisar criar uma classe derivada de TCustomVariantType, se vc ñ tratar o parâmetro do valor como um Variant. O que vc pode fazer é uma modificação na rotina AlteraComponente (e não AlteraComponete) que avalie parâmetros sem tipo e checar o tipo desse parâmetro com o tipo de registro TVarRec da seguinte maneira: procedure AlteraComponente(Form: TForm; Propriedade: string; const Valor) var i: integer; begin for i := 0 to Form.ComponentCount - 1 do if IsPublishedProp(Form.Components[i], Propriedade) then if TVarRec(Valor).VarType = vtObject then Form.Components[i].Assign(TComponent(TVarRec(Valor).vtObject) else SetPropValue(Form.Components[i], Propriedade, TVarRec(TVarRec(Valor).VVariant^)); end; Veja se isso funciona e depois poste seus comentários na lista! P.S.: Eu acho que o certo é "propriedade", e não "propiedade"! Sds. > procedure AlteraComponete(Form :TForm; propiedade : string; valor : > variant); > var i : integer; > begin > for I := 0 to Form.ComponentCount -1 do > begin > if IsPublishedProp(Form.Components[i], propiedade)then > begin > SetPropValue(Form.Components[I], propiedade,valor); > end; > end; > end; ________________________________ To: delphi-br@yahoogrupos.com.br From: [EMAIL PROTECTED] Date: Fri, 1 Feb 2008 13:13:19 -0200 Subject: Re: Res: [delphi-br] Como saber se um componente tem uma propriedade, em runtime? Pessoal, através da dica fiz o seguinte: if IsPublishedProp(Components[i], 'FrameController') then SetPropValue(Components[I], 'FrameController', DM.RzFrameController1); tá dando o seguinte erro: Incompatible types: 'Variant' and 'TRzFrameController' Como transformo TRzFrameController pra variant? OBrigado []s Em 01/02/08, Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu: > > > > Excelente dica, Evaldo! No entanto, falou mencionar que pra usar essa sua > função, se faz necessário um uses da unit TypInfo. > > Sds. > > ________________________________ > > To: delphi-br@yahoogrupos.com.br > From: [EMAIL PROTECTED] > Date: Fri, 1 Feb 2008 06:39:32 -0800 > Subject: Res: [delphi-br] Como saber se um componente tem uma propriedade, > em runtime? > > > Eu criei essa função ontem: > > procedure AlteraComponete(Form :TForm; propiedade : string; valor : > variant); > var i : integer; > begin > for I := 0 to Form.ComponentCount -1 do > begin > if IsPublishedProp(Form.Components[i], propiedade)then > begin > SetPropValue(Form.Components[I], propiedade,valor); > end; > end; > end; > > pode usa-la assim > > AlteraComponete(FGerenciaUsuario,'ReadOnly',true); > > -- > Atenciosamente: > Evaldo Avelar Marques > Programador Junior: Delphi, firebird/interbase, C# Dot Net, C++ > Debian GNU/Linux. > [EMAIL PROTECTED] Belo Horizonte/MG > Brazil > > ----- Mensagem original ---- > De: Fellipe Henrique <[EMAIL PROTECTED] > > Para: "delphi-br@yahoogrupos.com.br " < > delphi-br@yahoogrupos.com.br > > Enviadas: Sexta-feira, 1 de Fevereiro de 2008 10:26:24 > Assunto: [delphi-br] Como saber se um componente tem uma propriedade, em > runtime? > > Olá amigos, preciso saber se um componente tem uma propriedade, que eu vou > > selecionar, e caso tenha passe um valor para ela. Porém tem de ser > genérico > > algo como: > > for i:=0 to ComponentsCount- 1 > > if Components[i] .PROPRIEDADE = True then > > Components[i] .PROPRIEDADE := OBJETO; > > Isso existe? Como eu faria? > > Obrigado desde já. > > -- > > ____________ _________ _________ ___ > > T.·.F.·.A.·. > > Fellipe Henrique > > [EMAIL PROTECTED] com > > [As partes desta mensagem que não continham texto foram removidas] > > Abra sua conta no Yahoo! Mail, o único sem limite de espaço para > armazenamento! > http://br.mail.yahoo.com/ > > [As partes desta mensagem que não continham texto foram removidas] > > __________________________________________________________ > Veja mapas e encontre as melhores rotas para fugir do trânsito com o Live > Search Maps! > http://www.livemaps.com.br/index.aspx?tr=true > > > -- _________________________________ T.·.F.·.A.·. Fellipe Henrique [EMAIL PROTECTED] [As partes desta mensagem que não continham texto foram removidas] _________________________________________________________________ Confira vídeos com notícias do NY Times, gols direto do Lance, videocassetadas e muito mais no MSN Video! http://video.msn.com/?mkt=pt-br