RES: RES: RES: RES: [delphi-br] MethodAddress retornando NIL
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
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
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
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]