Tenha uma nova experiência ao navegar no Fórum pelo computador de forma integrada ao portal principal. Acesse o seguinte link: https://www.autolisp.com.br/board/. Entretanto para dispositivos móveis recomendamos acessar este outro link: https://www.autolisp.com.br/forum/

Fazer que o VBA execute um LISP

Dúvidas sobre VB para AutoCAD...

Moderador: Moderadores

Responder
Avatar do usuário
cleyson
Prata 1/3
Prata 1/3
Mensagens: 430
Registrado em: Seg 19 Jun 2006 12:00:00 am

Fazer que o VBA execute um LISP

Mensagem por cleyson » Qua 06 Set 2006 12:04:11 pm

:lol: Bom dia

Companheiros do Forum sei carregar um macro do VBA através do LISP como Exemplo abaixo, agora quero fazer o contrário, quero Executar um arquivo LISP numa macro do VBA.

(defun c:loadMacro ()
(setvar "filedia" 0) ; Evita a abertura da caixa de dialogo VBALOAD
(Command "_VBALOAD" "C:\\nomedoprojeto.dvb")
(setvar "filedia" 1)
(command "_VBARUN"
"nomedamacro" ; Evita a abertura da caixa VBARUN)
)
)

Atenciosamente
Cleyson Cloves do Carmo

Viva a Sociedade Alternativa!
Raul Santos Seixas

Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton » Qua 06 Set 2006 1:01:56 pm

encare as suas rotinas lisps como comandos do autocad... ai basta:

Sub teste()
' se nomedalisp esta assim:
' defun c:nomedalisp...
ThisDrawing.SendCommand ("nomedalisp") ' envia para a linha de comando
SendKeys ("{ENTER}") 'pressiona enter...
End Sub

se vc quer rodar uma subrotina, coloque assim:

Sub teste()
' se nomedalisp esta assim:
' defun nomedalisp...
ThisDrawing.SendCommand ("(nomedalisp)") ' envia para a linha de comando
SendKeys ("{ENTER}") 'pressiona enter...
End Sub

Avatar do usuário
cleyson
Prata 1/3
Prata 1/3
Mensagens: 430
Registrado em: Seg 19 Jun 2006 12:00:00 am

Não consegui executar ....

Mensagem por cleyson » Qua 06 Set 2006 3:28:21 pm

Teste e não consegui ... demora muito e nada, estou num botão de formulário Private Sub ... devo estar fazendo algo de errado aqui com certeza ... rsrsrs


Sub teste()
' se nomedalisp esta assim:
' defun c:nomedalisp...
ThisDrawing.SendCommand ("coordenada") ' envia para a linha de comando
SendKeys ("{ENTER}") 'pressiona enter...
End Sub

Teste e não consegui esotu te mandando um lisp meu pra te mostrar

(DEFUN c:coordenada(/ ponto)
(SETVAR "CMDECHO" 0)
(SETQ ponto (GETPOINT "\n-> Forneça um ponto : "))
(IF ponto
(ALERT (STRCAT "Você forneceu o ponto \n(""X - " (RTOS (CAR ponto) 2 (GETVAR "LUPREC"))"\t" "Y - "(RTOS (CADR ponto) 2 (GETVAR "LUPREC"))")""\t"
)
)
(ALERT "Você não forneceu nenhum ponto...")
)
(PRINC)
)
(princ "\nDigite <coordenada> para executar a rotina.")

Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton » Qui 07 Set 2006 11:14:12 am

putz...

cara, vc esta com um form ativo e esta tentando acessar a linha de comando... isso nao funciona... vc tem q "esconder" o form

se vc so quer pegar uma coordenada, por que nao usa :
aa = ThisDrawing.Utility.GetPoint(, "Entre com um ponto")
no vba?

e outra: eu nao achei um meio de carregar uma lisp no vba de forma "modal", isto é, apertir do momento que o sendcommand aciona a lisp, o vba ficar esperando até o final da execução da mesma para continuar a executar o codigo vba, veja:

...
' com "espaço" no final, nao precisa do sendkeys:
ThisDrawing.SendCommand ("coordenada ")
msgbox "lisp em execução"
...

executando isso, vc verá uma caixa de mensagem COM A LISP EM EXECUÇÃO!!!
o efeito que vc queria, era ver esta msg APÓS a finalização da lisp, correto?

se vc queria isso, terá de INICIAR a lisp, ENCERRAR o vba e quando a lisp estiver terminando, esta INICIAR o vba novamente, causano o efeito que vc queria

isso por que vc quer acessar a linha de comando com a lisp, caso sua lisp nao faça nada disso, vc pode pular a parte de encerrar e abrir novamente...

fiz assim:

um form com 1 botao apenas com o evento abaixo:
Private Sub CommandButton1_Click()
' ThisDrawing.SetVariable "USERS1", "bt1" 'pra vc saber q botao foi clicado...
UserForm1.Hide 'esconde o form
ThisDrawing.SendCommand ("coordenada ") ' envia para a linha de comando
End Sub

um modulo com a macro abaixo:
Sub teste()
UserForm1.Show vbModal
End Sub

uma lisp com o codigo abaixo:

[lsp](DEFUN c:coordenada (/ ponto)
(SETVAR "CMDECHO" 0)
(SETQ ponto (GETPOINT "\n-> Forneça um ponto : "))
(IF ponto
(ALERT (STRCAT "Você forneceu o ponto \n("
"X - "
(RTOS (CAR ponto) 2 (GETVAR "LUPREC"))
"\t"
"Y - "
(RTOS (CADR ponto) 2 (GETVAR "LUPREC"))
")"
"\t"))
(ALERT "Você não forneceu nenhum ponto..."))
(PRINC)
(vl-vbarun "teste"))[/lsp]

percebe?


mas se alguem souber como rodar a lisp de dentro do vba de forma modal, esteja a vontade para nos dizer como....

Responder