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: 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




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]



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]