Se você não define um local apropriado para o método ou propriedade, ele
será por default declarado como published, em se tratando de componentes.
Por isso que o MethodAddress funcionou!

 

No caso de classes normais, sem serem descendentes de TPersistent ou
TComponent, a declaração default é como public.

 

Sds.

 

De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
nome de jalosii
Enviada em: quinta-feira, 15 de julho de 2010 08:02
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: RES: [delphi-br] MethodAddress retornando NIL

 

  

Implementei sem problemas na semana passada em um sistema meu.

Qual o real problema que vc está tendo?

Sua procedure seria assim:

unit Unit2;
interface
uses ...;
type
TForm2 = class(TForm)
...
private
procedure ExecMethod(NoObjecto: TObject; Nome_Metodo: String);
...
var
Form2: TForm2;
type //tem que ser aqui, não sei explicar por que, mas se por acima do 
form no mesmo type causa erro
TExec = procedure of object;
...

procedure TForm2.ExecMethod(NoObjecto: TObject; Nome_Metodo: String);
var
Rotina: TMethod;
Exec: TExec;
begin
Rotina.Data := Pointer(NoObjeto);
Rotina.Code := NoObjeto.MethodAddress(Nome_Metodo);//Aqui que causa 
erro pra vc?
if not Assigned(Rotina.Code) then
exit;
Exec := TExec(Rotina);
Exec;
end;

...

O que eu percebi é se o método que vc quer chamar nã estiver nas 
declarações do FORM no lugar certo, o MethodAddress não encontra, tentei 
por em private e não achou, troquei o local da declaração pra acima do 
private e funcionou, no meu caso chamo uma procedure de outro form, pra 
que nesse não tenha acesso a banco de dados e está funcionando.

Verifique teu código e se tiver mais erros nos avise pra ver se pudemos 
lhe ajudar.

Alosi
DigitalSystem
Bento Gonçalves-RS

eric_developer escreveu:
> isso é muito diferente do que preciso, mesmo assim obrigado.
>
> --- Em delphi-br@yahoogrupos.com.br
<mailto:delphi-br%40yahoogrupos.com.br> , Fabricio Colombo
<fabricio.colombo....@...> escreveu
> 
>> Para o método SetFocus, seria melhor vc chamar direto o método. Por
exemplo,
>> se vc estiver em um form, bastaria chamar
>>
>> Self.FocusControl(edit1)
>>
>> ou vc cria um método seu
>>
>> procedure TForm1.SetFocusComponent(AComponent: TComponent);
>> begin
>> if AComponent is TWinControl then
>> TWinControl(AComponent).SetFocus;
>> end;
>>
>> Que outros métodos vc precisa invocar? Praticamente todos os métodos
comuns
>> entre os componentes visuais, estão presentes em TControl e TWinControl,
que
>> são as classes base.
>>
>>
>>
>> Em 14 de julho de 2010 20:49, eric_developer
>> <developer.syst...@...>escreveu:
>>
>> 
>>> executar métodos, irei passar para minha função, o objeto e a string com
o
>>> nome do método, exemplo:
>>>
>>> myCallMethod( edit1, 'SETFOCUS' ) ;
>>>
>>> --- Em delphi-br@yahoogrupos.com.br
<mailto:delphi-br%40yahoogrupos.com.br>  <delphi-br%40yahoogrupos.com.br>,
>>> Fabricio Colombo <fabricio.colombo.mva@> escreveu
>>>
>>> 
>>>> O que vc está pretendendo fazer Eric?
>>>>
>>>> Em 14 de julho de 2010 16:02, Mário Guedes <jmarioguedes@>escreveu:
>>>> 
>>>>> Eu fiz assim:
>>>>>
>>>>>
>>>>>
>>>>> 
>>>
http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nom
e.html
>>> 
>>>>> *José Mário Silva Guedes*
>>>>> e-mail: jmarioguedes@ <jmarioguedes%40gmail.com>
>>>>> 
>>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>>
>>>>>
>>>>>
>>>>> 
>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>
>>>> 
>>> 
>>>
>>> 
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>> 
>
>
>
>



 



[As partes desta mensagem que não continham texto foram removidas]

Responder a