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:


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!

ACESSANDO PROGRAMAS VBA

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

Envio de 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:

  1. 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:
    1. Do BricsCAD Ferramentas menu, escolha Segurança. Observe a caixa de diálogo Segurança.introdução toe visual básico
    2. 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.
    3. 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
    4. 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.
  2. 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.espaço de trabalho básico visual
  3. 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.codificação de aplicativos visuais básicos
  4. 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 Subcodificação

  5. Agora você tem código suficiente para executar um programa. Clique no botão Executar, que você encontra na barra de ferramentas.introdução de codificação de aplicativos noções básicas visuaisSucesso! 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.”

  1. Adicione a linha ao código no editor VBA:editando o código
  2. 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:

  1. Na paleta do projeto, clique com o botão direito Módulo 1.
  2. 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.
  3. 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:
    1. Na caixa de ferramentas, clique no item da caixa de seleção
    2. No Userform1, clique em qualquer lugar. Observe que a caixa de seleção é colocada com um texto genérico que diz “Checkbox1”.
    3. 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.
    4. 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.codificação visual 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.adicionando elementos Bricscad

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

 como o VBA realmente funciona

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:

  1. De Vista menu, escolha Pesquisador de Objetos. Observe a paleta Object Browser.elemento personalizado com vba
  2. Na lista suspensa Todas as bibliotecas, escolha BricsadDb. (Db é a abreviatura de banco de dados.)caixa de seleção suspensa
  3. Role para baixo até AcadLine. Esta é a entidade da linha BricsCAD, mas é chamada acadline para manter a compatibilidade com aplicativos VBA programados no AutoCAD.
  4. À 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.
  5. 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
Texto preto código normal
Palavras-chave VBA de texto azul
Erros de texto em vermelho na sintaxe
Pontos de execução destacados em amarelo
Pontos de interrupção de destaque em marrom

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:

  1. Inicie o BricsCAD e use o botão Ferramentas | VBA | Comando do Visual Basic for Applications para abrir o ambiente de programação VBA.
  2. Inicie um novo Userform. (No menu Inserir, escolha UserFrom.) Observe que o VBA cria uma caixa de diálogo genérica chamada UserForm1.
  3. Altere o nome na barra de título seguindo estas etapas:
    1. Abra a paleta Propriedades. (No menu Exibir, escolha Janela de propriedades.)
    2. 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.criação de elementos personalizados para o bricscad com VBC
  4. A maior parte da nossa nova caixa de diálogo consiste em três caixas de entrada de texto. O primeiro é construído assim:
    1. Na caixa de ferramentas, escolha o Caixa de texto ao controle.
    2. 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.anatomia de uma caixa
  5. 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:
    1. Certifique-se de que a caixa de texto esteja selecionada (possui alças, conforme ilustrado acima).
    2. 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á.

  6. Para adicionar o prompt, use a ferramenta Label, da seguinte maneira:
    1. Escolha Etiqueta ferramenta da caixa de ferramentas.
    2. Clique e arraste um retângulo na frente da caixa de texto. Se necessário, arraste o rótulo para a posição.
    3. Backspace sobre o texto genérico “Label1”, substituindo-o por Último Ângulo:
    4. 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.
  7. Você pode criar as outras duas caixas de entrada de texto copiando e colando:
    1. 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.
    2. pressione Ctrl+C para fazer uma cópia (armazenada na área de transferência).
    3. 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.
    4. Separe os elementos sobrepostos arrastando as cópias acima dos originais.
  8. 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.
  9. 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.
  10. É muito provável que os elementos não se alinhem perfeitamente. O VBA pode alinhá-los para você, da seguinte maneira:
    1. Selecione os três elementos de texto e clique com o botão direito.
    2. No menu de atalho, escolha Direitos. Observe que agora eles se alinham perfeitamente.
    3. Repita para as três caixas de entrada.
  11. 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.
  12. Altere sua propriedade Caption para OK.
  13. 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:

  1. Clique duas vezes no Cancelar botão. Observe que um formulário semelhante a um módulo aparece e está parcialmente preenchido.
  2. Adicione o comando para fechar a caixa de diálogo:
    Fim
  3. Você Terminou!
  4. Bem, isso não é tudo. Você ainda precisa testar se o botão Cancelar realmente funciona. Veja como:
    1. Na barra de ferramentas do VBA, clique no Corre botão. Observe que a caixa de diálogo aparece em BricsCAD.
    2. 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.
    3. Clique Cancelar. A caixa de diálogo deve desaparecer. Sim, funciona!

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:

  1. Inicie o BricsCAD.
  2. De Ferramentas menu, selecione VBA, e então escolher Carregar Projeto.
  3. 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:

  1. De Ferramentas menu, selecione VBA, e então escolher Macros.
  2. Na caixa de diálogo Run BricsCAD VBA Macro, escolha “Module1.main”.
  3. 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.
  4. 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.)
  5. Clique Atualizar para ver a caixa de diálogo relatar os valores do último ponto, ângulo e prompt.
  6. Para alterar o valor do Último ponto, destaque as coordenadas e, a seguir, insira valores diferentes para x, y e z.
  7. Quando terminar, clique OK. A caixa de diálogo desaparece.
  8. 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

Download Grátis do BricsCAD por 30 dias

Comece a usar o BricsCAD hoje

Licenças permanentes ou por aluguel, que funcionam em todos os idiomas, em todas as regiões.


  1. Introdução
  2. 55 Dicas para Usuários do BricsCAD
  3. Configurações
  4. Mudar o Ambiente
  5. Interface de Usuário Personalizada
  6. Introdução ao Diálogo Personalizar
  7. Personalizar a barra de Menus & Menus de Contexto
  8. Barras de ferramentas e ícones de botão
  9. Escrever Macros e o Código Diesel
  10. Painéis e guias da faixa de opções
  11. Atalhos de teclas, aliases e comandos do shell
  12. Botões do mouse, clique duplo e tablet
  13. Absolutamente tudo o que você precisa saber sobre o Quad
  14. Propriedades de sobreposição
  15. Áreas de trabalho e a interface do usuário
  16. Projetando Painéis de Ferramentas e Estrutura
  17. Criando tipos de linha simples e complexos
  18. Padronizar Hachuras
  19. Decodificação de formas e fontes
  20. Codificação com texto do campo
  21. Escrevendo scripts
  22. Programando com LISP (Introdução)
  23. Funções LISP
  24. Escrevendo um Programa LISP Simples
  25. 7 dicas para programação LISP
  26. Projetando Caixas de Diálogo com DCL