Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-16 Por tôpico Mário Guedes
Olá Eric, meu colega topou com este link e acho que se aproxima da sua
necessidade.

http://blog.marcocantu.com/blog/dynamic_methods_delphi_part3.html

Eu não analisei mais a fundo e não tenho a certeza se é disso que você
precisa.

Boa sorte!

*José Mário Silva Guedes*
e-mail: jmariogue...@gmail.com


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



RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Rubem Rocha
Eric, se você pensa em implementar algum tipo de automação em seus
aplicativos, envolvendo a manipulação de elementos nele contidos, sugiro
você pesquisar sobre ferramentas de scripting para Delphi. Uma boa
alternativa, free e de código fonte aberto, é o PascalScript, da RemObjects
(http://www.remobjects.com/ps).

 

Caso não seja essa a sua necessidade, explique-a melhor, com riqueza de
detalhes, para que possamos discutir uma alternativa técnica para tal.

 

Sds.

 

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

 

  

Alosi,

Desta forma eu também já tinha encontrado na internet e na documentação.
Veja que se você usar sua rotina como exemplifiquei anteriormente, não
funcionará:

ExecMethod( edit1, 'SETFOCUS' )

--- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
, jalosii jalo...@... escreveu

 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

 



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



Re: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
Colega, não é executar Scripts, por favor veja o que ja postamos.

o pequeno e completo exemplo que foi postado, esta bem claro e fácil, é uma 
pena que há restrições e não consegui montar nada equivalente.

O que faço facilmente em outra linguagem estruturada com poucos recursos OOP, 
parece ser mosca branca de zóio verde ou extravagante demais em Delphi rsrs.

Só me resta aguardar, tentar outros caminhos ou desistir disso, o que acho tão 
simples, é um mistérios aos demais. Fiz uma pesquisa aqui, achei um colega 
querendo o mesmo (tópico de uns 2 anos), entrei em contato com ele e até hoje 
não conseguiu.

--- Em delphi-br@yahoogrupos.com.br, Rubem Rocha rubem.ro...@... escreveu

 Eric, se você pensa em implementar algum tipo de automação em seus
 aplicativos, envolvendo a manipulação de elementos nele contidos, sugiro
 você pesquisar sobre ferramentas de scripting para Delphi. Uma boa
 alternativa, free e de código fonte aberto, é o PascalScript, da RemObjects
 (http://www.remobjects.com/ps).
 
  
 
 Caso não seja essa a sua necessidade, explique-a melhor, com riqueza de
 detalhes, para que possamos discutir uma alternativa técnica para tal.
 
  
 
 Sds.
 
  
 
 De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
 nome de eric_developer
 Enviada em: quinta-feira, 15 de julho de 2010 12:07
 Para: delphi-br@yahoogrupos.com.br
 Assunto: Re: RES: [delphi-br] MethodAddress retornando NIL
 
  
 
   
 
 Alosi,
 
 Desta forma eu também já tinha encontrado na internet e na documentação.
 Veja que se você usar sua rotina como exemplifiquei anteriormente, não
 funcionará:
 
 ExecMethod( edit1, 'SETFOCUS' )
 
 --- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
 , jalosii jalosii@ escreveu
 
  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
 
  
 
 
 
 [As partes desta mensagem que não continham texto foram removidas]





RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Rubem Rocha
Se você quer usar algo parecido com macro-substituição, o Delphi não dá
suporte para isso, porquê simplesmente isso não é previsto na sua
arquitetura. Em linguagens interpretadas, como o PHP, ou
pseudo-interpretadas, como o (ainda vivo) Clipper, isso é possível (ou seja,
pode ser ‘mamão com açúcar’, pois a arquitetura dessas linguagens assim o
permite.

 

Eu entendi o seu objetivo, por isso mesmo que sugeri uma ferramenta para
scripting, por ser mais fácil nessa abordagem fazer tais chamadas dinâmicas,
visto que um script pode ter código que pode ser criado e atribuído aos
eventos de um objeto em tempo de execução e, ainda, poder ser chamado
facilmente pelo seu nome.

 

Sds.

 

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

 

  

Colega, não é executar Scripts, por favor veja o que ja postamos.

o pequeno e completo exemplo que foi postado, esta bem claro e fácil, é uma
pena que há restrições e não consegui montar nada equivalente.

O que faço facilmente em outra linguagem estruturada com poucos recursos
OOP, parece ser mosca branca de zóio verde ou extravagante demais em Delphi
rsrs.

Só me resta aguardar, tentar outros caminhos ou desistir disso, o que acho
tão simples, é um mistérios aos demais. Fiz uma pesquisa aqui, achei um
colega querendo o mesmo (tópico de uns 2 anos), entrei em contato com ele e
até hoje não conseguiu.

--- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
, Rubem Rocha rubem.ro...@... escreveu

 Eric, se você pensa em implementar algum tipo de automação em seus
 aplicativos, envolvendo a manipulação de elementos nele contidos, sugiro
 você pesquisar sobre ferramentas de scripting para Delphi. Uma boa
 alternativa, free e de código fonte aberto, é o PascalScript, da
RemObjects
 (http://www.remobjects.com/ps).
 
 
 
 Caso não seja essa a sua necessidade, explique-a melhor, com riqueza de
 detalhes, para que possamos discutir uma alternativa técnica para tal.
 
 
 
 Sds.
 
 
 
 De: delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
[mailto:delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
] Em
 nome de eric_developer
 Enviada em: quinta-feira, 15 de julho de 2010 12:07
 Para: delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br

 Assunto: Re: RES: [delphi-br] MethodAddress retornando NIL
 
 
 
 
 
 Alosi,
 
 Desta forma eu também já tinha encontrado na internet e na documentação.
 Veja que se você usar sua rotina como exemplifiquei anteriormente, não
 funcionará:
 
 ExecMethod( edit1, 'SETFOCUS' )
 
 --- Em delphi-br@yahoogrupos.com.br
mailto:delphi-br%40yahoogrupos.com.br
mailto:delphi-br%40yahoogrupos.com.br
 , jalosii jalosii@ escreveu
 
  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
 



 



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



Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
Errado Rubem, quando me referi que faço (não é comum outros usarem OOP no nível 
que utilizo) em outra linguagem, não é via macro-substituição, e conforme o 
caso isso é um péssimo hábito, mas tudo isso não importa.
Ficar nas teorias disso ou aquilo não vamos sair do lugar.

Delphi é uma linguagem que usa muito OOP, o que quero é uma pequena manipulação 
que já esta no objeto, não considero nada de radical para a linguagem fazer, 
veja que eu estaria passando o objeto o que não tornaria o processo as cegas, 
não é caso para scripts.

Enfim, vamos deixar isso pendente, pois mais de 2000 maneiras de não 
conseguir fazer é facil, o objetivo é uma que ajude a resolver.

Grato,
Eric

--- Em delphi-br@yahoogrupos.com.br, Rubem Rocha rubem.ro...@... escreveu

 Se você quer usar algo parecido com macro-substituição, o Delphi não dá
 suporte para isso, porquê simplesmente isso não é previsto na sua
 arquitetura. Em linguagens interpretadas, como o PHP, ou
 pseudo-interpretadas, como o (ainda vivo) Clipper, isso é possível (ou seja,
 pode ser `mamão com açúcar', pois a arquitetura dessas linguagens assim o
 permite.
 
  
 
 Eu entendi o seu objetivo, por isso mesmo que sugeri uma ferramenta para
 scripting, por ser mais fácil nessa abordagem fazer tais chamadas dinâmicas,
 visto que um script pode ter código que pode ser criado e atribuído aos
 eventos de um objeto em tempo de execução e, ainda, poder ser chamado
 facilmente pelo seu nome.
 
  
 
 Sds.




RES: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Sérgio T . Uetanabaro
Eric,

 

Note que a função “SetFocus” do TWinControl é PUBLIC e não PUBLISHED. Por
isso o METHODADDRESS não vai achar o método na chamada ExecMethod( edit1,
'SETFOCUS' )

 

[]´s

 

Sergio Uetanabaro

 

 

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

 

  

Errado Rubem, quando me referi que faço (não é comum outros usarem OOP no
nível que utilizo) em outra linguagem, não é via macro-substituição, e
conforme o caso isso é um péssimo hábito, mas tudo isso não importa.
Ficar nas teorias disso ou aquilo não vamos sair do lugar.

Delphi é uma linguagem que usa muito OOP, o que quero é uma pequena
manipulação que já esta no objeto, não considero nada de radical para a
linguagem fazer, veja que eu estaria passando o objeto o que não tornaria o
processo as cegas, não é caso para scripts.

Enfim, vamos deixar isso pendente, pois mais de 2000 maneiras de não
conseguir fazer é facil, o objetivo é uma que ajude a resolver.

Grato,
Eric

--- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
, Rubem Rocha rubem.ro...@... escreveu

 Se você quer usar algo parecido com macro-substituição, o Delphi não dá
 suporte para isso, porquê simplesmente isso não é previsto na sua
 arquitetura. Em linguagens interpretadas, como o PHP, ou
 pseudo-interpretadas, como o (ainda vivo) Clipper, isso é possível (ou
seja,
 pode ser `mamão com açúcar', pois a arquitetura dessas linguagens assim o
 permite.
 
 
 
 Eu entendi o seu objetivo, por isso mesmo que sugeri uma ferramenta para
 scripting, por ser mais fácil nessa abordagem fazer tais chamadas
dinâmicas,
 visto que um script pode ter código que pode ser criado e atribuído aos
 eventos de um objeto em tempo de execução e, ainda, poder ser chamado
 facilmente pelo seu nome.
 
 
 
 Sds.





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



Re: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Fabricio Colombo
Mais até agora vc não disse qual o problema que vc quer resolver. Qual a sua
necessidade? Por que vc precisa que os métodos sejam executados pelo nome?

Em 15 de julho de 2010 14:22, eric_developer
developer.syst...@yahoo.comescreveu:



 Colega, não é executar Scripts, por favor veja o que ja postamos.

 o pequeno e completo exemplo que foi postado, esta bem claro e fácil, é uma
 pena que há restrições e não consegui montar nada equivalente.

 O que faço facilmente em outra linguagem estruturada com poucos recursos
 OOP, parece ser mosca branca de zóio verde ou extravagante demais em Delphi
 rsrs.

 Só me resta aguardar, tentar outros caminhos ou desistir disso, o que acho
 tão simples, é um mistérios aos demais. Fiz uma pesquisa aqui, achei um
 colega querendo o mesmo (tópico de uns 2 anos), entrei em contato com ele e
 até hoje não conseguiu.


 --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br,
 Rubem Rocha rubem.ro...@... escreveu
 
  Eric, se você pensa em implementar algum tipo de automação em seus
  aplicativos, envolvendo a manipulação de elementos nele contidos, sugiro
  você pesquisar sobre ferramentas de scripting para Delphi. Uma boa
  alternativa, free e de código fonte aberto, é o PascalScript, da
 RemObjects
  (http://www.remobjects.com/ps).
 
 
 
  Caso não seja essa a sua necessidade, explique-a melhor, com riqueza de
  detalhes, para que possamos discutir uma alternativa técnica para tal.
 
 
 
  Sds.
 
 
 
  De: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br[mailto:
 delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br] Em
  nome de eric_developer
  Enviada em: quinta-feira, 15 de julho de 2010 12:07
  Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
  Assunto: Re: RES: [delphi-br] MethodAddress retornando NIL
 
 
 
 
 
  Alosi,
 
  Desta forma eu também já tinha encontrado na internet e na documentação.
  Veja que se você usar sua rotina como exemplifiquei anteriormente, não
  funcionará:
 
  ExecMethod( edit1, 'SETFOCUS' )
 
  --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.brmailto:
 delphi-br%40yahoogrupos.com.br delphi-br%2540yahoogrupos.com.br
  , jalosii jalosii@ escreveu
  
   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
 
 
 
 
 
  [As partes desta mensagem que não continham texto foram removidas]
 

  



[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:
delphi-br-ow...@yahoogrupos.com.br
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:
delphi-br-unsubscr...@yahoogrupos.com.br

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




RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Rubem Rocha
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]



Re: RES: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
Sergio,
isso já sabemos, passei um exemplo prático que obviamente não funciona e para 
que possam entender e alguem me sugerir uma alternativa que funcione para o 
que eu quero, entendeu ??

--- Em delphi-br@yahoogrupos.com.br, Sérgio T. Uetanabaro s...@... escreveu

 Eric,
 
  
 
 Note que a função SetFocus do TWinControl é PUBLIC e não PUBLISHED. Por
 isso o METHODADDRESS não vai achar o método na chamada ExecMethod( edit1,
 'SETFOCUS' )
 
  
 
 []´s
 
  
 
 Sergio Uetanabaro




Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Marcos Douglas
Olá Eric,
Copiei abaixo, duas de suas mensagens:

2010/7/15 eric_developer developer.syst...@yahoo.com:
 Colega, não é executar Scripts, por favor veja o que ja postamos.

 o pequeno e completo exemplo que foi postado, esta bem claro e fácil, é uma 
 pena que há restrições e não consegui montar nada equivalente.

 O que faço facilmente em outra linguagem estruturada com poucos recursos OOP, 
 parece ser mosca branca
 de zóio verde ou extravagante demais em Delphi rsrs.

 Só me resta aguardar, tentar outros caminhos ou desistir disso, o que acho 
 tão simples, é um mistérios aos
 demais. Fiz uma pesquisa aqui, achei um colega querendo o mesmo (tópico de 
 uns 2 anos), entrei em contato com ele e até hoje não conseguiu.


2010/7/15 eric_developer developer.syst...@yahoo.com:
 Errado Rubem, quando me referi que faço (não é comum outros usarem OOP no 
 nível que utilizo) em outra linguagem,
 não é via macro-substituição, e conforme o caso isso é um péssimo hábito, mas 
 tudo isso não importa.
 Ficar nas teorias disso ou aquilo não vamos sair do lugar.

 Delphi é uma linguagem que usa muito OOP, o que quero é uma pequena 
 manipulação que já esta no objeto,
 não considero nada de radical para a linguagem fazer, veja que eu estaria 
 passando o objeto o que não tornaria
 o processo as cegas, não é caso para scripts.

 Enfim, vamos deixar isso pendente, pois mais de 2000 maneiras de não 
 conseguir fazer é facil, o objetivo é uma que ajude a resolver.

Primeiramente sua resposta: NÃO dá pra fazer.

Agora alguns comentários:
Não fiquei comparando linguagens, pois cada uma tem seus prós e
contras. Então não diga é fácil em outras linguagens. Por exemplo é
fácil, em outras linguagens, codificar como no Delphi? Não. Bem, você
já entendeu...

O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um pró da
linguagem, em vários problemas... mas também pode ser um contra
quando você tenta fazer algoritmos com chamadas abstratas e/ou
dinâmicas.

A única possibilidade de fazer o que você quer, é utilizando métodos
published, que já foi muito comentado por várias pessoas aqui. Não dá
pra fazer chamadas a métodos utilizando somente uma string
representando seu nome; isso vai contra a filosofia da linguagem,
contra a sua base e razão de existir.
Você consegue fazer isso em outras linguagens (vc não falou de nenhuma
em particular) como, por exemplo, em Java. No entanto, veja que esta
prática quebra o encapsulamento (um dos pilares da OOP). O mesmo
podemos dizer de Ruby, Python, etc...

Sugiro mais ATENÇÃO ao que o Sr. Fabrício falou no email abaixo:

2010/7/14 Fabricio Colombo fabricio.colombo@gmail.com:
 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.

...não é o que vc quer (lembre-se que não é possível o que vc quer
fazer com Delphi) mas chega muito perto. Em vez de vc tentar fazer
chamadas à métodos através de uma string, tente saber qual o tipo de
objeto vc está trabalhando (ex: obj is TEdit). Assim vc pode fazer
chamadas à métodos comum entre eles, utilizando as classes ancestrais.


Cordialmente,
MD


RES: RES: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Sérgio T . Uetanabaro
OK Eric. 

Eu entendo que a chamada dinâmica é um recurso que podemos utilizar em
vários casos mas teremos limitações qto ao tipo de declaração do método o
que complica ao ser utilizado nos métodos de componentes padrão do delphi.
Se o problema for realizar a chamada proposta então sugiro a vc utilizar
essas chamada em componentes derivados para que publiquem (PUBLISHED) os
métodos que você quer utilizar. Nesse caso você terá que se atentar em
chamar somente métodos com o devido atributo. Outra forma que posso sugerir
é o uso de scripters e adaptar as chamadas necessárias para isso. Scripters
podem te dar uma grande mão neste ponto pq você não ficará limitado as
chamadas de métodos PUBLISHED. No caso de scripter uma chamada seria algo do
tipo:

 

Form.RodarScript(‘edit.SetFocus;’);

 

Logicamente tem outros detalhes mas chega bem perto daquilo que você deseja
fazer, acredito eu.  Somente descarte scripter caso vc precise de
permformance na operação.

Já busquei várias alternativas para chamadas dinâmicas. Já sofri bastante
com esse tipo de problema pq tive que implementar chamadas de métodos pelo
nome e esses métodos podiam ter parâmetros. Caso ainda não seja isso, nos
explique o problema para que possamos tentar te auxiliar.

 

 

Sergio Uetanabaro

 

 

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

 

  

Sergio,
isso já sabemos, passei um exemplo prático que obviamente não funciona e
para que possam entender e alguem me sugerir uma alternativa que funcione
para o que eu quero, entendeu ??

--- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
, Sérgio T. Uetanabaro s...@... escreveu

 Eric,
 
 
 
 Note que a função SetFocus do TWinControl é PUBLIC e não PUBLISHED. Por
 isso o METHODADDRESS não vai achar o método na chamada ExecMethod( edit1,
 'SETFOCUS' )
 
 
 
 []´s
 
 
 
 Sergio Uetanabaro





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



Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
Marcos, espero que esteja bem errado e dê para fazer o que preciso.

Sugiro muito cuidado com certas afirmações NÃO É POSSIVEL ..., mesmo se for 
um expert, assim você automaticamente cria diversos limites a si mesmo. Teve 
situações parecidas onde um colega pediu algo e outro muito experiente e 
talentoso, afirmou o mesmo, e eu postei a solução (código) devidamente testada.

Devido a minha experiência, acho mais fácil sempre deduzir que é possível mesmo 
ao que me seja totalmente alheio. Um colega disse ser possível, mas não 
informou como rsrs passou uma tonelada de vídeos para download, vou ver se 
encontro a resposta mágica. Um outro passou o código não posso testar no D2009, 
porque é para Delphi 2010 rsrs

Tedit(sender).setfocus ou semelhante, não é o que desejo, até já criei algo 
parecido e vou substituir.

Grato,
Eric Developer Systems

--- Em delphi-br@yahoogrupos.com.br, Marcos Douglas m...@... escreveu

 Olá Eric,
 Copiei abaixo, duas de suas mensagens:
 ...
 Primeiramente sua resposta: NÃO dá pra fazer.
 
 
 O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um pró da
 linguagem, em vários problemas... mas também pode ser um contra
 quando você tenta fazer algoritmos com chamadas abstratas e/ou
 dinâmicas.
 
 A única possibilidade de fazer o que você quer, é utilizando métodos
 published, que já foi muito comentado por várias pessoas aqui. Não dá
 pra fazer chamadas a métodos utilizando somente uma string
 representando seu nome; isso vai contra a filosofia da linguagem,
 contra a sua base e razão de existir.
 Você consegue fazer isso em outras linguagens (vc não falou de nenhuma
 em particular) como, por exemplo, em Java. No entanto, veja que esta
 prática quebra o encapsulamento (um dos pilares da OOP). O mesmo
 podemos dizer de Ruby, Python, etc...
 
 Cordialmente,
 MD





RES: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Sérgio T . Uetanabaro
Uma coisa que o Marcos disse é verdade. Chamadas de funções dinâmicas
somente podem ser feitas em métodos PUBLISHED pois somente com esse marcador
o compilador coloca na VMT da classe as informações do método. Soluções via
RTTI somente com published.

 

[]´s

 

Sergio Uetanabaro

 

 

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

 

  

Marcos, espero que esteja bem errado e dê para fazer o que preciso.

Sugiro muito cuidado com certas afirmações NÃO É POSSIVEL ..., mesmo se
for um expert, assim você automaticamente cria diversos limites a si mesmo.
Teve situações parecidas onde um colega pediu algo e outro muito experiente
e talentoso, afirmou o mesmo, e eu postei a solução (código) devidamente
testada.

Devido a minha experiência, acho mais fácil sempre deduzir que é possível
mesmo ao que me seja totalmente alheio. Um colega disse ser possível, mas
não informou como rsrs passou uma tonelada de vídeos para download, vou ver
se encontro a resposta mágica. Um outro passou o código não posso testar no
D2009, porque é para Delphi 2010 rsrs

Tedit(sender).setfocus ou semelhante, não é o que desejo, até já criei algo
parecido e vou substituir.

Grato,
Eric Developer Systems

--- Em delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
, Marcos Douglas m...@... escreveu

 Olá Eric,
 Copiei abaixo, duas de suas mensagens:
 ...
 Primeiramente sua resposta: NÃO dá pra fazer.
 
 
 O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um pró da
 linguagem, em vários problemas... mas também pode ser um contra
 quando você tenta fazer algoritmos com chamadas abstratas e/ou
 dinâmicas.
 
 A única possibilidade de fazer o que você quer, é utilizando métodos
 published, que já foi muito comentado por várias pessoas aqui. Não dá
 pra fazer chamadas a métodos utilizando somente uma string
 representando seu nome; isso vai contra a filosofia da linguagem,
 contra a sua base e razão de existir.
 Você consegue fazer isso em outras linguagens (vc não falou de nenhuma
 em particular) como, por exemplo, em Java. No entanto, veja que esta
 prática quebra o encapsulamento (um dos pilares da OOP). O mesmo
 podemos dizer de Ruby, Python, etc...
 
 Cordialmente,
 MD






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



Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Fabricio Colombo
Se não for published, não dá pra recuperar o nome.

Dá uma pesquisada sobre VMT (Virtual Method Table). O delphi armazena a
quantidade de métodos virtuais e os ponteiros dos respectivos métodos nessa
tabela, mais o nome do método em si, só se estiver no published.

Na unit JclSysUtils.pas da JVCL tem os métodos:
  function GetVirtualMethodCount(AClass: TClass): Integer;
  function GetVirtualMethod(AClass: TClass; const Index: Integer): Pointer;

Além desses, tem:

type
  PMethodEntry = ^TMethodEntry;
  TMethodEntry = packed record
EntrySize: Word;
Address: Pointer;
Name: ShortString;
  end;

  PMethodTable = ^TMethodTable;
  TMethodTable = packed record
Count: Word;
FirstEntry: TMethodEntry;
   {Entries: array [1..65534] of TMethodEntry;}
  end;

function GetMethodTable(AClass: TClass): PMethodTable;
function GetMethodEntry(MethodTable: PMethodTable; Index: Integer):
PMethodEntry;

Mais o PMethodTable, por onde é possível assessar o PMethodEntry.Name, só
retorna os métodos published.

Faça teste e procure sobre VMT(Virtual Method Table)

Em 15 de julho de 2010 17:24, Sérgio T. Uetanabaro
s...@allbras.com.brescreveu:



 Uma coisa que o Marcos disse é verdade. Chamadas de funções dinâmicas
 somente podem ser feitas em métodos PUBLISHED pois somente com esse
 marcador
 o compilador coloca na VMT da classe as informações do método. Soluções via
 RTTI somente com published.

 []´s


 Sergio Uetanabaro

 De: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br [mailto:
 delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br] Em
 nome de eric_developer
 Enviada em: quinta-feira, 15 de julho de 2010 17:13

 Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
 Assunto: Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL


 Marcos, espero que esteja bem errado e dê para fazer o que preciso.

 Sugiro muito cuidado com certas afirmações NÃO É POSSIVEL ..., mesmo se
 for um expert, assim você automaticamente cria diversos limites a si mesmo.
 Teve situações parecidas onde um colega pediu algo e outro muito experiente
 e talentoso, afirmou o mesmo, e eu postei a solução (código) devidamente
 testada.

 Devido a minha experiência, acho mais fácil sempre deduzir que é possível
 mesmo ao que me seja totalmente alheio. Um colega disse ser possível, mas
 não informou como rsrs passou uma tonelada de vídeos para download, vou ver
 se encontro a resposta mágica. Um outro passou o código não posso testar no
 D2009, porque é para Delphi 2010 rsrs

 Tedit(sender).setfocus ou semelhante, não é o que desejo, até já criei algo
 parecido e vou substituir.

 Grato,
 Eric Developer Systems

 --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.brmailto:
 delphi-br%40yahoogrupos.com.br delphi-br%2540yahoogrupos.com.br

 , Marcos Douglas m...@... escreveu
 
  Olá Eric,
  Copiei abaixo, duas de suas mensagens:
  ...
  Primeiramente sua resposta: NÃO dá pra fazer.
 
 
  O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um pró da
  linguagem, em vários problemas... mas também pode ser um contra
  quando você tenta fazer algoritmos com chamadas abstratas e/ou
  dinâmicas.
 
  A única possibilidade de fazer o que você quer, é utilizando métodos
  published, que já foi muito comentado por várias pessoas aqui. Não dá
  pra fazer chamadas a métodos utilizando somente uma string
  representando seu nome; isso vai contra a filosofia da linguagem,
  contra a sua base e razão de existir.
  Você consegue fazer isso em outras linguagens (vc não falou de nenhuma
  em particular) como, por exemplo, em Java. No entanto, veja que esta
  prática quebra o encapsulamento (um dos pilares da OOP). O mesmo
  podemos dizer de Ruby, Python, etc...
 
  Cordialmente,
  MD
 

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

  



[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:
delphi-br-ow...@yahoogrupos.com.br
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:
delphi-br-unsubscr...@yahoogrupos.com.br

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