A outra dúvida que tinha sobrado (espero que seja a última)
era como setar uma propriedade para nil.
É assim:

if IsPublishedProp(Components[i], 'DataSource') then
  SetObjectProp(Components[i], 'DataSource', nil);

Assunto encerrado (eu acho)


--- Em delphi-br@yahoogrupos.com.br, "Carlos Eduardo L. de Souza"
<[EMAIL PROTECTED]> escreveu
> 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