Achei:
Tinha ficado pendente como setar o OnClick. 
É assim:

uses TypInfo

var
  i: Integer;
  evento : TNotifyevent;
begin
  for i:= 0 to ComponentCount - 1 do
  begin

      if IsPublishedProp(Components[i], 'OnClick') then
      begin
        evento := meuClickPersonalizado;
        SetMethodProp(Components[i], 'OnClick', TMethod(evento));
      end;
  end;
end;


//Eduardo



--- Em delphi-br@yahoogrupos.com.br, "Carlos Eduardo L. de Souza"
<[EMAIL PROTECTED]> escreveu
> Na verdade eu acabei usando outra função. É possível descobrir se a
> propriedade ou evento existe e é possível setar um valor. (só não
> consegui setar nil para as propriedades)
> 
>     for i:= 0 to ComponentCount - 1 do
>     begin
>       if IsPublishedProp(Components[i], 'ReadOnly') then
>         SetVariantProp(Components[i], 'ReadOnly', 'True');
> 
> 
>       if IsPublishedProp(Components[i], 'OnClick') then
> //aqui eu ainda não descobri como apontar para um onClick
> personalizado        SetVariantProp(Components[i], 'onClick',
> 'myOnClick');
> 
>     end;
> 
> 
>   obs: também funciona: SetFloatProp(), SetStrProp(), etc...
> 
> Obrigado a todos,
> Se alguém puder acrescentar algo ao que ficou pendente, agradeço.
> Eduardo
> 
> 
> 
> 
> 
> 
> --- Em delphi-br@yahoogrupos.com.br, "Carlos Eduardo L. de Souza"
> <[EMAIL PROTECTED]> escreveu
> > Eu descobri uma função que eu acho que é o que eu quero. Mas ainda
> > estou tentando usar. Qualquer progresso eu aviso.
> > A função é:
> > 
> > IsItThere := IsPropertyInCategory('Localizable', TCustomEdit, 'Text');
> > outra opção:
> > IsItThere := IsPropertyInCategory('Localizable', 'TCustomEdit',
'Text');
> > 
> > Obrigado. A gente chega lá!
> > 
> > 
> > --- Em delphi-br@yahoogrupos.com.br, "Alisson Ricardo Viol Gazda"
> > <[EMAIL PROTECTED]> escreveu
> > > Eu não conheço nenhuma função ou procedimento que retorne esses
> > dados. Mas você pode armazenar em uma TStringGrid as propriedades
> > padrão de cada componente e fazer uma função boleana que retorne se
> > para aquele componente existe ou não a propriedade na lista de
> > propriedades.
> > > 
> > > Grid
> > > Classe  |    Prop1        |    Prop2                |Prop3
> > > TButton |    OnClick    |    OnMouseMove    | Enabled
> > > TEdit     | OnChange   |    OnEnter             | Enabled
> > > 
> > > 
> > > function TForm1.hasProperty(Classe, Propriedade: String): Boolean;
> > > var
> > >    Linha, Coluna: Integer;
> > > begin
> > > Result:=False;
> > > For Linha:=1 to sg1.RowCount-1 do
> > >    begin
> > >       if sg1.Cells[0, Linha]=Classe then
> > >          begin
> > >             for Coluna:=1 to sg1.ColCount-1 do
> > >                begin
> > >                   if sg1.Cells[Coluna, Linha]=Propriedade then
> > >                      begin
> > >                         Result:=True;
> > >                         Break;
> > >                      end;
> > >                end;
> > >          end;
> > >    end;
> > > end;
> > > 
> > > Aí para chamar:
> > > 
> > > if hasProperty(Classe, Propriedade) then
> > >    messagedlg('A Propriedade '+Propriedade+' existe em
> > '+Classe,mtinformation,[mbok],0)
> > > else
> > >    messagedlg('A Propriedade '+Propriedade+' NÃO existe em
> > '+Classe,mterror,[mbok],0)
> > > 
> > > 
> > > 
> > > Não é eficiente mas ajuda um pouco já.
> > > 
> > > 
> > > Alisson Ricardo VIol Gazda
> > > 
> > > 
> > >   ----- Original Message ----- 
> > >   From: Carlos Eduardo L. de Souza 
> > >   To: delphi-br@yahoogrupos.com.br 
> > >   Sent: Thursday, August 25, 2005 2:41 PM
> > >   Subject: [delphi-br] componente tem propriedade?
> > > 
> > > 
> > >   Tarde!
> > >   Alguém sabe:
> > > 
> > >   Eu preciso descobrir se um determinado componente tem uma
> propriedade
> > >   ou um método ou evento.
> > >   Mais ou menos assim:
> > >       for i:= 0 to ComponentCount - 1 do
> > >       begin
> > >         if Components[i].hasProperty('Enabled') then //isto não
> > existe...
> > >           Components[i].Enabled := False; //essa linha também
vai dar
> > >   erro sem um cast...
> > >         //preciso também saber:
> > >         if Components[i].hasEvent('OnClick') then
> > >           Components[i].OnClick := OnClickPersonalizado;
> > >       end
> > >   Qualquer idéia é bem vinda...
> > >   tks
> > >   Eduardo
> > > 
> > > 
> > > 
> > > 
> > >   -- 
> > >   <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
> > > 
> > >   Para ver as mensagens antigas, acesse:
> > >   http://br.groups.yahoo.com/group/delphi-br/messages
> > > 
> > >   Para falar com o moderador, envie um e-mail para:
> > >   [EMAIL PROTECTED] ou [EMAIL PROTECTED]
> > > 
> > > 
> > > 
> > >         Yahoo! Grupos, um serviço oferecido por: 
> > >           
> > > 
> > > 
> > >
> >
>
------------------------------------------------------------------------------
> > >   Links do Yahoo! Grupos
> > > 
> > >     a.. Para visitar o site do seu grupo na web, acesse:
> > >     http://br.groups.yahoo.com/group/delphi-br/
> > >       
> > >     b.. Para sair deste grupo, envie um e-mail para:
> > >     [EMAIL PROTECTED]
> > >       
> > >     c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos
> > do Serviço do Yahoo!. 
> > > 
> > > 
> > > 
> > > [As partes desta mensagem que não continham texto foram removidas]





-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a