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]



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

>
>
> 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-br@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  delphi-br%40yahoogrupos.com.br >
>
> , Marcos Douglas  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




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  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 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  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: 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  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 Marcos Douglas
Olá Eric,
Copiei abaixo, duas de suas mensagens:

2010/7/15 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.


2010/7/15 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.

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


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  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: [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
 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
>> 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>  ,
>>> Fabricio Colombo  escreveu
>>>
>>> 
>>>> O que vc está pretendendo fazer Eric?
>>>>
>>>> Em 14 de julho de 2010 16:02, Mário Guedes 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@ 
>>>>> 
>>>>> [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: [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
escreveu:

>
>
> 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  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@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  delphi-br%40yahoogrupos.com.br >
> > , 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: 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  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: [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  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: [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  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  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  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  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: [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  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: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
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, 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




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

2010-07-15 Por tôpico jalosii
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, 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
>> 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 ,
>>> Fabricio Colombo  escreveu
>>>
>>>   
 O que vc está pretendendo fazer Eric?

 Em 14 de julho de 2010 16:02, Mário Guedes escreveu:
 
> Eu fiz assim:
>
>
>
>   
>>> http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
>>>   
> *José Mário Silva Guedes*
> e-mail: jmarioguedes@ 
>   
> [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: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico eric_developer
isso é muito diferente do que preciso, mesmo assim obrigado.

--- Em delphi-br@yahoogrupos.com.br, 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
> 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 ,
> > Fabricio Colombo  escreveu
> >
> > >
> > > O que vc está pretendendo fazer Eric?
> > >
> > > Em 14 de julho de 2010 16:02, Mário Guedes escreveu:
> >
> > >
> > > >
> > > >
> > > > Eu fiz assim:
> > > >
> > > >
> > > >
> > http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
> > > >
> > > > *José Mário Silva Guedes*
> > > > e-mail: jmarioguedes@ 
> >
> > > >
> > > >
> > > > [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: [delphi-br] MethodAddress retornando NIL

2010-07-15 Por tôpico Fabricio Colombo
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
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 ,
> Fabricio Colombo  escreveu
>
> >
> > O que vc está pretendendo fazer Eric?
> >
> > Em 14 de julho de 2010 16:02, Mário Guedes escreveu:
>
> >
> > >
> > >
> > > Eu fiz assim:
> > >
> > >
> > >
> http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
> > >
> > > *José Mário Silva Guedes*
> > > e-mail: jmariogue...@... 
>
> > >
> > >
> > > [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]





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




Re: [delphi-br] MethodAddress retornando NIL

2010-07-14 Por tôpico Vinicius Santos
Em 14-07-2010 20:44, eric_developer escreveu:
>
>
> Olá Rubem,
> Como eu deixo os métodos do edit, combobox, etc como published ?
>

Não sei se daria certo. Apenas um "parpite".

Faça herança dos componentes da VCL e através de um método published 
utilize ponteiros para acessar as funções diretamente.

O problema é que vc teria que implementar para todos os componentes...
Não sei se a performance ficaria legal neste estilo que vc quer fazer. 
MyCall( edit1, 'Funcao1' );


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

2010-07-14 Por tôpico eric_developer
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, Fabricio Colombo 
 escreveu
>
> O que vc está pretendendo fazer Eric?
> 
> Em 14 de julho de 2010 16:02, Mário Guedes escreveu:
> 
> >
> >
> > Eu fiz assim:
> >
> >
> > http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
> >
> > *José Mário Silva Guedes*
> > e-mail: jmariogue...@... 
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >  
> >
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




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

2010-07-14 Por tôpico eric_developer
Olá Rubem,
Como eu deixo os métodos do edit, combobox, etc como published ?

--- Em delphi-br@yahoogrupos.com.br, Rubem Nascimento da Rocha 
 escreveu
>
> 
> A RTTI permite acesso somente aos elementos (propriedades e métodos) 
> declarados na seção published de um objeto. Escopos de visibilidade abaixo 
> disso (public, protected ou private) não tem como!
> 
>  
> 
> Sds.




Re: [delphi-br] MethodAddress retornando NIL

2010-07-14 Por tôpico Fabricio Colombo
MethodAddress só funciona para métodos da seção published, normalmente
eventos. Ou vc pode utilizar métodos soltos, e obter o ponteiro utilizando o
@. Não conheço outra forma além dessas duas.

procedure Teste;
begin
  ShowMessage('teste');
end;

procedure TForm2.Button1Click(Sender: TObject);
var
   routine : TMethod ;
Begin
   routine.data:= pointer(form2) ;
   routine.Code:= @teste ; // Nome do metodo

   if routine.Code <> nil then
   begin
  ShowMessage('OK');
   end;
end;




Em 14 de julho de 2010 14:04, eric_developer
escreveu:

>
>
> Boa tarde pessoal,
>
> alguem sabe como obter o ponteiro de métodos existentes ? no exemplo, se eu
> criar o método "teste" para o form2, funciona, retornando o ponteiro.
>
> No lugar de form2, usarei componentes edit, combobox, etc e metodos
> existentes.
>
> procedure TForm2.teste ;
> begin
> ShowMessage('OLA');
> end;
>
> procedure TForm2.Button1Click(Sender: TObject);
> var
> routine : TMethod ;
> Begin
>
> routine.data:=pointer(form2) ;
> routine.Code:=Form2.MethodAddress('teste') ; // Nome do metodo
> if routine.Code <> nil then
> begin
> ShowMessage('OK');
> end;
>
> end;
>
> Grato,
> Eric Developer Systems
>
>  
>


[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




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

2010-07-14 Por tôpico Rubem Nascimento da Rocha

A RTTI permite acesso somente aos elementos (propriedades e métodos) declarados 
na seção published de um objeto. Escopos de visibilidade abaixo disso (public, 
protected ou private) não tem como!

 

Sds.
 


To: delphi-br@yahoogrupos.com.br
From: developer.syst...@yahoo.com
Date: Wed, 14 Jul 2010 19:21:27 +
Subject: Re: RES: [delphi-br] MethodAddress retornando NIL

  



Olá José,

o seu exemplo e do about.com, em resumo é o mesmo que postei, funcionando 
somente para os próprios métodos (published), e eu quero testar 
(ponteiro)/chamar métodos do edit, combobox, form, etc, ou seja, irei informar 
o objeto do componente e a string com o nome do método.

Sabe alguma forma ?

Grato,
Eric


  
_
QUER ANEXAR VÁRIAS FOTOS NUM EMAIL? PREPARE-SE PARA O NOVO HOTMAIL. CLIQUE AQUI.
http://www.windowslive.com.br/public/product.aspx/view/1?ocid=Hotmail:Live:Hotmail:Tagline:senDimensao:QUERANEXAR80:-

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



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

2010-07-14 Por tôpico Fabricio Colombo
O que vc está pretendendo fazer Eric?

Em 14 de julho de 2010 16:02, Mário Guedes escreveu:

>
>
> Eu fiz assim:
>
>
> http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
>
> *José Mário Silva Guedes*
> e-mail: jmariogue...@gmail.com 
>
>
> [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




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

2010-07-14 Por tôpico eric_developer
Olá José,

o seu exemplo e do about.com, em resumo é o mesmo que postei, funcionando 
somente para os próprios métodos (published), e eu quero testar 
(ponteiro)/chamar métodos do edit, combobox, form, etc, ou seja, irei informar 
o objeto do componente e a string com o nome do método.

Sabe alguma forma ?

Grato,
Eric

--- Em delphi-br@yahoogrupos.com.br, Mário Guedes  escreveu
>
> Eu fiz assim:
> 
> http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html
> 
> *José Mário Silva Guedes*
> e-mail: jmariogue...@...
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




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

2010-07-14 Por tôpico Mário Guedes
Eu fiz assim:

http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html

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


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



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

2010-07-14 Por tôpico eric_developer
eu tinha olhado, mas postei aqui para saber se há "alguma forma" de fazer.
Alguém conhece ?

--- Em delphi-br@yahoogrupos.com.br, Rubem Rocha  escreveu
>
> Olha o help! MethodAddress só funciona para métods published!
> 
> Sds.
> 
>  
> 
> De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
> nome de eric_developer
> Enviada em: quarta-feira, 14 de julho de 2010 13:04
> Para: delphi-br@yahoogrupos.com.br
> Assunto: [delphi-br] MethodAddress retornando NIL
> 
>  
> 
>   
> 
> Boa tarde pessoal,
> 
> alguem sabe como obter o ponteiro de métodos existentes ? no exemplo, se eu
> criar o método "teste" para o form2, funciona, retornando o ponteiro.
> 
> No lugar de form2, usarei componentes edit, combobox, etc e metodos
> existentes.
> 
> procedure TForm2.teste ;
> begin
> ShowMessage('OLA');
> end;
> 
> procedure TForm2.Button1Click(Sender: TObject);
> var
> routine : TMethod ;
> Begin
> 
> routine.data:=pointer(form2) ;
> routine.Code:=Form2.MethodAddress('teste') ; // Nome do metodo
> if routine.Code <> nil then
> begin
> ShowMessage('OK');
> end;
> 
> end;
> 
> Grato,
> Eric Developer Systems
> 
>  
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




RES: [delphi-br] MethodAddress retornando NIL

2010-07-14 Por tôpico Rubem Rocha
Olha o help! MethodAddress só funciona para métods published!

Sds.

 

De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em
nome de eric_developer
Enviada em: quarta-feira, 14 de julho de 2010 13:04
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] MethodAddress retornando NIL

 

  

Boa tarde pessoal,

alguem sabe como obter o ponteiro de métodos existentes ? no exemplo, se eu
criar o método "teste" para o form2, funciona, retornando o ponteiro.

No lugar de form2, usarei componentes edit, combobox, etc e metodos
existentes.

procedure TForm2.teste ;
begin
ShowMessage('OLA');
end;

procedure TForm2.Button1Click(Sender: TObject);
var
routine : TMethod ;
Begin

routine.data:=pointer(form2) ;
routine.Code:=Form2.MethodAddress('teste') ; // Nome do metodo
if routine.Code <> nil then
begin
ShowMessage('OK');
end;

end;

Grato,
Eric Developer Systems

 



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



[delphi-br] MethodAddress retornando NIL

2010-07-14 Por tôpico eric_developer
Boa tarde pessoal,

alguem sabe como obter o ponteiro de métodos existentes ? no exemplo, se eu 
criar o método "teste" para o form2, funciona, retornando o ponteiro.

No lugar de form2, usarei componentes edit, combobox, etc e metodos existentes.

procedure TForm2.teste ;
begin
  ShowMessage('OLA');
end;


procedure TForm2.Button1Click(Sender: TObject);
var
   routine : TMethod ;
Begin

   routine.data:=pointer(form2) ;
   routine.Code:=Form2.MethodAddress('teste') ; // Nome do metodo
   if routine.Code <> nil then
  begin
  ShowMessage('OK');
  end;

end;

Grato,
Eric Developer Systems