·
MeasurementUnits. Especifica el tipo de unidades del dibujo.La sintaxis para asignar:
ObjetoPreferencias
.MeasurementUnits = IntUnidadesDibujoLa sintaxis para obtener:
IntUnidadesDibujo
= ObjetoPreferencias.MeasurementUnitsIntUnidadesDibujo
es tipo de dato Integer.·
SavePreviewThumbnail. Especifica la activación o desactivación de guardar imagen preliminar con el dibujo.La sintaxis para asignar:
ObjetoPreferencias
.SavePreviewThumbnail = IntImgPreliminarLa sintaxis para obtener:
IntImgPreliminar
= ObjetoPreferencias.SavePreviewThumbnailIntImgPreliminar
es tipo de dato Integer.·
TempFileExtension. Especifica la extensión de los archivos temporales de AutoCAD 14 (por defecto .AC$).La sintaxis para asignar:
ObjetoPreferencias
.TempFileExtension = StrExtArchivoTempLa sintaxis para obtener:
StrExtArchivoTemp
= ObjetoPreferencias.TempFileExtensionStrExtArchivoTemp
es tipo de dato String.
DOCE.11.5. Preferencias de visualización
·
CrosshairColor. Especifica el color para la cruceta del cursor (también cambia el cuadro de designación y el símbolo del SCP). Habrá de ser un valor entre 1 y 255.La sintaxis para asignar:
ObjetoPreferencias
.CrosshairColor = IntColorCursorLa sintaxis para obtener:
IntColorCursor
= ObjetoPreferencias.CrosshairColorIntColorCursor
es tipo de dato Integer, aunque también se admiten las siguientes constantes:AcRed
AcBlue
AcYellow
AcMagenta
AcCyan
AcGreen
AcWhite
·
DisplayScreenMenu. Especifica si se muestra o no el menú de pantalla.La sintaxis para asignar:
ObjetoPreferencias
.DisplayScreenMenu = BooMenúPantallaLa sintaxis para obtener:
BooMenúPantalla
= ObjetoPreferencias.DisplayScreenMenuBooMenúPantalla
es tipo de dato Boolean.·
DisplayScrollBars. Especifica si se muestran o no las barras de desplazamiento (horizontal y vertical).La sintaxis para asignar:
ObjetoPreferencias
.DisplayScrollBars = BooBarrasDesplLa sintaxis para obtener:
BooBarrasDespl
= ObjetoPreferencias.DisplayScrollBarsBooBarrasDespl
es tipo de dato Boolean.·
DockedVisibleLines. Especifica el número de líneas de comando ancladas (valor por defecto 5).La sintaxis para asignar:
ObjetoPreferencias
.DockedVisibleLines = IntNumLíneasComandoLa sintaxis para obtener:
IntNumLíneasComando
= ObjetoPreferencias.DockedVisibleLinesIntNumLíneasComando
es tipo de dato Integer.·
HistoryLines. Especifica el número de líneas en la ventana de texto que se guardan en memoria (valor por defecto 400).La sintaxis para asignar:
ObjetoPreferencias
.HistoryLines = IntNumLíneasHistorialLa sintaxis para obtener:
IntNumLíneasHistorial
= ObjetoPreferencias.HistoryLinesIntNumLíneasHistorial
es tipo de dato Integer.·
GraphicFont. Especifica la fuente que se utiliza para gráficos, es decir, el tipo de letra con el que se escriben las opciones de menú, textos en línea de comandos, etcétera.La sintaxis para asignar:
ObjetoPreferencias
.GraphicFont = StrFuenteGráficosLa sintaxis para obtener:
StrFuenteGráficos
= ObjetoPreferencias.GraphicFont
StrFuenteGráficos
·
GraphicFontSize. Especifica el tamaño de la fuente que se utiliza para gráficos.La sintaxis para asignar:
ObjetoPreferencias
.GraphicFontSize = IntTamañoFuenteGráficosLa sintaxis para obtener:
IntTamañoFuenteGráficos
= ObjetoPreferencias.GraphicFontSizeIntTamañoFuenteGráficos
es tipo de dato Integer.·
GraphicFontStyle. Especifica el estilo de la fuente que se utiliza para gráficos.La sintaxis para asignar:
ObjetoPreferencias
.GraphicFontStyle = IntEstiloFuenteGráficosLa sintaxis para obtener:
IntEstiloFuenteGráficos
= ObjetoPreferencias.GraphicFontStyleIntEstiloFuenteGráficos
es tipo de dato Integer, aunque admite las constantes siguientes:acFontRegular
acFontItalic
acFontBold
acFontBoldItalic
·
GraphicsTextBackgrndColor. Especifica el color para el fondo del texto gráfico.La sintaxis para asignar:
ObjetoPreferencias
.GraphicsTextBackgrndColor = IntColorFondoTextoGráficosLa sintaxis para obtener:
IntColorFondoTextoGráficos
= ObjetoPreferencias.GraphicsTextBackgrndColorIntColorFondoTextoGráficos
es tipo de dato Integer. El intervalo y las constantes son las mismas que para CrosshairColor.·
GraphicsTextColor. Especifica el color para el texto gráfico.La sintaxis para asignar:
ObjetoPreferencias
.GraphicsTextColor = IntColorTextoGráficosLa sintaxis para obtener:
IntColorTextoGráficos
= ObjetoPreferencias.GraphicsTextColorIntColorTextoGráficos
es tipo de dato Integer. El intervalo y las constantes son las mismas que para CrosshairColor.·
GraphicsWinBackgrndColor. Especifica el color para el fondo de la ventana gráfica.La sintaxis para asignar:
ObjetoPreferencias
La sintaxis para obtener:
IntColorFondoVentanaGráfica
= ObjetoPreferencias.GraphicsWinBackgrndColorIntColorFondoVentanaGráfica
es tipo de dato Integer. El intervalo y las constantes son las mismas que para CrosshairColor.·
MaxAutoCADWindow. Especifica la activación de maximizar o no AutoCAD al iniciar.La sintaxis para asignar:
ObjetoPreferencias
.MaxAutoCADWindow = BooMaximizarLa sintaxis para obtener:
BooMaximizar
= ObjetoPreferencias.MaxAutoCADWindowBooMaximizar
es tipo de dato Boolean.·
MonochromeVectors. Especifica la activación o desactivación de los vectores monocromo.La sintaxis para asignar:
ObjetoPreferencias
.MonochromeVectors = BooVectoresMonocromoLa sintaxis para obtener:
BooVectoresMonocromo
= ObjetoPreferencias.MonochromeVectorsBooVectoresMonocromo
es tipo de dato Boolean.·
TextFont. Especifica la fuente que se utiliza para textos.La sintaxis para asignar:
ObjetoPreferencias
.TextFont = StrFuenteTextosLa sintaxis para obtener:
StrFuenteTextos
= ObjetoPreferencias.TextFontStrFuenteTextos
es tipo de dato String.·
TextFontSize. Especifica el tamaño de la fuente que se utiliza para textos.La sintaxis para asignar:
ObjetoPreferencias
.TextFontSize = IntTamañoFuenteTextosLa sintaxis para obtener:
IntTamañoFuenteTextos
= ObjetoPreferencias.TextFontSizeIntTamañoFuenteTextos
es tipo de dato Integer.·
TextFontStyle. Especifica el estilo de la fuente que se utiliza para textos.La sintaxis para asignar:
ObjetoPreferencias
La sintaxis para obtener:
IntEstiloFuenteTextos
= ObjetoPreferencias.TextFontStyleIntEstiloFuenteTextos
es tipo de dato Integer, aunque admite las constantes siguientes:acFontRegular
acFontItalic
acFontBold
acFontBoldItalic
·
TextWinBackgrndColor. Especifica el color para el fondo de la ventana de texto.La sintaxis para asignar:
ObjetoPreferencias
.TextWinBackgrndColor = IntColorFondoVentanaTextoLa sintaxis para obtener:
IntColorFondoVentanaTexto
= ObjetoPreferencias.TextWinBackgrndColorIntColorFondoVentanaTexto
es tipo de dato Integer. El intervalo y las constantes son las mismas que para CrosshairColor.·
TextWinTextColor. Especifica el color para el texto de la ventana de texto.La sintaxis para asignar:
ObjetoPreferencias
La sintaxis para obtener:
IntColorTextoVentanaTexto
= ObjetoPreferencias.TextWinTextColorIntColorTextoVentanaTexto
es tipo de dato Integer. El intervalo y las constantes son las mismas que para CrosshairColor.
DOCE.11.6. Preferencia de dispositivo
·
CursorSize. Especifica el tamaño del cursor gráfico (como porcentaje respecto a la pantalla). Será un valor de 0 a 100.La sintaxis para asignar:
ObjetoPreferencias
.CursorSize = IntTamañoCursorLa sintaxis para obtener:
IntTamañoCursor
= ObjetoPreferencias.CursorSizeIntTamañoCursor
es tipo de dato Integer.
DOCE.11.7. Preferencia de perfil
·
ActiveProfile. Especifica el perfil de usuario activo.La sintaxis para asignar:
ObjetoPreferencias
.ActiveProfile = StrPerfilLa sintaxis para obtener:
StrPerfil
= ObjetoPreferencias.ActiveProfileStrPerfil
es tipo de dato String.
DOCE.11.8. Métodos del objeto de preferencias
Una vez vistas las propiedades pasamos a los métodos. Los métodos siguientes se corresponden con las acciones de los botones existentes en el cuadro de la pestaña Perfil del cuadro Preferencias de AutoCAD 14.
·
DeleteProfile. Elimina un perfil de usuario de AutoCAD.ObjPreferencias
.DeleteProfile(StrPerfilElim)StrPerfilElim
es un valor String que especifica el nombre del perfil que se desea eliminar.·
ExportProfile. Exporta un perfil de usuario de AutoCAD.ObjPreferencias
.DeleteProfile(StrPerfilExport, StrArchivoARG)StrPerfilExport
es un valor String que especifica el nombre del perfil que se desea exportar. StrArchivoARG es un valor de tipo String también, el cual indica la ruta y el nombre del archivo donde se exporta el perfil para su posterior uso. El archivo será de extensión .ARG.·
GetProjectFilePath. Obtiene el camino de búsqueda de referencias externas asociado con el proyecto cuyo nombre se indica.StrDirectorio = ObjPreferencias
.GetProjectFilePath(StrNombreProyecto)StrNombreProyecto
es un valor String que especifica el nombre del proyecto. StrDirectorio es una variable de tipo String que recogerá el directorio donde AutoCAD buscará referencias externas.·
ImportProfile. La sintaxis de este método es:ObjPreferencias
.DeleteProfile(StrPerfilImport, StrArchivoARG, IncluirCamino)ImportProfile
importa el perfil de usuario cuyo nombre se indica de un archivo de registro de perfiles con la extensión .ARG. El último argumento es un valor booleano (Boolean) que determina si se incluye el camino de acceso en la información del perfil. Si el valor es True se incluirá dicho camino; en caso contrario (False) no.·
ResetProfile. La sintaxis de este método es:ObjPreferencias
.ResetProfile(StrPerfilInic)ResetProfile
inicializa el perfil que se indica (como cadena String), estableciendo todas las características con los valores por defecto.·
SetProjectFilePath. Crea un nuevo proyecto con el nombre indicado y le asigna o asocia un camino de búsqueda para referencias externas cuando se trabaje con él.La sintaxis de este método es:
ObjPreferencias
.SetProjectFilePath(StrNombreProyecto, StrDirectorioRefX)StrNombreProyecto
es un valor String que especifica el nombre del proyecto. StrDirectorioRefX es una variable de tipo String que recogerá el directorio donde AutoCAD buscará referencias externas.
6ª fase intermedia de ejercicios
·
Prográmese algún ejemplo que actúe sobre las preferencias de AutoCAD 14..
DOCE.12. ALGUNOS TRUCOS ActiveX Automation
PARA AutoCAD 14
En esta sección simplemente se quieren mostrar algunos trucos o técnicas útiles a la hora de programar en VBA para AutoCAD 14. Existe a veces un vacío en el programador cuando se encuentra con situaciones que no sabe resolver. La mayor parte de estas situaciones tienen solución, sólo hay que saber encontrarla y, para ello, hacen mucha falta horas de programación y experiencia.
Aquí se explica un pequeño grupo de técnicas que pueden resolver algunos problemas a la hora de hacer programas para AutoCAD.
DOCE.12.1. Compilación de programas con un compi-
lador de Visual Basic externo
Como nos habremos dado cuenta a la hora de programar a lo largo de este MÓDULO DOCE, resulta un poco fastidioso el mecanismo de VBA en el momento de ejecutar un programa. Si este dispone de letrero de diálogo se cambia automáticamente a la ventana de AutoCAD (siempre que no esté minimizada), pero si es una macro simplemente, hemos de cambiar manualmente.
Además de ello, en cuanto el programa termina se vuelve al editor VBA, ya que hemos de tenerlo siempre abierto para ejecutar un programa. Esto no es nada elegante si nuestro deseo es distribuir o vender un programa. Con el consabido temor a que alguien además haga suyo nuestro código fuente.
Para evitar todos estos problemas podemos recurrir a un compilador externo de Visual Basic, como Visual Basic 5.0 o Visual Basic 6.0. De esta manera, únicamente hemos de compilar el programa para crear una aplicación
.EXE independiente (pero que sólo correrá bajo AutoCAD).Sin embargo, compilar un proyecto VBA en un editor externo de Visual Basic no es un camino de rosas. Tampoco pensemos que es un infierno, no, es sencillo, pero hay que seguir una serie de pasos y unas normas para que todo funcione correctamente. Veamos cuáles son.
Primero. El primer paso consiste, evidentemente, en conseguir una distribución de Visual Basic. Sin el compilador no podremos hacer nada, como es lógico. Aquí se explicarán los pasos refiriéndonos a Visual Basic 5.0.
Segundo. Un compilador de Visual Basic no lee archivos binarios
.DVB (los del VBA de AutoCAD), por lo que habrá que exportar los archivos a un formato comprensible. Para ello, y desde la ventana de proyecto de VBA, seleccionamos uno por uno los archivos de nuestro proyecto (los de formulario, módulo...) y, pulsando sobre ellos con el botón derecho del ratón elegimos la opción Exportar archivo... del menú contextual.Todos los archivos resultantes los guardaremos en una sola carpeta en el disco duro para mayor organización final. Los elementos, según su condición, se exportan a un archivo diferente según la siguiente tabla:
Elemento VBA Al exportar es un archivo de Visual Basic
Formulario .FRM Módulo .BAS Módulo de clase .CLS
Tercero
. Exportados y guardados como archivos todos los elementos, hemos de pasarlos a Visual Basic. Aquí abriremos un nuevo proyecto y lo dejaremos vacío de formularios y módulos de código (eliminando el formulario que aparece por defecto).Ahora hemos de pulsar con el botón derecho en un espacio vacío (blanco) de la ventana de proyecto y elegir Agregar>Formulario.... En el cuadro de diálogo buscaremos y abriremos el archivo .FRM generado del proyecto en VBA. Lo mismo para los módulos de código y demás. Es decir, crearemos un sólo proyecto de Visual Basic .VBP agregando o anexando todos los trozos extraídos del proyecto de VBA. Al final podemos guardarlo todo.
Cuarto. Muy importante es una cosa. Puede que al intentar añadir un formulario nos dé un error Visual Basic. Procuremos antes de nada elegir la referencia a la librería de objetos de AutoCAD ( Este último componente es el que utiliza el VBA de AutoCAD 14 como predeterminado; es la librería de objetos insertables en los formularios: cuadros de lista, listas desplegables, botones, etcétera. Si en el formulario hay algún elemento que no se encuentra en la librería por defecto de Visual Basic, como por ejemplo la página múltiple (la ventana con pestañas), puede que se produzca un error al agregar el formulario.
Las referencias expuestas dicen relación a VBA. La más importante es Quinto. Una vez hecho todo lo anterior hemos de repasar el código para encontrar incompatibilidades de VBA con Visual Basic. Por ejemplo, sabemos que el documento actual activo puede ser referenciado desde VBA con el término Desde Visual Basic es indispensable utilizar la sintaxis que hemos venido usando hasta ahora, por ejemplo:
Dim AcadDoc as Object De esta forma hacemos referencia a la aplicación AutoCAD y a su librería de objetos. A partir de aquí ningún método o propiedad será considerada por Visual Basic como un error de sintaxis o de falta de declaración de variables.
Otra serie de errores nos producen todas las constantes equivalentes a valores NOTA IMPORTANTE DE SINTAXIS: No se ha comentado a lo largo de este MÓDULO ninguno de los valores enteros correspondientes con las diversas constantes, sino únicamente ellas. Cada lista de constantes en estas páginas está ordenada de izquierda a derecha y de arriba a abajo (sentido lógico de lectura). Pues bien, los valores enteros se encuentran también en dicho orden, comenzando siempre por el cero ( En última instancia, si no pudiéramos solucionar un error de esta índole por alguno de estos métodos, bastaría deshacernos de la sentencia Sexto. El proyecto a nivel estético en Visual Basic es mucho más agradecido que en VBA. Ahora, y antes de la compilación, podremos agregar un icono propio a cada formulario, anular o no los botones de maximizar y minimizar, etcétera. Esto va con el gusto del programador.
Séptimo. Este paso es el de la compilación. Simplemente consiste en dirigirnos a Archivo>Generar Proyecto1.exe... (esta opción cambia, pero la primera vez probablemente sea este el título), elegir la opción, darle un título al ejecutable y pulsar el botón Aceptar.
Si se nos ofrece algún error de compilación sin depurar de los mencionados en el paso anterior, simplemente habremos de seguir las instrucciones pertinentes ya comentadas para solucionarlo.
Octavo. Una vez en disposición de un ejecutable válido, se nos presenta el problema de la ejecución desde AutoCAD. El archivo objeto es La manera de cargar un ejecutable compilado con Visual Basic es con la función (STARTAPP "c:/vbacom/trazado.exe")
Esta línea puede formar parte de un programa AutoLISP, de la macro de un botón, de una opción de menú o de un archivo de guión, además de poder teclearla directamente en la línea de comandos.
De esta manera, queda así explicada la forma de crear aplicaciones con VBA y Visual Basic para AutoCAD que no necesiten el editor VBA para funcionar y también, que no tengan el código fuente a la vista.
Aún así, AutoCAD 14 deberá estar ejecutándose para que estos programas funcionen correctamente, de forma evidente. También hemos de tener en cuenta a la hora de correr nuestros programas en otras máquinas, la necesidad de ciertos archivos (librerías de objetos y demás) para que todo funcione a la perfección.
Por último, reseñar la necesidad de comprobar los derechos de autor de ciertos archivos al distribuirlos de manera gratuita o por una cantidad dineraria.
Al compilar un programa VBA con un Visual Basic externo, se puede dar el caso de que el usuario lo pretenda ejecutar sin tener AutoCAD arrancado. En este caso el programa ofrecería un error.
Para evitar este trance, se suele añadir al programa un código parecido al siguiente, para que se ejecute nada más empezar:
Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument
compilados
On Error Resume Next Set AcadApp = GetObject(, "AutoCAD.Application") If Err Then Err.Clear Set AcadApp = CreateObject("AutoCAD.Application") If Err Then MsgBox Err.Description Exit Sub End If End If
De esta manera, se intenta acceder con
GetObject al objeto de aplicación de AutoCAD (previamente declarado como Object, al igual que siempre). Si se produce un error se procura crear un objeto de aplicación de AutoCAD (con CreateObject). Lo que hará este mecanismo es arrancar AutoCAD si lo encuentra y no se produce ningún error. Por último, y si esto falla, se presenta un mensaje de error con la descripción del mismo.Por defecto la aplicación de AutoCAD se inicia con la propiedad de visibilidad desactivada, por lo que habrá que activarla así, por ejemplo:
AcadApp.Visible = True
Después, y si nos interesa, podremos darle tamaño a la ventana, por ejemplo así:
acadApp.Top = 0
acadApp.Left = 0
acadApp.Width = 400
acadApp.Height = 400
A menudo el orden de las propiedades del objeto no es importante, pero en este caso sí lo es. Dado que el tamaño de la ventana de aplicación se mide desde la esquina superior izquierda de la ventana, el ajuste de las propiedades
Width o Height antes que Top o Left provoca un comportamiento no recomendable.
DOCE.12.2. Ejecución de programas VBA desde Auto-
LISP y en macros
Así como la función
STARTAPP, comentada en la sección anterior, nos es útil para ejecutar aplicaciones Windows, puede que lo que nos interese es mantener el programa VBA sin compilar y necesitemos ejecutarlo sin necesidad de hacer pasar al usuario por todo el proceso de cargar un proyecto, etcétera; es decir, hacerlo de una manera automática.Desde un programa en AutoLISP podremos utilizar sin ningún problema los comandos que se añaden al instalar VB, es decir
_VBALOAD, _-VBARUN y _VBAUNLOAD. Imaginemos que disponemos de una macro creada en un archivo que es de proyecto de VBA llamado PRUEBA.DVB, que se encuentra en el directorio C:\VBA\. Para cargarlo podríamos incluir las siguientes líneas en un archivo AutoLISP:(COMMAND "_VBALOAD" "c:\\vba\\prueba.dvb")
(COMMAND "_-VBARUN" "Módulo1.MacroPrueba")
(COMMAND "_VBAUNLOAD")
Lo primero es cargar el archivo con
VBLOAD (incluimos el guión de subrayado por mayor compatibilidad, como ya sabemos).Después hemos de ejecutar la macro. Para ello utilizamos el comando
VBARUN con el guión normal (-) por delante para ejecutar su versión de línea de comandos. La manera de ejecutar una macro desde la línea de comandos es con la sintaxis que se indica, es decir: primero el nombre del módulo de código que la contiene, luego un punto (.) y por último el nombre de la macro. Aquí el nombre del módulo es Módulo1 (nombre por defecto) y el de la macro definida dentro de él es MacroPrueba.Al final hemos de descargar el programa o proyecto. Para ello utilizamos
VBAUNLOAD. El programa se descargará al finalizar su ejecución.NOTA: A esta serie de funciones se le puede añadir código para controlar la existencia del archivo, de la macro, etcétera.
Si lo que deseamos ejecutar no es una macro dentro de un módulo sino un programa con su letrero de diálogo (formulario) y demás, la práctica lógica pasa por crear una macro en un módulo de dicho programa que muestre el formulario principal, ya que no se puede llamar a otro elemento que no sea una macro con
VBARUN. Por ejemplo, en un programa que arranque con un formulario llamado formPrincipal, creamos una macro (en el módulo Módulo1) tal que así:Sub Arranque() formPrincipal.Show End Sub
De esta manera luego podemos dirigirnos desde AutoLISP a esta macro así:
(COMMAND "_-VBARUN" "Módulo1.Arranque")
lo que hará ejecutarse el programa normalmente.
A la hora de ejecutar programas VBA desde una macro (botón, menú o archivo de guión), podemos incluir el código anterior en AutoLISP, ya que resultaría como si lo estuviéramos entrando en línea de comandos.
Sin embargo, por las propias características de las macros, podemos incluir la serie de comandos sin necesidad de hacer intervenir a AutoLISP por ningún lado. Así por ejemplo, la macro de un botón de barra de herramientas que cargue un programa podría ser:
^C^C_VBALOAD c:/misdoc~1/autocad/vba/trazado.dvb;_-VBARUN Módulo1.Macro;_VBAUNLOAD
NOTA
: Ténganse en cuenta las propias características de cada tipo de macro, sea de dentro de un botón, de un archivo de guión, etcétera.Por último decir que en la máquina que se escriban estos comandos habrá de estar instalado VBA para AutoCAD, sino no funcionará. Es por esto, que a la hora de distribuir aplicaciones se recomiende la compilación explicada en la sección anterior (DOCE.12.1.).
DOCE.12.3. Enviar cadenas a la línea de comandos A veces quizá nos interese, desde un programa VBA, acceder a la línea de comandos de AutoCAD para ejecutar algún comando, por ejemplo. O nos sea necesario ejecutar una función o una secuencia de funciones en AutoLISP, porque su efecto no podemos o no sabemos conseguirlo con VBA.
Para ello disponemos de un pequeño truco, el cual consiste en utilizar la instrucción SendKeys Cadena[,Modo_espera]
Donde Para poder hacer funcionar este mecanismo habremos de ayudarnos de la instrucción AppActivate Título[,Modo_espera]
AppActivate Pero veamos un ejemplo:
desde VBA
Option Explicit Dim AcadApp As Object Dim AcadCommand As String
Sub Macro() Set AcadApp = GetObject(, "AutoCAD.Application") AppActivate AcadApp.Caption AcadCommand = "_.open " SendKeys AcadCommand, True End Sub
A continuación se define y envía la cadena a la línea de comandos. En este caso es el comando para abrir un archivo. Nótese que ha de dejarse un espacio blanco al final para emular un
INTRO, ya que es como si estuviéramos escribiendo en línea de comandos.
NOTA: Un
Como se ha dicho,
SendKeys se utiliza para enviar pulsaciones de teclas (para pulsar botones desde código, ejecutar opciones de menú, etc.). En AutoCAD, como sabemos, si escribimos algo directamente teniendo delante la interfaz gráfica donde primero se refleja es en la línea de comandos. De ahí este mecanismo para este problema.Podemos también enviar código AutoLISP o lo que nos apetezca. Incluso se podría hacer que un programa VBA leyera línea por línea un archivo
.LSP y lo fuera enviando a la línea de comandos. Sin embargo esto es un poco peligroso, ya que un programa completo AutoLISP espera respuestas por parte del usuario, abre cuadros DCL, etc., y el programa VBA seguiría mandando líneas y líneas sin parar. Aunque se puede conseguir que esto funcione, lo lógico es reservarlo para acciones simples y cortas, programando el resto del código en VBA.Aún así, veremos un ejemplo más práctico que el anterior con código en AutoLISP. Sabemos que VBA no dispone (como AutoLISP) de un método o propiedad que llame al cuadro de color de AutoCAD 14. Pues mezclando algunas técnicas podremos hacer desde VBA que se llame a dicho cuadro utilizando AutoLISP para luego acabar con el resultado en una variable VBA. Veamos el código:
Option Explicit Dim AcadApp As Object Dim AcadDoc As Object
Sub Macro() Dim AcadCommand As String Set AcadApp = GetObject(, "AutoCAD.Application") Set AcadDoc = AcadApp.ActiveDocument AppActivate AcadApp.Caption AcadCommand = "{(}SETVAR ""useri1"" {(}SETQ NumCol {(}ACAD_COLORDLG 256{)}{)}{)} " SendKeys AcadCommand, True End Sub
Sub Macro2() Dim NúmeroColor As Integer NúmeroColor = AcadDoc.GetVariable("useri1") MsgBox "Elegido color: " & NúmeroColor End Sub
También debemos saber, que en Visual Basic para introducir comillas dentro de una cadena hemos de indicar estos caracteres como dobles (
""), para que no se confundan con las comillas propias de la cadena de texto.Según todo esto, una secuencia AutoLISP que sería así:
(SETVAR ""useri1"" (SETQ NumCol (ACAD_COLORDLG 256)))
se convierte en esto:
{(}SETVAR ""useri1"" {(}SETQ NumCol {(}ACAD_COLORDLG 256{)}{)}{)}
Aquí lo que hacemos es introducir directamente el valor de la variable de AutoLISP que creamos, llamada
NumCol, la cual recoge el color seleccionado en el cuadro, en una de las variables de usuario para valores enteros de AutoCAD, USERI1.NOTA: Repásese la sección NUEVE.3.6. para recordar el sentido de estas quince variables de diferentes tipos. Ahora les hemos encontrado otro quehacer.
Macro2
simplemente se limita a extraer el valor de USERI1, con el método GetVariable del objeto de documento activo, y a mostrarlo. Estas variables de usuario son accesibles del mismo modo que las demás variables de sistema.NOTA: Primero ejecutaremos
Macro y después Macro2.DOCE.13. COMO APUNTE FINAL
Como se advirtió al principio de este MÓDULO, la comprensión del mismo pasa por el conocimiento obligado por parte del lector de la programación en Visual Basic. Aquí, según se ha visto, se le pega simplemente un gran repaso a todos los métodos y propiedades que componen la inclusión de VBA en AutoCAD 14.
Aún así, el autor de este curso cree que no resulta harto complicado la comprensión del mismo, ya que los ejemplos, los ejercicios y las explicaciones detalladas pueden ayudarnos a comenzar a programar en un lenguaje tan sencillo y versátil como es Visual Basic, sin dejar de lado por supuesto a la parte que le toca al, todavía algo verde, VBA de AutoCAD 14.
DOCE.FIN. EJERCICIOS PROPUESTOS
II. Crear una macro VBA que permita añadir líneas de ejes a arcos, círculos y/o elipses previamente seleccionados.
III. Programar un ejemplo en VBA que permita cambiar la altura a todos los textos del dibujo actual. El letrero de diálogo puede ser este mismo:
IV. Realizar una serie de programas en AUTOLISP/DCL y en VBA los cuales permitan aprovechar al completo las capacidades de AutoCAD 14 a la hora de trabajar con él en cualquiera que sea el puesto de trabajo. Un proyecto de personalización completo puede incluir diseños de menús, barras de herramientas, etcétera; en fin todo lo que hemos estudiado a lo largo de este curso.
Autor:
Para: La Web del Programador.