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