No capítulo final desta série, examinaremos o VBA (Visual Basic for Applications). As versões Pro e Platinum de BricsCAD para Windows incluem uma das linguagens de programação da Microsoft, VBA. Esta é uma versão do Visual Basic projetada para funcionar dentro de programas de software. BricsCAD executa programas VBA a partir de menus e barras de ferramentas e no prompt de comando.
VBA é completamente diferente de LISP, assim como LISP é completamente diferente de Diesel e de macros. Se você aprendeu a linguagem de programação BASIC, esse conhecimento não ajudará em nada, infelizmente, porque o Visual Basic não tem nada em comum com o BASIC, exceto o nome.
ATENÇÃO: Este artigo no Blog é transcrito aqui no idioma Português-Brasil, mas pelo fato do artigo original ter sido escrito em Inglês, é possível que algumas instruções (especialmente: códigos) possam gerar conflito entre os idiomas. Sugiro consultar também os códigos de origem (no livro ou na versão em inglês deste post) para garantir que seu trabalho esteja bem resolvido.
Este capítulo apresenta os conceitos de programação VBA e mostra como usá-lo em
BricsCAD. (As versões Classic, MacOS, Linux e demo de BricsCAD não incluem VBA.)
Para uma visão geral completa do VBA para BricsCAD, você pode ver o oficial, Guia do desenvolvedor VBA BricsCAD.
Os seguintes tópicos são abordados neste artigo:
- Apresentando o Visual Basic for Applications
- Envio de comandos através do VBA
- Usando o ambiente de programação VBA
- Criação de caixas de diálogo
- Resumo rápido dos comandos
Introdução ao VBA
VBA é a segunda linguagem de programação mais importante em BricsCAD. Embora o LISP seja o mais fácil de aprender e usar, ele se torna complicado e lento para programas grandes e grandes conjuntos de dados. Além disso, para criar caixas de diálogo, o LISP requer que você empregue o sistema DCL difícil de entender.
Na outra extremidade do espectro de programação está DRX ou BRX, as extensões de tempo de execução DWG ou BricsCAD. Essas interfaces de programação são as mais rápidas de todas, porque estão intimamente ligadas ao BricsCAD. Você usa interfaces de programação de aplicativos D / BRX com programas escritos em C ou um de seus derivados. Eles não são simples de aprender e apresentam uma desvantagem: você deve pagar por um compilador que funcione com D / BRX. Em contraste, o LISP é gratuito com todas as versões do BricsCAD e o VBA é gratuito com o BricsCAD Pro. DRX não é coberto por este livro. Observe que a partir de BricsCAD V8, B / DRX substitui o SDS, o Sistema de Desenvolvimento de Softdesk. Também a partir do V8, BricsCAD mudou o formato de seus arquivos de origem VBA do formato VBI do IntelliCAD para o formato DVB do AutoCAD.
Em contraste, o VBA é rápido e foi projetado com as interfaces do usuário de hoje em mente. Uma vantagem de aprender VBA é que você pode usar a mesma linguagem de programação em muitos outros programas do Windows; aprenda uma vez, programe em muitos. Talvez a parte mais difícil de aprender VBA seja conhecer seu jargão. Vamos começar!
Você escreve o código VBA em um ambiente de programação separado chamado “Editor VB”. O editor fornece assistência na escrita do código, bem como na construção da interface do usuário, que geralmente consiste em caixas de diálogo.
Você pode executar programas VBA na linha de comando BricsCAD ou por meio de sua caixa de diálogo Add In Manager. Os programas também podem ser iniciados a partir de macros de menu e barra de ferramentas, bem como de funções do VisualLISP, tópicos não cobertos por este e-book.
O código pode ser embutido em um desenho BricsCAD ou mantido fora de BricsCAD para acesso por todos os desenhos:
- Para executar macros incorporadas, use o VbaRun
- Para executar as macros armazenadas em a.dvb arquivo de projeto, primeiro carregue-os através do VbaMan caixa de diálogo ou o VbaLoad prompt de comando. Depois de carregadas, as macros podem ser executadas com o VbaRun ou VbaMan comandos
O VBA tem um comando que funciona exatamente como o LISP (comando) função: SendCommand executa qualquer comando BricsCAD, como Line, Erase e Zoom. A função também lida com opções de comando, como “1,1” e “Todos”.
Vamos dar uma olhada nisso. Aqui está o código VBA para desenhar uma linha entre vários pares de coordenadas x, y.
Sub Using_the_SendCommand ()
Esse desenho.SendCommand “Linha 1,1 1,8 11,8 11,1 c“
End Sub
DICA Este código VBA não é muito diferente do código equivalente em LISP, que se parece com isto:
(defun using_the_sendcommand () (linha de comando 1,1 2,2 c “) ) |
As palavras usadas no snippet do código VBA têm o seguinte significado:
Sub inicia uma nova sub-rotina (ou função).
Using_the_SendCommand () nomeia a sub-rotina. Os parênteses () indicam que nenhuma variável é usada. Ao contrário do LISP, o VBA precisa saber os nomes das variáveis e seu tipo com antecedência. Abordarei variáveis e tipos mais adiante neste capítulo, mas por agora é suficiente saber que tipo se refere ao tipo de dados que a variável contém, como texto (strings), números inteiros (inteiros), números decimais (reais), e outros tipos de dados.
ThisDrawing.SendCommand opera no desenho atual, identificado genericamente por “ThisDrawing”. Você não especifica o nome do desenho, apenas precisa usar “ThisDrawing,” e o VBA sabe do que você está falando.
“Linha 1,1 1,8 11,8 11,1 c“ executa o comando Linha, desenhando quatro linhas que formam o retângulo entre 1,1 e 11,8. O comando e seus prompts são lidos como uma string e, em seguida, enviados para o processador de comandos do BricsCAD - exatamente como se você tivesse digitado isso no prompt de comando.
DICA Para finalizar o comando corretamente, certifique-se de que a string tenha um espaço no final, logo antes das aspas de fechamento. No código acima, você pode ver o espaço entre c e “. |
End Sub sinaliza o fim da sub-rotina.
INCORPORADO OU EXTERNO
BricsCAD armazena macros VBA em desenhos (incorporados) ou em arquivos .dvb (externos). Existem prós e contras em cada método, conforme listado na tabela a seguir:
embutido | Externo | |
Armazenamento | em desenhos | no .dvb arquivos |
Carregando | carregado com desenhos | carregado com o comando VbaLoad |
Distribuição | com o ..dwg Arquivo | com o .dvb Arquivo |
Reatores | Sim | Não |
Uma macro incorporada não pode ser usada por outros desenhos, a menos que você a incorpore especificamente em outros arquivos de desenho.
Use o botão Embed do comando VbaMan para converter projetos em projetos incorporados. Um problema sério com macros incorporadas é que elas podem conter vírus. Conseqüentemente, BricsCAD exibe uma caixa de diálogo de aviso que lhe dá a opção de desabilitar ou habilitar macros, ou impedi-los de carregar.
ESCREVER E EXECUTAR ROTINAS VBA
Enquanto o bloco de notas ou outro editor de texto pode ser usado para escrever rotinas LISP, um ambiente de programação incluído com BricsCAD deve ser usado para VBA. Você usa este ambiente para escrever e executar todo o código. Para acessar o editor VBA, siga estas etapas:
- A primeira etapa é garantir que BricsCAD possa executar macros VBA. Como o VBA é uma fonte de vírus, a capacidade de executar programas VBA normalmente está desativada. Aqui está agora para habilitar macros VBA:
- Do BricsCAD Ferramentas menu, escolha Segurança. Observe a caixa de diálogo Segurança.
- Se necessário, escolha o Nível de segurança .
DICA Esta caixa de diálogo é necessária devido a uma má decisão dos programadores da Microsoft. Quando eles criaram o VBA: eles permitiram que os documentos armazenassem o código do VBA. Esse recurso conveniente se tornou um grande problema de segurança, porque tornou mais fácil para os hackers distribuir arquivos do Word e Excel de aparência benigna que continham código VBA malicioso.
Depois que muitas pessoas e empresas sofreram por ter arquivos preciosos apagados de seus computadores, a Microsoft finalmente adicionou esta caixa de diálogo para superar o exploit do VBA. Hoje, os documentos baseados no Windows não podem executar o código VBA por padrão (nível de segurança = alto) e, portanto, você deve diminuir o nível de segurança para que o VBA funcione. - Se o nível de segurança estiver definido como Alto, mude para Médio ou Baixo. As diferenças entre as configurações estão listadas na tabela abaixo:
Configuração VBA Significado Alto Todas as rotinas VBA são impedidas de operar; padrão. Médio BricsCAD pergunta se você deseja executar cada rotina VBA. Baixo Todas as rotinas VBA são executadas, sem dúvida - Depois de alterar o nível de segurança nesta caixa de diálogo, você deve reiniciar BricsCAD com o Sair comando ou usando Arquivo | Saída.
- Do BricsCAD Ferramentas menu, escolha Segurança. Observe a caixa de diálogo Segurança.
- Com o VBA habilitado, agora você pode abrir seu ambiente de programação. De Ferramentas menu, escolha VBAe 436 Personalização de BricsCAD V20, em seguida, escolha Visual Basic for Applications. Observe o ambiente de programação VBA.
- O código é escrito em módulos - um formulário que está inicialmente em branco, no qual você digita o código. Para iniciar um novo módulo, a partir do Inserir menu, escolha Módulo. Observe que uma janela em branco aparece, conforme mostrado abaixo.
- Insira o seguinte código no módulo. (Este é o mesmo código de desenho de linha que você viu antes.)
Sub Using_the_SendCommand ()
ThisDrawing.SendCommand “linha 1,1 2,2 1,2 c“
End Sub
- Agora você tem código suficiente para executar um programa. Clique no botão Executar, que você encontra na barra de ferramentas.
Sucesso! Observe que BricsCAD desenha um triângulo. Se a rotina não funcionar, verifique estes problemas:
- A segurança está definida como Alta ou Média?
- O código contém erros de ortografia?
Você pode usar SendCommand para desenhar e editar entidades e para alterar pontos de vista com comandos como Zoom e Pan. Você pode usá-lo para inserir blocos, alterar propriedades e desenhar desenhos. Apenas tome cuidado para inserir as opções de comandos corretamente; as coordenadas e os nomes das opções são particularmente complicados.
EXIBINDO MENSAGENS
Exibir mensagens em caixas de diálogo é tão fácil quanto usar este código com o MsgBox função:
MsgBox “A borda do desenho está completa.”
- Adicione a linha ao código no editor VBA:
- E então clique no Corre botão novamente. Você deverá ver uma caixa de diálogo em BricsCAD semelhante a esta:
Isso é muito, muito mais fácil do que codificar uma caixa de diálogo em LISP com DCL!
Construindo Caixas de Diálogo
Falando em caixas de diálogo, o VBA inclui um kit de construção de caixa de diálogo interativa chamado “formulário do usuário”. Vamos dar uma olhada em como isso funciona.
Para iniciar um novo formulário de usuário, siga estas etapas:
- Na paleta do projeto, clique com o botão direito Módulo 1.
- No menu de atalho, escolha Inserir, e então escolher Userform.
Observe a janela cinza preenchida com uma grade de pontos. É aqui que você cria as caixas de diálogo.
Adjacente ao formulário está a caixa de ferramentas. Ele contém os elementos que compõem as caixas de diálogo - conhecidos como “controles” no jargão correto do VBA. Você provavelmente reconhecerá muitos dos controles, como caixa de entrada de texto, caixa de seleção e botão de rádio. - Para colocar um controle, escolha um na caixa de ferramentas e, a seguir, posicione-o no formulário do usuário. Por exemplo, para adicionar uma caixa de seleção, siga estas etapas:
- Na caixa de ferramentas, clique no item da caixa de seleção
- No Userform1, clique em qualquer lugar. Observe que a caixa de seleção é colocada com um texto genérico que diz “Checkbox1”.
- Para editar o texto ou qualquer outra propriedade da caixa de seleção, dê uma olhada na paleta Propriedades. (Se não estiver visível, escolha Janela de Propriedades do menu Vista cardápio; se necessário, clique no Organizado tab.) Observe o nome do controle, além de uma tonelada de outras propriedades - as opções podem se tornar bastante opressivas.
- Você escreveu algum código e desenhou uma caixa de diálogo simples. Para conectar a caixa de seleção com o código VBA, escolha o Selecionar objetos ferramenta na caixa de ferramentas e, em seguida, clique duas vezes no controle da caixa de seleção.
Observe que outra janela de módulo é aberta, na qual você pode inserir o código - algo que não vou detalhar neste momento.
Veremos o link da caixa de diálogo do código com mais detalhes posteriormente neste capítulo. Primeiro, porém, um
introdução de como o VBA realmente funciona.
Modelo de objeto de automação BricsCAD V20
Programação Orientada a Objetos
Na programação, é mais eficiente trabalhar com objetos. Não, não são objetos geométricos, mas objetos de programação. Para manter clara a distinção, refiro-me a objetos geométricos como entidades.
Você teve uma dica da natureza orientada a objetos do VBA com o ThisDrawing.SendCommand pedaço de código: a função SendCommand é instruída a operar no objeto ThisDrawing, que é o desenho atual. Você pode adicionar objetos a ThisDrawing, como ModelSpace para garantir que os comandos sejam executados no espaço do modelo em vez do espaço do papel:
Esse desenho.ModelSpace.SendCommand ()
Observe os pontos (.) Que os conectam, bem como o ponto nos pares de pontos usados pelo LISP para acessar os dados da entidade. O VBA tem como premissa a orientação a objetos, onde tudo em BricsCAD é organizado como objetos e de acordo com uma hierarquia estrita. Tecnicamente, isso é conhecido como “expor o banco de dados BricsCAD” por meio do Common Object Model (COM) da Microsoft.
MODELO DE OBJETO COMUM
Na página seguinte está uma figura muito importante: é um diagrama do modelo de objeto em BricsCAD. (Ele muda de uma versão para outra conforme novos objetos são introduzidos.) O gráfico mostra como as entidades se relacionam com os objetos:
- As entidades estão no modelo encontrado ou no espaço do papel, ou em blocos
- Espaço modelo / papel e blocos são encontrados em documentos
- Documentos (desenhos) são encontrados no inscrição (BricsCAD)
Como alternativa ao diagrama, você pode usar o Pesquisador de objetos encontrado no ambiente de programação VBA do BricsCAD, descrito a seguir.
NAVEGADOR DE OBJETOS
O navegador de objetos lista todos os objetos que o VBA pode acessar em BricsCAD. Para usar o navegador de objetos, siga estas etapas:
- De Vista menu, escolha Pesquisador de Objetos. Observe a paleta Object Browser.
- Na lista suspensa Todas as bibliotecas, escolha BricsadDb. (Db é a abreviatura de banco de dados.)
- Role para baixo até AcadLine. Esta é a entidade da linha BricsCAD, mas é chamada acadline para manter a compatibilidade com aplicativos VBA programados no AutoCAD.
- À direita, observe todas as propriedades, métodos e eventos que estão disponíveis para entidades de linha. Eu os detalhei na seção seguinte.
- Na parte inferior, há informações úteis. Quando o cursor está sobre um membro, uma breve descrição é fornecida, junto com um link para o pai.
A figura abaixo mostra as informações fornecidas para Comprimento:
- Comprimento é um propriedade que especifica o comprimento da linha atual.
- É uma variável dupla (ponto flutuante de precisão dupla).
- É somente leitura, o que significa que os programadores e usuários não podem editar o valor.
- É membro de BricsCADDb.AcadLine.
Agora, você deve perceber que a paleta de propriedades relata os valores armazenados por BricsCADDb para todas as entidades no desenho. Vamos dar uma olhada mais de perto em tudo o que um objeto de linha envolve.
DICAS Renomeie os botões e caixas de texto para que os nomes descrevam o que eles fazem. Por exemplo, renomeie o botão OK como btnOK; renomeie a caixa de texto Último Ponto como txtLastPoint e assim por diante.
Se o tamanho e o estilo da fonte na janela Código forem muito pequenos, você poderá alterá-los. No menu Ferramentas, escolha Opções. Selecione Formato do Editor e escolha um tamanho de fonte e / ou nome de fonte diferente. O editor de código VBA usa cores para destacar diferentes tipos de código: Comentários de texto verde |
ENTIDADE DE LINHA
A entidade de linha é criada com o AcadLine método no modelo ou espaço do papel, e em um bloco:
- ModelSpace.AddLine adiciona uma linha ao espaço do modelo.
- PaperSpace.AddLine adiciona uma linha à guia de layout atual.
- Block.AddLine adiciona uma linha ao bloco, bloco dinâmico ou bloco xref especificado.
As linhas têm propriedades, métodos e eventos:
- Propriedades afetam a geometria e a aparência da linha.
- Método refere-se às maneiras pelas quais as linhas podem ser editadas.
- Eventos refere-se à maneira como as entidades relatam que foram alteradas
Abaixo, listei todas as propriedades, métodos e eventos para entidades de linha. A lista dá uma ideia
da riqueza (ou complexidade) do acesso que você tem aos internos de BricsCAD, a riqueza
fornecido pelo modelo de objeto por meio do VBA.
Propriedades
As linhas podem ter as seguintes propriedades. Alguns deles serão familiares para você; outros serão novos.
Propriedades | Significado |
Propriedades Geométricas | |
Angulo | Ângulo em radianos do eixo x medido no sentido anti-horário |
Delta | Valores Delta-x, -y e -z, de um ponto de extremidade para o outro |
comprimento | Comprimento da linha |
Normal | Normal à linha |
EndPoint | Coordenada X, y, z do ponto final da linha |
Ponto de partida | Coordenada X, y, z do ponto inicial |
Propriedades da Entidade | |
Hiperlinks | Hiperlink embutido |
Camada | Nome da camada |
TipoLinha | Nome do tipo de linha |
LinetypeScale | Escala de tipo de linha |
Espessura da linha | Largura de espessura de linha |
Material | Nome do material (usado para renderização) |
PlotStyleName | Nome do estilo de plotagem, se habilitado |
Espessura | Espessura, na direção z |
TrueColor | Cor |
Visível | Visibilidade, independente da configuração da camada |
Outras Propriedades | |
Inscrição | Especifica o aplicativo BricsCAD |
Documento | Especifica o desenho |
Lidar com | Especifica o número de identificação da entidade |
HasExtensionDictionary | Informa se a linha tem um dicionário de extensão |
ObjectID | Método alternativo de obtenção do número de identificação da entidade |
OwnerID | Relata o ObjectID do objeto pai |
Métodos
A linha pode ser editada com os seguintes métodos:
Método | Significado |
Edição de Entidade | |
MatrizPolar | Cria uma matriz polar da linha |
ArrayRectangular | Cria uma matriz retangular |
Copiar | Copia a linha |
Excluir | Apaga a linha |
Espelhar | Espelha a linha |
Mirror3D | Espelha a linha em 3D |
Mover | Move a linha |
Deslocamento | Cria uma cópia deslocada da linha |
Rotacionar | Roda a linha |
Rotate3D | Roda a linha em 3D |
ScaleEntity | Redimensiona a linha |
TransformBy | Move, dimensiona e / ou gira a linha |
Outro método: | |
GetBoundingBox | Informa as coordenadas do retângulo que abrange a linha |
GetExtensionDictionary | Retorna o dicionário de extensão da linha |
GetXData | Retorna os dados de entidade estendidos da linha |
SetXData | Armazena dados de entidade estendidos na linha |
IntersectWith | Retorna coordenadas onde a linha intercepta outros objetos |
Realçar | Destaca a linha |
Atualizar | Regenera a linha |
Eventos
Quando as entidades são alteradas, elas acionam eventos. Para linhas, há apenas um evento. o Modificado O evento é disparado sempre que uma propriedade é configurada, mesmo quando o novo valor for igual ao atual.
Os eventos são impedidos de disparar enquanto as caixas de diálogo modais estão abertas. (UMA modal A caixa de diálogo deve ser descartada antes que você possa continuar trabalhando no BricsCAD; ou seja, a maioria das caixas de diálogo.)
Caixa de Diálogo com Código
Em postagens anteriores, mostrei como construir uma caixa de diálogo usando DCLe, em seguida, adicione o código LISP para que funcione. A caixa de diálogo parecia assim:
A caixa de diálogo exibe o valor atual de três variáveis do sistema:
- Ultimo ponto relata o valor atual da variável de sistema LastPoint.
- Ultimo angulo relata o valor de LastAngle (somente leitura).
- Último prompt relata o valor de LastPrompt (somente leitura).
Vamos repetir o tutorial, desta vez usando o VBA para fazer os dois trabalhos feitos separadamente pelo DCL e LISP antes - projetar a caixa de diálogo e escrever-executar o código.
DESENHANDO A CAIXA DE DIÁLOGO
As caixas de diálogo são projetadas com o ambiente de programação VBA, da seguinte maneira:
- Inicie o BricsCAD e use o botão Ferramentas | VBA | Comando do Visual Basic for Applications para abrir o ambiente de programação VBA.
- Inicie um novo Userform. (No menu Inserir, escolha UserFrom.) Observe que o VBA cria uma caixa de diálogo genérica chamada UserForm1.
- Altere o nome na barra de título seguindo estas etapas:
- Abra a paleta Propriedades. (No menu Exibir, escolha Janela de propriedades.)
- Role para baixo até Caption e, em seguida, altere “UserForm1” para Last Input. Conforme você digita, observe que a barra de título da caixa de diálogo é atualizada ao mesmo tempo.
- A maior parte da nossa nova caixa de diálogo consiste em três caixas de entrada de texto. O primeiro é construído assim:
- Na caixa de ferramentas, escolha o Caixa de texto ao controle.
- Clique em qualquer lugar no centro do formulário. Observe que a caixa de entrada de texto aparece, mas falta um prompt de texto para o usuário, como “Último ângulo:” Você adiciona o texto um pouco mais tarde.
- Na caixa de ferramentas, escolha o Caixa de texto ao controle.
- Em BricsCAD, a variável de sistema LastAngle é somente leitura. Isso significa que os usuários podem visualizar o valor, mas não alterá-lo. As caixas de texto que não podem ser editadas pelos usuários são tradicionalmente coloridas em cinza. Veja como tornar a caixa de texto somente leitura e cinza:
- Certifique-se de que a caixa de texto esteja selecionada (possui alças, conforme ilustrado acima).
- Na paleta Propriedades, altere o valor de BackColor (encontrado na seção Aparência) para Barra de título inativa.
“Barra de título inativa” é um enum, um valor predefinido em VBA, como pi em LISP. (Enum é a abreviação de “enumerado”.) Se o usuário alterar as cores da interface de usuário do Windows, a cor de fundo dessa caixa de texto também mudará.
- Para adicionar o prompt, use a ferramenta Label, da seguinte maneira:
- Escolha a Etiqueta ferramenta da caixa de ferramentas.
- Clique e arraste um retângulo na frente da caixa de texto. Se necessário, arraste o rótulo para a posição.
- Backspace sobre o texto genérico “Label1”, substituindo-o por Último Ângulo:
- Para justificar o texto à direita, altere o valor de Alinhamento de texto propriedade para 3 (fmTextAlignRight).
DICA Você pode arrastar os elementos da caixa de diálogo com o cursor, mas ele tende a saltar para o espaçamento dos pontos da grade. Para ajustar a localização de um elemento, use a seção Posição da paleta Propriedades.
Altere o valor de Top para mover o elemento para cima e para baixo, Left para mover horizontalmente. Os valores representam o número de pixels do canto superior esquerdo da caixa de diálogo.
- Escolha a Etiqueta ferramenta da caixa de ferramentas.
- Você pode criar as outras duas caixas de entrada de texto copiando e colando:
- Use o cursor para selecionar os dois elementos. Aqui estão duas maneiras de fazer isso:
- Você pode arrastar um retângulo ao redor de ambos.
- Como alternativa, você pode escolher um, manter pressionada a tecla Ctrl e escolher o outro.
- pressione Ctrl+C para fazer uma cópia (armazenada na área de transferência).
- pressione Ctrl+V para colar a cópia na caixa de diálogo. As cópias são coladas bem em cima dos originais, infelizmente. Isso significa que você precisa mover um deles, seguindo a colagem.
- Separe os elementos sobrepostos arrastando as cópias acima dos originais.
- Use o cursor para selecionar os dois elementos. Aqui estão duas maneiras de fazer isso:
- Altere as propriedades do novo par de elementos de entrada de texto:
- Alterar rótulo de texto para Último Ponto.
- Mude Cor de fundo da caixa de texto Fundo da janela (branco), porque o valor da variável de sistema LastPoint pode ser alterado pelo usuário.
- Edite o texto para o Última Prompt campo. Mantenha a cor de fundo da caixa de texto LastPrompt cinza, porque a variável de sistema LastPrompt não pode ser editada pelos usuários.
- É muito provável que os elementos não se alinhem perfeitamente. O VBA pode alinhá-los para você, da seguinte maneira:
- Selecione os três elementos de texto e clique com o botão direito.
- No menu de atalho, escolha Direitos. Observe que agora eles se alinham perfeitamente.
- Repita para as três caixas de entrada.
- Selecione os três elementos de texto e clique com o botão direito.
- Os elementos finais são os botões OK e Cancelar. Na caixa de ferramentas, arraste o Botão de comando elemento no formulário do usuário.
Esq: Selecionando a ferramenta CommandButton e então ... Dir: … Arrastando-o para o formulário. - Altere sua propriedade Caption para OK.
- Repita para adicionar o Cancelar .
O desenhar da caixa de diálogo está completo. O próximo estágio adiciona código que faz a caixa de diálogo funcionar.
Se desejar, você pode ajustar a aparência da caixa de diálogo tornando o botão OK mais estreito, adicionando um quadro ao redor das caixas de entrada de texto, alterando as cores dos elementos e assim por diante. Acho interessante que prefiro trabalhar com DCL, porque BricsCAD se encarrega de alinhar os elementos da caixa de diálogo para que tenha uma boa aparência - sem todos os ajustes manuais exigidos pelo VBA.
ADICIONANDO O CÓDIGO
Com o design da caixa de diálogo no lugar, vamos começar a trabalhar no código. No LISP, uma única rotina trata de tudo o que acontece na caixa de diálogo; em contraste, o VBA usa muitos trechos de código. Um fragmento trata do botão Cancelar, outro do botão OK, outro trata do valor exibido pela caixa de texto Último Ponto e assim por diante.
Você não precisa se preocupar em vincular trechos de código a elementos de caixa de diálogo. O VBA faz isso por você. Quando o usuário clica em uma caixa de texto ou no botão OK, o VBA executa o trecho de código correto automaticamente.
Clicar em Cancelar
Para vincular o botão Cancelar a um código VBA cortado, siga estas etapas:
- Clique duas vezes no Cancelar botão. Observe que um formulário semelhante a um módulo aparece e está parcialmente preenchido.
- Adicione o comando para fechar a caixa de diálogo:
Fim - Você Terminou!
- Bem, isso não é tudo. Você ainda precisa testar se o botão Cancelar realmente funciona. Veja como:
- Na barra de ferramentas do VBA, clique no Corre botão. Observe que a caixa de diálogo aparece em BricsCAD.
- Tente clicar em um elemento diferente do botão Cancelar, como o botão OK. Nada acontece, porque não há código vinculado a ele.
- Clique Cancelar. A caixa de diálogo deve desaparecer. Sim, funciona!
- Na barra de ferramentas do VBA, clique no Corre botão. Observe que a caixa de diálogo aparece em BricsCAD.
RESUMO RÁPIDO DE TIPOS DE DADOS VBA
Tipo de dados | Comentário | Vai de | Para | |
Byte | … | 0 | 255 | |
boleano | … | Verdade | Falso | |
Inteiro | … | -32,768 | 32,767 | |
Longo | Inteiro longo | -2,147,483,648 | 2,147,483,647 | |
Isolada | Ponto flutuante de precisão simples | -3.402823E38 | -1,401298E-45 (valores negativos) | |
1.401298E-45 | 3.402823E38 (valores positivos) | |||
Duplo | Ponto flutuante de precisão dupla | -1.79769313486231E308 | -4.94065645841247E-324 (valores negativos) | |
4.94065645841247E-324 | 1.79769313486232E308 (valores positivos) | |||
Decimal | … | +/- 79.228.162.514.264.337.593.543.950.335 (sem ponto decimal) | ||
+/- 7,9228162514264337593543950335 (28 casas decimais) | ||||
+/- 0,0000000000000000000000000001 (menor número diferente de zero) | ||||
Encontro | … | 1 ° de janeiro de 100 | 31 de dezembro de 9999 | |
Moeda | Inteiro em escala | -922,337,203,685,477.5808 | 922,337,203,685,477.5807 | |
String | Comprimento variável | 0 | aproximadamente 2 bilhões de caracteres | |
Comprimento fixo | 1 | aproximadamente 65.400 caracteres | ||
Variante | Números | Qualquer valor numérico até um dobro | ||
Personagens | Igual à string de comprimento variável | |||
Objeto | … | Qualquer referência de objeto | ||
Usuário definido | … | Mesmo intervalo de seu tipo de dados. |
RESUMO RÁPIDO DOS VALORES DE RETORNO DO TIPO DE DADOS VBA
Constante | Valor | Descrição |
vbEmpty | 0 | Vazio ou não inicializado |
vbNull | 1 | Nulo ou nenhum dado válido |
vbInteger | 2 | Inteiro |
vbLong | 3 | Inteiro longo |
vbSingle | 4 | Número de ponto flutuante de precisão única |
vbDouble | 5 | Número de ponto flutuante de precisão dupla |
vbCurrency | 6 | Valor da moeda |
vbDate | 7 | Valor da data |
vbString | 8 | String |
vbObject | 9 | Objeto |
vbError | 10 | Valor de erro |
vbBoolean | 11 | Valor booleano |
vbVariant | 12 | Variante (matriz) |
vbDataObject | 13 | Objeto de acesso a dados |
vbDecimal | 14 | Valor decimal |
vbByte | 17 | Valor de byte |
vbUserDefinedType | 36 | Variante (tipos definidos pelo usuário) |
vbArray | 8192 | Matriz |
RESUMO RÁPIDO DA MANIPULAÇÃO DE CORDAS VBA
Palavra-chave, operador | Comentário |
Asc, Chr | Acessa valores ASCII e ANSI |
Formato, Lcase, Ucase | Converte para maiúsculas ou minúsculas |
Formato | Strings de formatos |
InStr, Left, LTrim, Mid, Len | Encontra comprimentos de strings |
LSet, Rset | Justifica a string à esquerda ou à direita |
Comparação de opções | Define regras de comparação de strings |
Certo, RTrim, | Trim Manipula cordas |
Espaço, String | Cria strings de caracteres repetidos |
StrComp | Compara duas strings |
StrConv | Converte strings |
& | Concatena strings |
RESUMO RÁPIDO DOS COMPONENTES DO PROGRAMA VBA
Projetos armazenam macros. (LISP chama esses “programas”.)
Macros referem-se a pedaços de código de programação VBA. (LISP chama essas “funções”.) As macros VBA podem ser incorporadas (armazenadas em desenhos) ou salvas em arquivos .dvb no disco.
Reatores são pedaços de código de macro que reagem a eventos no desenho, como o desenho sendo salvo, um objeto adicionado ao desenho ou o usuário clicar com o botão do mouse.
Os formulários referem-se ao local onde o código VBA é construído. Freqüentemente, os formulários parecem caixas de diálogo.
Os controles referem-se a elementos em formulários, como caixas de seleção e listas suspensas.
Classes são definições de objetos. Por exemplo, AcadLine é a classe que define a entidade de linha.
Objetos referem-se a classes colocadas em formulários. Os objetos podem ter os seguintes atributos:
- Propriedades que descrevem o objeto, como cor, altura e largura.
- Métodos que modificam objetos, como copiá-los e girá-los.
- Eventos que relatam quando os objetos são modificados.
RESUMO RÁPIDO DOS COMANDOS VBA NO BRICSCAD
Os nomes dos comandos relacionados ao VBA são mostrados abaixo em negrito, enquanto os nomes de menu equivalentes são mostrados entre parênteses.
Você acessa os itens de menu em Ferramentas | Menu VBA.
Vba (Visual Basic for Applications) abre o Editor VB para escrever e depurar macros.
VbaRun (Macros) carrega e executa macros VBA; exibe a caixa de diálogo Macros e lista os nomes das macros VBA armazenadas no desenho atual.
VbaNew (Novo Projeto) especifica o nome de um novo arquivo de projeto VBA.
VbaLoad (Load Project) carrega arquivos de projeto .dvb VBA; exibe a caixa de diálogo Abrir.
O comando -VbaLoad carrega arquivos de projeto .dvb no prompt de comando.
VbaMan (Project Manager) exibe a caixa de diálogo VBA Manager.
AddInMan (Add-in Manager) lista os programas que podem ser carregados em BricsCAD e controla como são carregados; exibe a caixa de diálogo Gerenciador de suplementos.
(VbaStmt não é compatível com BricsCAD; seu objetivo em outros programas é carregar e executar macros no prompt de comando.)
LastInput.Dvb
Com a introdução à programação VBA atrás de você, vamos prosseguir e examinar um programa totalmente codificado. Abaixo está a caixa de diálogo Última entrada e na página oposta está o código VBA
para LastInput.Dvb. Nas páginas a seguir, comento partes do código.
A parte principal do projeto é mostrada em cores; outros módulos são como sub-rotinas que suportam o módulo principal. Adicionei linhas a módulos visualmente separados e codifiquei por cores
nomes de módulos para que você possa cruzá-los.
O seguinte código VBA foi desenvolvido por Ferdinand Janssens, programador da Bricsys.
Rotinas de conversão
O VBA não foi projetado com CAD em mente e, portanto, não lida facilmente com conceitos exclusivos de desenhos vetoriais, como o processamento de pontos 2D e 3D. Assim como no LISP, o VBA deve separar os tripletos de coordenadas e, em seguida, recombiná-los como strings.
Duas das rotinas de conversão no programa do Sr. Janssens são úteis para qualquer programação VBA com BricsCAD. São os seguintes:
- PointToString cobre pontos 3D (coordenadas x, y, z) para strings, como 3,2,1 a “3”, ”2 ″,” 1 ″.
- StringToPoint cobre as cordas de volta aos pontos de coordenadas 1D, 2D ou 3D, como “3”, ”2 ″,” 1 ″ a 3,2,1.
Francamente, estou surpreso com a quantidade de código que o VBA precisa para adicionar e remover aspas do tipo único e mais comum de dados CAD. A boa notícia é que, depois de escrever essas duas rotinas, você pode usá-las novamente em seus outros programas VBA.
Aqui estão as descrições de como eles funcionam.
FUNÇÃO DE CONVERSÃO DE POINTTOSTRING
A rotina PointToString adiciona aspas a cada coordenada para convertê-las de números reais em strings. Por exemplo, 3.4,2,0 torna-se “3.4”, ”2 ″,” 1 ″. Se parece com isso:
Função privada PointToString (vIn Como variante) Como corda
Dim sPt Como corda: sPt = vbNullString Dim
iPrecision Como inteiro
iPrecision = ThisDrawing.GetVariable (“LUPREC”)
Se VarType (vIn) > vbArray Then
sPt = StringFromValueFixedDecimal (vIn (0), iPrecision) & “,“
sPt = sPt & StringFromValueFixedDecimal (vIn (1), iPrecision) & “,“
sPt = sPt & StringFromValueFixedDecimal (vIn (2), iPrecision)
Fim se
PointToString = sPt
Função Final
(Palavras-chave VBA são mostradas em negrito.)
Vamos examinar como esse código funciona, linha por linha.
Função privada PointToString (vIn As Variant) As String
Privado significa que a função só pode ser acessada neste módulo. Isso é quase análogo à prática em LISP, onde os nomes das variáveis são colocados após o caractere de barra para torná-los locais, como (função defun (/ vaname)).
Function especifica o nome, os argumentos e o código. É como o defun função no LISP.
PointToString é o nome da função.
vIn é o nome da variável do argumento (vIn é a abreviação de “entrada variante”). O objetivo desta variável é receber o argumento passado para esta função quando ela é processada.
Como declara o tipo de dados do argumento.
Variante é o tipo de dados, o que significa que a função é completamente flexível quando se trata de tipos de dados, trabalhando com números, texto e matrizes.
Como corda significa que a saída da função é uma string de comprimento variável.
Em suma, esta linha de código define uma função local chamada “PointToString” que espera números ou texto como entrada e então retorna o texto.
RESUMO RÁPIDO DAS CONSTANTES PREDEFINIDAS VBA
Constante | Valor | Comentários |
vbCrLf | Chr (13) + Chr (10) | Retorno de carro, avanço de linha |
vbCr | Chr (13) | Retorno de carro |
vbLf | Chr (10) | Linefeed |
vbNewLine | Chr (13) + Chr (10) | Caractere de nova linha (\ n) |
vbNullChar | Chr (0) | Personagem com valor 0 |
vbNullString | 0 | String com valor 0; usado para procedimentos externos |
vbObjectError | -2147221504 | Valores maiores são números de erro definidos pelo usuário |
vbTab | Chr (9) | Tab (\ t) |
vbBack | Chr (8) | Backspace |
Dim sPt As String: sPt = vbNullString
Dim é a maneira mais comum de declarar nomes de variáveis. Ao contrário do LISP, o VBA precisa saber com antecedência os nomes das variáveis e seus tipos de dados. Embora para programadores LISP experientes as declarações pareçam um trabalho extra desnecessário, essa declaração antecipada é uma das maneiras pelas quais as rotinas VBA são executadas mais rapidamente do que as escritas em LISP.
sPt é o nome da variável (sPt é a abreviação de “ponto de corda”).
Como é a palavra-chave para declarar tipos de dados.
String é o tipo de dados.
: (dois pontos) indica o fim de uma etiqueta de linha. sPt recebe seu valor inicial:
vbNullString é uma das constantes predefinidas do VBA - assim como pi é predefinido como 3,1431… no LISP. O valor de vbNullString é 0 (não é o mesmo que uma string de comprimento zero, “”). Isso é feito para que a caixa de diálogo exiba inicialmente 0 quando o LastPoint não contém nada.
Em suma, esta linha de código define uma variável chamada “sPt” e atribui a ela o valor 0.
Dim iPrecision As Integer
iPrecision é o nome de outra variável (abreviação de “precisão do inteiro”). Seu objetivo é especificar o número de casas decimais usadas por esta função.
Como inteiro define seu tipo de dados como um inteiro, porque um inteiro é grande o suficiente para conter o valor das casas decimais, que em BricsCAD varia de 0 a 8.
Em suma, esta linha de código define uma variável chamada “iPrecision”.
iPrecision = ThisDrawing.GetVariable (“LUPREC”)
Esse desenho é a maneira do VBA de acessar dados do desenho atual - sem precisar saber seu nome.
GetVariable obtém o valor das variáveis do sistema e obtém o valor do desenho atual.
É como usar a função (getvar) no LISP.
“LuPrec”É o nome da variável do sistema que armazena o valor da precisão das unidades lineares atuais (conforme definido na caixa de diálogo Configuração). LuPrec é um nome BricsCAD e não tem nada a ver com VBA; isso significa que você pode usar a mesma linha de código para acessar o valor de qualquer variável do sistema, incluindo aquelas exclusivas de BricsCAD.
Em suma, esta linha de código obtém o valor da variável de sistema LuPrec e, em seguida, armazena-o no iPrecision.
If VarType (vIn) > vbArray Then
Se inicia a construção usual de tomada de decisão se-então encontrada em todas as linguagens de programação. (Se eles não têm nenhuma construção "se-então", então eles não são linguagens de programação.) Nesse caso, se verifica o valor de vIn.
VarType é a função que determina o tipo de dados das variáveis. Ele retorna um número inteiro que relata o tipo de dados. Depois de saber o tipo de dados, você pode realizar outro trabalho sobre eles. Nesse caso, ele verifica o tipo de dados de vIn.
> é a função maior.
vbArray é outra constante VBA; este carrega o valor de 8192. No entanto, os tipos de array sempre retornam um valor maior que 8192 para relatar o tipo de array. Uma matriz pode consistir em números, texto, booleanos e assim por diante. Em nosso programa, a matriz é o tripleto de coordenadas, como 1,2,3.
Em suma, esta linha de código verifica se o tipo de dados de vIn é uma matriz. Mais especificamente, pergunta: “O valor de vIn é maior que 8192? Se sim, então é uma matriz e o processamento pode continuar. ”
sPt = StringFromValueFixedDecimal (vIn (0), iPrecision) & “,“
StringFromValueFixedDecimal é uma função definida pelo usuário que converte um decimal em uma string e simula o número de casas decimais. (Ele é listado um pouco mais tarde no LastPoint.Dvb programa.) Ele espera dois argumentos: um número decimal e a precisão (ou seja, o número de pontos decimais a serem exibidos).
vIn (0) extrai o primeiro valor da matriz vIn. Sim, o VBA considera 0 como #1, assim como em LISP. Se vIn for 3.2,2,0, então 3.2 será extraído.
iPrecision especifica o número de casas decimais. Por exemplo, se vIn (0) é 3,2, então este
a função muda para “3.2000” (quando iPrecision é 4) ou para “3”, quando iPrecision é 0.
& é a função do VBA para concatenar (ligar) strings - o mesmo que o
Função StrCat no LISP.
“, “ é concatenado à string, resultando em sPt mantendo o valor de
“3.2000, “.
Em suma, essa linha de código converte o primeiro elemento da matriz de coordenadas em uma string com um número fixo de pontos decimais e, em seguida, adiciona uma vírgula e um espaço.
sPt = sPt & StringFromValueFixedDecimal (vIn (1), iPrecision) & “,“
Esta linha de código é idêntica à acima, mas com duas diferenças:
sPt = sPt & concatena o valor existente de sPt (“3.2000,“) com o segundo valor extraído da matriz.
StringFromValueFixedDecimal (vIn(1) extrai o segundo elemento da matriz.
Em suma, essa linha de código converte o segundo elemento da matriz de coordenadas em uma string e, em seguida, concatena-o ao primeiro elemento. sPt agora contém “3.2000, 2.0000,“. Você pode começar a ver como a matriz numérica está sendo convertida, peça por peça, em uma matriz de string.
sPt = sPt & StringFromValueFixedDecimal (vIn (2), iPrecision)
O processo se repete, com sPt agora segurando a string “3.2000, 2.0000, 0.000”.
Fim se
Fim indica o fim de uma seção.
Se indica o fim da instrução if-then. Se vIn não fosse um array, a rotina teria pulado as três linhas de código anteriores e pulado para aqui. Você consegue adivinhar o valor sPt que manteria neste caso?
PointToString = sPt
O valor de sPt é atribuído a PointToString, onde pode ser acessado por qualquer outra linha de código. (Se vIn não fosse uma matriz, o valor de sPt seria 0.)
Função Final
Fim especifica o final do módulo.
Function indica que a função chegou ao fim. Como esta é uma sub-rotina, o valor de PointToString agora é retornado para a parte principal do código, onde é usado por esta instrução:
Me.txtLastPoint.Text = PointToString (vLastpoint)
FUNÇÃO DE CONVERSÃO STRINGTOPOINT
A rotina StringToPoint remove aspas de cada string para convertê-la em um número real. Por exemplo, “3,4, 2, 0” torna-se 3,42,0. Parte do código será familiar para você acima.
Função privada StringToPoint (sIn Como corda) Como variante
Dim sCoords () Como corda: sCoords = Strings.Split (sIn, “,”)
Dim tmpPt (0 a 2) Como duplo
Se UBound (sCoords) = 0 Then
tmpPt (0) = Val (sCoords (0))
ElseIf UBound (sCoords) = 1 Then
tmpPt (0) = Val (sCoords (0))
tmpPt (1) = Val (sCoords (1))
ElseIf UBound (sCoords) = 2 Then
tmpPt (0) = Val (sCoords (0))
tmpPt (1) = Val (sCoords (1))
tmpPt (2) = Val (sCoords (2))
Fim se StringToPoint = tmpPt
Função Final
Vamos examinar o que esse código faz:
Dim sCoords () As String: sCoords = Strings.Split (sIn, “,”)
Dim sCoords () As String define a variável sCoords (classificar por “coordenadas de string) e atribui um tipo de dados de String.
Dividido divide a string em uma matriz unidimensional com o número especificado de substrings.
“,” especifica o delimitador, que informa à Divisão onde fazer a divisão. Neste caso, uma string como “3.4, 2, 0” torna-se “3.4”, “2” e “0”.
Se UBound (sCoords) = 0, então
UBound relata o tamanho de uma matriz. É útil para determinar se a função está lidando com coordenadas 2D (uma matriz de 2 elementos) ou 3D, uma matriz de três elementos.
tmpPt (0) = Val (sCoords (0))
Val converte números em strings como um valor numérico. Resumindo, o “3.4” passa a ser 3.4.
Esta sub-rotina é usada pela função txtLastPoint_BeforeUpdate.
CARREGANDO E EXECUTANDO LASTINPUT.DVB
Você pode baixar o LastInput.Dvb arquivo de minha conta Dropbox.
Siga estas etapas para carregar o programa:
- Inicie o BricsCAD.
- De Ferramentas menu, selecione VBA, e então escolher Carregar Projeto.
- Na caixa de diálogo Abrir, escolha “LastPoint.Dvb” e clique em Abrir. O programa agora está carregado em BricsCAD.
(Se a caixa de diálogo Segurança for exibida, escolha Baixoe, em seguida, clique em OK.)
Para executar o programa, siga estas etapas:
- De Ferramentas menu, selecione VBA, e então escolher Macros.
- Na caixa de diálogo Run BricsCAD VBA Macro, escolha “Module1.main”.
- Clique Corre.
Observe que a caixa de diálogo Última entrada é exibida. Se o desenho for novo (sem desenho de objetos), os campos relatam 0. - Para ver a caixa de diálogo em funcionamento, inicie o comando Linha e desenhe algumas linhas. (Esta caixa de diálogo não é modelo, o que significa que pode permanecer aberta mesmo enquanto você executa outros comandos em BricsCAD.)
- Clique Atualizar para ver a caixa de diálogo relatar os valores do último ponto, ângulo e prompt.
- Para alterar o valor do Último ponto, destaque as coordenadas e, a seguir, insira valores diferentes para x, y e z.
- Quando terminar, clique OK. A caixa de diálogo desaparece.
- pressione Esc para cancelar o comando Linha.
DICA Para incluir um projeto VBA em uma barra de ferramentas ou macro de menu, use o comando -VbaRun e forneça o nome da macro como argumento. |
RESUMO RÁPIDO DE DECLARAÇÕES DE VARIÁVEIS VBA
Declaração | Comentários |
Dim | Método padrão de declaração de variáveis: |
Quando Dim aparece dentro do procedimento, a variável está disponível apenas dentro do procedimento |
|
Quando Dim aparece na seção de declarações do módulo, a variável está disponível para todos os procedimentos dentro do módulo, mas não para outros módulos do projeto |
|
Público | Disponibiliza variáveis para todos os procedimentos em todos os módulos do projeto |
Privado | Restringe variáveis para uso apenas por procedimentos no mesmo módulo |
Estático | Variáveis retêm seus valores entre chamadas |
Opção Explícita | Todas as variáveis devem ser declaradas explicitamente dentro do módulo |
RESUMO RÁPIDO DAS REFERÊNCIAS DE ATALHO DO VBA
Prazo | Comentários |
este | Refere-se ao documento BricsCAD atual ou ativo |
Eu | Disponibiliza variáveis para cada procedimento em um módulo de classe. Usado quando uma classe tem mais de uma instância, porque Me refere-se à instância da classe no código que está sendo executado |
Comece a usar o BricsCAD hoje
Licenças permanentes ou por aluguel, que funcionam em todos os idiomas, em todas as regiões.
- Introdução
- 55 Dicas para Usuários do BricsCAD
- Configurações
- Mudar o Ambiente
- Interface de Usuário Personalizada
- Introdução ao Diálogo Personalizar
- Personalizar a barra de Menus & Menus de Contexto
- Barras de ferramentas e ícones de botão
- Escrever Macros e o Código Diesel
- Painéis e guias da faixa de opções
- Atalhos de teclas, aliases e comandos do shell
- Botões do mouse, clique duplo e tablet
- Absolutamente tudo o que você precisa saber sobre o Quad
- Propriedades de sobreposição
- Áreas de trabalho e a interface do usuário
- Projetando Painéis de Ferramentas e Estrutura
- Criando tipos de linha simples e complexos
- Padronizar Hachuras
- Decodificação de formas e fontes
- Codificação com texto do campo
- Escrevendo scripts
- Programando com LISP (Introdução)
- Funções LISP
- Escrevendo um Programa LISP Simples
- 7 dicas para programação LISP
- Projetando Caixas de Diálogo com DCL
Como fazer referência ao código livre vb6 para o bricscad
Obrigado por seu comentário! A maneira mais rápida de obter uma resposta à sua pergunta é enviar um pedido de suporte. Nossa equipe de suporte ficará feliz em ajudar. Alternativamente, você pode visitar nosso Fórum e pergunte à comunidade Bricsys.