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/

VB.net - carregar automaticamente um comando

Dúvidas sobre VB para AutoCAD...

Moderador: Moderadores

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

VB.net - carregar automaticamente um comando

Mensagem por neyton » Sex 05 Dez 2008 8:04:36 am

Camaradas, tenho feito alguns programas em vb.net para o cad, mas estou esbarrando em algumas coisas, por exemplo:

- fazer a mesma DLL funcionar em diferentes versoes do cad
- rodar um comando logo apos o programa ser carregado pelo netload, isto é, carregou com netload, o proprio programa chama um comando


alguem ai tem alguma sugestão?
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther » Ter 09 Dez 2008 8:22:33 am

neyton...
- fazer a mesma DLL funcionar em diferentes versoes do cad
Aplicações compiladas sob as classes do 2006 ou 2007 são compatíveis com o 2008, no entanto aplicações compiladas sob as classes do 2008 podem não ser compatíveis com as versões anteriores pelo fato de terem adicionados classes novas e também funções novas as classes existentes. Se você utilizar apenas as classes do 2006 suas aplicações devem rodar sem ploblemas nas versões posteriores á 2006.

Até mais!
Marcelo Silva - Cascavel - PR
[email protected]

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther » Qua 11 Fev 2009 5:02:01 pm

neyton...
- rodar um comando logo apos o programa ser carregado pelo netload, isto é, carregou com netload, o proprio programa chama um comando
Em C++ é bem simples, pois basta processar a mensagem kInitAppMsg, porém em .net é diferente.
Pesquisei bastante e não encontrei, no entanto perguntei por e-mail á Fernando Malard (se não me engano faz parte da esquipe da Autodesk) e ele respondeu prontamente informando o seguinte link:
http://through-the-interface.typepad.co ... _the_.html

Neste link tem exemplo em C# e VB.net para fazer o desejado. Já testei em C# e funcionou.

Até mais!
Marcelo Silva - Cascavel - PR
[email protected]

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

Mensagem por neyton » Qui 12 Fev 2009 8:25:08 am

ja havia visto, implementei nos meus programinhas já, hehehe

so que vi no:
http://www.theswamp.org/

veja como ficou:
http://tbn2.blogspot.com/2009/01/netload-2-missao.html

inclusive implementei um codigo que está aqui:
http://through-the-interface.typepad.co ... e_lis.html

no codigo que havia mostrado aqui:
http://tbn2.blogspot.com/2008/12/netload-que-saco.html

assim, o meu programa se instala e carrega o menu automaticamente ja no primeiro netload, depois é só alegria!!!

veja como fica:

Código: Selecionar todos

#Region "AUTOEXECUTE"
    Implements IExtensionApplication

    Public Sub Initialize() Implements IExtensionApplication.Initialize

        Dim ACADKEY As String = SystemObjects.DynamicLinker.ProductKey & "\Applications"

        Dim LOADER As String = Assembly.GetExecutingAssembly.Location
        Dim KEY As RegistryKey = Registry.CurrentUser.OpenSubKey(ACADKEY, True).CreateSubKey("TBN2")

        If KEY.GetValue("LOADER") <> LOADER Then
            With KEY
                .SetValue("DESCRIPTION", "TBN2, Programas do neyton")
                .SetValue("LOADCTRLS", 12, RegistryValueKind.DWord)
                .SetValue("MANAGED", 1, RegistryValueKind.DWord)
                .SetValue("LOADER", LOADER)
                Try
                    .DeleteSubKey("Commands")
                Catch
                End Try
                With .CreateSubKey("Commands")
                    For Each k As String In GetCommands(False)
                        .SetValue(k, k)
                    Next
                End With
            End With
        End If

        landCOM.Init(AcadCOM)
    End Sub

    Public Sub Terminate() Implements IExtensionApplication.Terminate
    End Sub
#End Region
isto vai no início da classe
a função Getcommands é a descrita no link http://through-the-interface.typepad.co ... e_lis.html

ah, aproveitando a deixa:

alguem viu isso:
http://blog.jtbworld.com/2009/02/no-vba ... -2010.html

o autocad 2010 não vem mais com o VBA!!!!
huahahahhahauha!!!

tem q baixar separadamente...
e o lisp (whatever ) é que está morrendo....
vai entender
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther » Qui 12 Fev 2009 9:09:22 am

neyton... Já li algo a respeito, parece ter haver com o VBA não ter suporte a 64 bits... O abandono ao VBA partiu da Microsoft, portanto Excel, Word, etc... futuros também tendem a não ter VBA... Em contra partida o Visual Studio terá uma ferramente de suporte á aplicações...

- Eu pouco sei de VB.net, estou estudando um pouco atualmente só para facilitar na leitura de programas, no entanto não pretendo escrever programas em VB.net, porém no meu estudo da linguagem estou convertendo um programa que escrevi em C e que server para manipular o registro do windows.

- Notei que o exemplo adiciona o seu programa ao registro para que seja carregado automáticamente, isso você está fazendo em VB.net numa aplicação ObjectARX Managed Class, certo?

- Pois bem, VB.net (.exe) ou qualquer outra linguagem que trabalhe com o registro do windows, tem potencial para criar um instalador do seu programa, configurando o AutoCAD de maneira que não precisa utilizar o netload nenhuma vez para que seu aplicativo funcione... Isso pode trazer vantagem no caso de existir mais que uma versão de AutoCAD instalada.

- A instalação do seu aplicativo está bastante facilitada.


Me esclareça uma parte do código:

Código: Selecionar todos

With KEY 
                .SetValue("DESCRIPTION", "TBN2, Programas do neyton") 
                .SetValue("LOADCTRLS", 12, RegistryValueKind.DWord) 
                .SetValue("MANAGED", 1, RegistryValueKind.DWord) 
                .SetValue("LOADER", LOADER)
Seria equivalente á:

Código: Selecionar todos

KEY.SetValue("DESCRIPTION", "TBN2, Programas do neyton") 
KEY.SetValue("LOADCTRLS", 12, RegistryValueKind.DWord) 
etc...
Até mais!
Marcelo Silva - Cascavel - PR
[email protected]

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

Mensagem por neyton » Qui 12 Fev 2009 3:24:16 pm

a graça do visual studio é justamente vc poder escrever na linguagem que gosta, ele converte VB para C#, para F#... C++ nao sei...

aquele

Código: Selecionar todos

With KEY 
.SetValue("DESCRIPTION", "TBN2, Programas do neyton") 
'....
End With
é equivalente

Código: Selecionar todos

KEY.SetValue("DESCRIPTION", "TBN2, Programas do neyton") 
'....
pra nao ficar escrenvendo o KEY varias vezes, uso bastante o With ... End With, acho que fica mais bonito

sim ele se adiciona ao registro, como descrito em:
http://through-the-interface.typepad.co ... loadi.html

o que fiz foi juntar algumas ideias deste blog...

ao que me parece funciona sim com o ARX, veja o link acima
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther » Qui 12 Fev 2009 5:19:35 pm

neyton... Obriado pela explicação do Width.

Mais uma pergunta.

Ao declarar uma variável da seguinte forma:
Dim key As RegistryKey
neste ponto a váriavel key é igual á que, se ainda não foi atribuida, ou seja, como faço para saber se uma variável já foi atribuida.

Atualmente estou testando em um bloco Try; Catch; End; porém em C eu inicializo a variável com null e depois simplesmente testo se ainda é null..

exemplo em C
HKEY__ *hKey = NULL;

e posteriormente para testar

if (hKey == NULL) ou simplesmente if (hKey)

Até mais!
Marcelo Silva - Cascavel - PR
[email protected]

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

Mensagem por neyton » Sex 13 Fev 2009 7:18:45 am

Código: Selecionar todos

Dim key As RegistryKey


apenas declara o tipo da variavel key
é como se em C eu fizese:

Código: Selecionar todos

RegistryKey key;
ela nao foi inicializada com valor algum entao, segundo meus professores da faculdade, se uma variavel nao foi inicializada com um valor, nao podemos contar com seu valor ainda, pois dependendo do compilardor, ele pode atribuir o valor zero por exemplo a um tipo integer, mas pode tambem não faze-lo....

se vc quer declarar e inicializar algo em VB.NET, faça assim:

Código: Selecionar todos

Dim i As Integer = 1
Dim str As String = "abc"
veja que esta inicializa não é válida em VBA...

creio que TALVEZ vc possa fazer:

Código: Selecionar todos

If KEY Is Nothing Then '...
End If
mas, como eu disse, não é garantido...
nos meus programas, nunca tive esses problema: nao saber se foi inicializada, mas se fosse o caso, creio que colocaria uma variavel tipo Boolean, que seria inicializada em false e o codigo que atribuisse o valor a variavel, tambem setaria a boolean em true...
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther » Sex 13 Fev 2009 8:56:59 am

Com os tipos básicos, sem problemas, a dificuldade realmente está com os tipo complexos, no caso de RegistryKey eu estou pegando o valor ValueCount dentro de um bloco Try, funciona 100% sem causar erros, porém deve haver uma forma melhor.

Já tinha tentado com Nothing, porém como sei pouco desta linguagem acho que fiz da forma errada, irei tentar novamente conforme citou.

Obrigado.

Até mais!
Marcelo Silva - Cascavel - PR
[email protected]

Responder