Ir para conteúdo
Fórum Script Brasil
  • 0

Calculo


Noriken

Pergunta

12 respostass a esta questão

Posts Recomendados

  • 0

Hummm... eu *acho* que ele quer dizer colocar algo como "(5*3)/2+20" na textbox e o VB efetuar o cálculo a partir da string. Se for o caso, eu já fiz isso de quatro maneiras diferentes:

1 - Criando minha própria função para percorrer a string e fazer os cálculos

2 - Utilizando o método Eval do Microsoft Script Control

3 - Utilizando a função EbExecuteLine da DLL do VBA

4 - Criando um objeto Python.Interpreter e passando a conta para ele fazer

As mais práticas com certeza são a segunda e quarta. A primeira foi uma tarefa realmente árdua (porque na época eu ainda não conhecia a Notação Polonesa) e a terceira demandou um certo tempo até descobrir como obter o valor (a variável utilizada dentro do código deve ser pública).

Ok? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

1 - esse tudo bem... mas o que é esse negocio de notacao polonesa???

2 - esse eu não conhecia, mas agora que c falou, adicionei o componente, e vi que é muito facil, pra que serve exatamente esse Microsoft Script Control, ele executa qualquer codigo que eu passar pra ele em formato string?

3 - esse também tudo bem... não sei usar essa funcao, mas se eu procurar por ai, devo achar alguma coisa...

4 - o que seria isso? eu teria que criar tipo um programa em python??

bom, pra falar a verdade, depois de ter visto o que faz esse nº 2, não vejo onde os outros poderiam ser mais praticos.

Link para o comentário
Compartilhar em outros sites

  • 0

1 - esse tudo bem... mas o que é esse negocio de notacao polonesa???

Dê uma olhada aqui: http://en.wikipedia.org/wiki/Polish_notation

Tem a versão em Português também, mas não está completa.

2 - esse eu não conhecia, mas agora que c falou, adicionei o componente, e vi que é muito facil, pra que serve exatamente esse Microsoft Script Control, ele executa qualquer codigo que eu passar pra ele em formato string?

Ele executa qualquer código VBScript (e acho que já JavaScript também) que você passar para ele (o que inclui expressões para cálculo).

3 - esse também tudo bem... não sei usar essa funcao, mas se eu procurar por ai, devo achar alguma coisa...

Sim, acha. Dê uma olhada na terceira pergunta do usuário e na resposta que tem lá embaixo nesta página: http://www.codecomments.com/archive293-2004-7-243822.html

4 - o que seria isso? eu teria que criar tipo um programa em python??

Não, não. Possuindo o Python e a extensão PyWin32 instalada, você poderia fazer o seguinte no VB...

set py = CreateObject("Python.Interpreter")
valor = py.Eval("(5*3)/2+20")
msgbox valor

... o quê, na minha opinião, também é bastante prático. E é possível executar quaisquer outros códigos em Python desta maneira (algumas, como instruções, requerem o uso do método Exec ao invés de Eval). É desta maneira que eu desenvolvia sistemas híbridos de VB e Python (algumas rotinas eram criadas neste último e utilizadas no primeiro).

bom, pra falar a verdade, depois de ter visto o que faz esse nº 2, não vejo onde os outros poderiam ser mais praticos.

De fato, o ScriptControl é bastante prático. Mas, a solução em Python eu também acho que é (além de ter a vantagem de disponibilizar todo o poderio de Python para a sua aplicação - mas, é claro, isso é um "extra" já que a questão aqui é como desenvolver a fórmula, o que o ScriptControl faz muito bem também).

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

legal, valeu pela explicacao.

1 - esse tudo bem... mas o que é esse negocio de notacao polonesa???

Dê uma olhada aqui: http://en.wikipedia.org/wiki/Polish_notation

Tem a versão em Português também, mas não está completa.

cara, você quis fazer uma funcao que interpretasse a notacao polonesa tipo pra treinar logica, porque queria fazer uma funcao bem completa, ou porque você tinha que entregar o programa pra alguém, alguma coisa assim? porque tipo, nem o eval do script control consegue fazer as contas que tavam na wikipedia. não entendi exatamente, porque tipo, se eu fizer uma funcao que executa uma conta de uma string exatamente igualzinha ao eval, não tenho necessidade de usar esse negocio de notacao polonesa.

3 - esse também tudo bem... não sei usar essa funcao, mas se eu procurar por ai, devo achar alguma coisa...

Sim, acha. Dê uma olhada na terceira pergunta do usuário e na resposta que tem lá embaixo nesta página: http://www.codecomments.com/archive293-2004-7-243822.html

o que o cara quis dizer com isso?

However, you cannot redistribute that particular DLL file, so you might as

well consider any use of it as being off limits.

Link para o comentário
Compartilhar em outros sites

  • 0
cara, você quis fazer uma funcao que interpretasse a notacao polonesa tipo pra treinar logica, porque queria fazer uma funcao bem completa, ou porque você tinha que entregar o programa pra alguém, alguma coisa assim? porque tipo, nem o eval do script control consegue fazer as contas que tavam na wikipedia. não entendi exatamente, porque tipo, se eu fizer uma funcao que executa uma conta de uma string exatamente igualzinha ao eval, não tenho necessidade de usar esse negocio de notacao polonesa.

Não, não. Você não entendeu o que eu disse. Eu *não* cheguei a utilizar a notação polonesa para criar a função. O que eu disse foi que ela facilitaria muito o trabalho. Calculadoras da HP, por exemplo, utilizam a notação polonesa reversa (http://en.wikipedia.org/wiki/Reverse_Polish_notation) para realizar estes cálculos. E, aliás, é possível que o Eval() do ScriptControl também utilize essa notação internamente.

que o cara quis dizer com isso?
However, you cannot redistribute that particular DLL file, so you might as

well consider any use of it as being off limits.

Quis dizer que para este método é necessário distribuir a DLL do VBA (VBA5.DLL ou VBA6.DLL). Não sei se esta DLL depende de outras, mas se for o caso fica meio difícil de distribuí-la.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Quis dizer que para este método é necessário distribuir a DLL do VBA (VBA5.DLL ou VBA6.DLL). Não sei se esta DLL depende de outras, mas se for o caso fica meio difícil de distribuí-la.

entendi, tipo se ela usa uma funcao de outra dll?

não tem um jeito de descobrir isso?

Link para o comentário
Compartilhar em outros sites

  • 0
Quis dizer que para este método é necessário distribuir a DLL do VBA (VBA5.DLL ou VBA6.DLL). Não sei se esta DLL depende de outras, mas se for o caso fica meio difícil de distribuí-la.

entendi, tipo se ela usa uma funcao de outra dll?

não tem um jeito de descobrir isso?

A maneira que me ocorre é copiar só ela para outro computador limpo (que não tenha nada instalado, exceto o sistema operacional) e executar um programa que utilize-a. Se der algum problema é porque ela precisa de alguma outra coisa (que talvez você ainda não tenha como saber qual é), mas se der tudo certo é porque dá pra distribuir ela normalmente (mas, é claro, podem haver questões legais a respeito dessa distribuição).

Se a DLL for registrável com o RegSvr32 (mas, acho que esse não é o caso da DLL do VBA) e tiver alguma outra dependência é possível que no momento do registro dê problemas.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Não, não. Possuindo o Python e a extensão PyWin32 instalada, você poderia fazer o seguinte no VB...

set py = CreateObject("Python.Interpreter")
valor = py.Eval("(5*3)/2+20")
msgbox valor[/code]

esse PyWin32 é tipo um arquivo de biblioteca? pra poder declarar o Python.Interpreter eu teria que acicionar o PyWin32 como referencia, seria isso? e pra isso eu tenho que ter Python instalado no PC?

e quando eu fizer um instalador no meu programa pra instalar em qualquer PC por ai, como fica isso?

A maneira que me ocorre é copiar só ela para outro computador limpo (que não tenha nada instalado, exceto o sistema operacional) e executar um programa que utilize-a. Se der algum problema é porque ela precisa de alguma outra coisa (que talvez você ainda não tenha como saber qual é), mas se der tudo certo é porque dá pra distribuir ela normalmente (mas, é claro, podem haver questões legais a respeito dessa distribuição).

Se a DLL for registrável com o RegSvr32 (mas, acho que esse não é o caso da DLL do VBA) e tiver alguma outra dependência é possível que no momento do registro dê problemas.

se a dll não for registravel com o RegSvr32, signfica o que? que eu não consigo registra-la e posso acessar as funcoes sem registrar, so copiando no System32, ou que tenho que registrar de outro jeito? que tipo de problemas pode dar?

valeu pela explicacao.

Link para o comentário
Compartilhar em outros sites

  • 0
esse PyWin32 é tipo um arquivo de biblioteca? pra poder declarar o Python.Interpreter eu teria que acicionar o PyWin32 como referencia, seria isso? e pra isso eu tenho que ter Python instalado no PC?

e quando eu fizer um instalador no meu programa pra instalar em qualquer PC por ai, como fica isso?

Não, o PyWin32 é um módulo para Python. Para poder instalar em qualquer outro computador você só precisar instalar o Python e o PyWin32 normalmente (a instalação de ambos segue aquele velho ritual super-fácil de só clicar em Next, Next, Finish [Avançar, Avançar, Concluir] :)). E não precisa fazer referência nenhuma no VB, já que o objeto é criado via CreateObject().

se a dll não for registravel com o RegSvr32, signfica o que?

Que ela não é uma DLL do tipo ActiveX/COM (ou seja, que você precisa declarar as funções no programa).

que eu não consigo registra-la e posso acessar as funcoes sem registrar, so copiando no System32, ou que tenho que registrar de outro jeito?

Sim, você consegue acessar as funções dela declarando uma por uma com a instrução Declare. Aquela função mesmo (EBExecuteLine) é declarada desta maneira. Por isso que eu disse que provavelmente este *não* é o caso da DLL do VBA.

que tipo de problemas pode dar?

Em relação a DLL não estar registrada? Nenhum, se for o caso dela ser não-registrável; do contrário vem aquele famoso erro "ActiveX can't create object".

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

deixa eu ver se entendi.

todas as dlls que aparecem na minha lista de referencia no visual basic são do tipo ActiveX/COM? ou seja, eu preciso adicionar a referencia e não preciso declarar as funcoes?

outra coisa, esse nome da dll tem alguma coisa a ver com o VBA do Office?

Link para o comentário
Compartilhar em outros sites

  • 0

deixa eu ver se entendi.

todas as dlls que aparecem na minha lista de referencia no visual basic são do tipo ActiveX/COM?

Exatamente. :)

Todavia, existem DLLs do tipo ActiveX/COM que você *não* referencia pela lista, mas que ainda assim são do tipo ActiveX/COM (neste caso você precisa criar o objeto via CreateObject()).

ou seja, eu preciso adicionar a referencia e não preciso declarar as funcoes?

As que não são referenciadas pela lista e que não possuem objetos criados via CreateObject(), são DLLs comuns. Neste caso você precisa declarar as funções dela pela instrução Declare.

Vale a pena também observar que as DLLs do tipo ActiveX/COM não *precisam* ser referenciadas, pois os objetos podem ser criados em tempo de execução. Isso é vantajoso quando você precisa utilizar um determinado objeto sem ter que fazer uma referência para uma versão específica dele. Por exemplo, se você quiser fazer com que um relatório seu seja "escrito" no Word, automaticamente pelo seu programa em VB, e não quiser ficar preso a uma determinada versão do mesmo. Se você tem o Word 2003 vai ter o "Microsoft Word 11.0 Object Library" na sua lista. Mas pode ser que o computador que vá executar tenha o Word XP (que seria o "Microsoft Word 10.0 Object Library"). Neste caso o seu programa iria dar problema porque ele espera que a versão do Word seja a 2003 (11.0). Portanto, neste tipo de caso é melhor utilizar a criação do objeto em tempo de execução com CreateObject(), já que você passará um nome genérico ("Word.Application", no caso) e ele utilizará a versão disponível.

outra coisa, esse nome da dll tem alguma coisa a ver com o VBA do Office?

Sim, eu suponho que seja essa DLL que "execute" as macros criadas no VBA do Office.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...