Tecnología de fusión entre Delphi y Word
1. Significado del código VBA
Microsoft Word es un entorno integrado y un sistema de procesamiento de textos de Microsoft Corporation en los Estados Unidos. Sin embargo, no es solo un sistema de procesamiento de textos. Integra Microsoft Visual Basic y puede ampliar las funciones de Word a través de la programación.
El código de Microsoft Visual Basic en Word es la macro de Word. Al escribir macros de Word, puede realizar la automatización de algunos procesamientos de documentos, como la copia de seguridad y el guardado automático de documentos, etc., lo que puede ampliar las funciones de los documentos de Word. Por lo tanto, puede aprovechar al máximo las funciones de Word e incluso hacer que Word forme parte de su propio software.
Las macros de Word tienen algunos beneficios, porque pueden ayudarnos a automatizar documentos, pero las macros de Word no son puramente beneficiosas. A veces pueden dañar nuestros documentos, sistemas informáticos e incluso redes, empezando por el virus de macro NO1 de Taiwán. El actual virus de macro Melissa ha desaparecido. un simple mensaje al principio para agotar los recursos del sistema y enviar correos electrónicos aleatorios, enviar información personal a la red e incluso al Autoexec.bat (archivo por lotes automático) en el disco duro. Agregue Deltree C: -y, destruye todo el sistema Windows.
2. Tecnología de comunicación integrada en Word
Se puede decir que Word es el software con mejor soporte para la tecnología COM. Parece demasiado extremo decir esto, pero la poderosa tecnología de interfaz de programación proporcionada por Word puede permitirnos controlar cualquier parte de Word a través de programas. Ya sea abriendo, guardando, imprimiendo o dibujando tablas automáticamente en documentos.
A través del software de programación, puede manipular Word de manera flexible. Aquí solo tomamos Borland Delphi como ejemplo para describirlo en detalle:
1. Cómo llamar software/archivos de Word en Delphi
Hay tres formas de llamar al software Word en Word:
. Incrustar Word a través del control TOleContainer de Delphi
a. Utilice el control de Servidores proporcionado por Delphi para llamar a Word y utilizar las propiedades de Word.
b A través de la tecnología Com real, importe todas las bibliotecas de clases en el archivo MSWORD9.OLB en el directorio del software de Office a Delphi y use la tecnología Com para programar.
c. Utilice CreateOleObject para iniciar Word y luego controlar Word en modo Ole.
2. Juicio de la dificultad de varios métodos.
a. Incrustar Word a través del control TOleContainer de Delphi.
Esta es la incrustación de Ole más simple, que puede llamar directamente al documento de Word. Solo necesita usar ToleContainer.Run para iniciar el documento de Word directamente. Y el documento de Word iniciado de esta manera está integrado con el programa Delphi (desde el punto de vista de la interfaz), pero tiene un defecto insuperable, es decir, el documento de Word no se puede controlar a través de Delphi y el propósito de manipular Word de manera flexible no puede lograrse.
b. Utilice el control de Servidores proporcionado por Delphi para llamar a Word y utilizar las propiedades de Word.
Utilice el control de servidores de Delphi para controlar Word. Delphi puede implementar indicaciones de código durante la programación. En términos generales, puede realizar mejor el control de Word por parte de Delphi. Sin embargo, todavía hay algunas funciones de Word que no se pueden llamar en Delphi (como VBA escrita por usted mismo). ). Y si la función es originalmente opcional en el código VBA, los parámetros deben agregarse al llamar a Delphi; de lo contrario, ni siquiera la compilación pasará. Los programas Word y Delphi iniciados de esta manera pertenecen a dos formas respectivamente. Este método sólo se puede utilizar como referencia.
c Utilice tecnología Com real para importar todas las bibliotecas de clases en el archivo MSWORD9.OLB en el directorio del software de Office a Delphi, use tecnología Com para programar, use tecnología Com real para importar la biblioteca de clases de archivos MsWord9.OLD y luego use Com. tecnología al uso del programa. En general, es similar a usar el control de Servidores de Delphi. Es un poco más problemático que el control de Servidores. Las ventajas y desventajas son las mismas que las del control de Servidores.
d. Utilice CreateOleObject para iniciar Word y luego controlar Word en modo Ole.
Este método consiste en utilizar el método CreateOleObjects para llamar a Word, que en realidad es Ole, pero este método realmente puede controlar completamente el archivo de Word y utilizar todas las propiedades de Word, incluido el código de macro VBA escrito por usted mismo.
En comparación con el control de servidores y la tecnología COM, este método realmente puede utilizar varias propiedades de Word. Es básicamente lo mismo que escribir su propio código en VBA y no es necesario utilizar el código predeterminado. Los programas Word y Delphi iniciados de esta manera pertenecen a dos formas respectivamente. La desventaja es que no hay un mensaje de código Delphi cuando se utiliza este método. Todo el manejo de excepciones debe escribirlo usted mismo y puede tener más conocimiento exploratorio al escribir.
3. Editor de macros de Word
Word realmente puede editar código VBA y escribir formularios y funciones.
Cómo ingresar al editor de macros de Word: Herramientas->Macros->Editor de Visual Basic para ingresar a la interfaz del editor de Visual Basic. La interfaz del editor Visual Basic de Word es básicamente la misma que la del editor Visual Basic real y no se describirá en detalle aquí. En el código VBA, puede agregar formularios de usuario, módulos y módulos de clase. Los conceptos de formularios de usuario, módulos y módulos de clase son exactamente los mismos que los de Visual Basic. Los comentarios también son exactamente iguales que en Visual Basic.
Puede colocar el cursor en cualquier subrutina del formulario o módulo y presionar directamente "F5" para ejecutar la subrutina actual.
4. Descripción general de las macros de Word
Word combina completamente la edición de documentos y VB para automatizar verdaderamente los documentos. Programar con Word es similar a usar Visual Basic. La diferencia es que en Word puede ejecutar directamente una determinada subrutina y ver los resultados directamente. Las macros de Word solo se pueden interpretar y ejecutar, mientras que Visual Basic ahora se puede escribir en programas reales. Desde la perspectiva de la protección del código, la cantidad de códigos VBA en Word debe reducirse tanto como sea posible, especialmente los códigos clave.
Las macros de VBA se pueden dividir en cuatro tipos:
1. Macro con el mismo nombre que el comando.
Como FileSave, FileOpen, si el código VBA contiene funciones con el mismo nombre que Word, estos códigos VBA se ejecutarán directamente, ignorando los comandos del propio Word.
2. Macros específicas en Word
Estas macros incluyen AutoExec (iniciar Word o cargar plantillas globales), AutoNew (cada vez que se crea un nuevo documento), AutoOpen (cada vez que se abre un documento existente), AutoClose (cada vez que se cierra un documento), AutoExit (salir de Word o descarga de plantillas globales) hora).
Si el código VBA contiene funciones con estos nombres, el código correspondiente se ejecutará automáticamente si se cumplen las condiciones correspondientes.
3. Macro de VBA para los eventos correspondientes
Estas macros son macros activadas por eventos. Por ejemplo, Document_Close activa un evento cuando se cierra el documento, Document_New se activa cuando se crea un nuevo documento y Document_Open se activa cuando se abre el documento.
4. Macro independiente
El código VBA que usted mismo escribe, es decir, el código VBA que no se encuentra en las situaciones anteriores, puede ser llamado por otros códigos VBA y, lo que es más importante, puede ser llamado por otros programas.
De esta forma, podemos descartar las macros ejecutadas automáticamente por Word y llamar directamente a las macros correspondientes a través de Delphi para lograr el objetivo.
[b]5. Descripción detallada de las macros de comandos de Word[/b]
Word en sí contiene muchas funciones de comando, pero ni la ayuda en línea de Word ni la ayuda de MSDN proporcionan ninguna introducción a este aspecto, por lo que solo puede explorarlo a través de sus propios experimentos. Las funciones exploradas inicialmente son las siguientes:
Comentarios de explicación del nombre de la macro
ArchivoNuevo Nuevo
FileNewDefault crea un nuevo documento en blanco
ArchivoGuardar como Guardar como
ArchivoAbrir abrir
ArchivoCerrarCerrar
ArchivoPRint imprimir
Vista previa de impresión FilePrintPreview
HerramientasPersonalizar Personalización en la barra de herramientas
HerramientasOpciones opciones de herramientas
HerramientasRevisiones Resaltar revisiones
HerramientasReviewRevisions Aceptar o rechazar revisiones
HerramientasRevisiónMarcasAceptar Aceptar revisiones
ToolsRevisionMarksReject Rechazar revisión
HerramientasRevisiónMarcasAlternar revisiones
HerramientasMacro macro
HerramientasGrabarMacroAlternar Grabar nueva macro
VerSeguridad Seguridad
VerVBCode Ver el entorno del editor VB
Plantillas y complementos de FileTemplates
ToolsProtectUnprotectDocument Desprotege el documento
Insertar hipervínculo Insertar hipervínculo
Editar hipervínculo Editar hipervínculo
Eliminar hipervínculo Eliminar hipervínculo
EditLinks Ver y eliminar enlaces
EditPasteAsHyperlink Pegar hipervínculo
estilo FormatStyle
EditBookMark marcador
Algunos códigos utilizados en OleWord
1. El programa Delphi inicia Word
Utilice el método CreateOleObjects para iniciar Word y llamar al código VBA. El proceso de implementación específico es:
Primero use GetActiveOleObject('Word.application') para determinar si hay un programa de Word en la memoria actual. Si existe, conéctese directamente. Si no hay ningún programa de Word, use CreateOleObject('Word.Application') para iniciar Word.
2. Programa Delphi para crear un nuevo documento de Word
Formato: WordDocuments.Add(Plantilla,NuevaPlantilla,Tipo de documento,Visible)
Plantilla: el nombre de la plantilla a utilizar.
NewTemplate: el tipo de documento nuevo, True representa una plantilla, False representa un documento
DocumentType: tipo de documento, el valor predeterminado es un documento en blanco
Visible: si la ventana recuperada es visible
Ejemplo: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. El programa Delphi abre un documento de Word.
Formato: WordDocuments.Open(Nombre de archivo,Confirmar conversiones,Solo lectura,PassWordDocument,
Plantilla de contraseña, Revent, WritePasswordDocument, WritePassWordTemplate,
Formato, Codificación, Visible)
Nombre de archivo: nombre del documento (incluida la ruta)
Confirmar conversiones: si se muestra el cuadro de diálogo de conversión de archivos
ReadOnly: si se debe abrir el documento en modo de solo lectura
AddToRecentFiles: si se deben agregar archivos a la lista de archivos usados recientemente en la parte inferior del menú Archivo
PassWordDocument: la contraseña necesaria para abrir este documento.
PasswordTemplate: la contraseña requerida para abrir esta plantilla
Revertir: si el documento ya está allí, si se debe volver a abrir
WritePasswordDocument: Se requiere contraseña para guardar los cambios en el documento.
WritePasswordTemplate: guarda la contraseña necesaria para realizar cambios en la plantilla.
Formato: el convertidor de archivos necesario para abrir el documento.
Codificación: la página de códigos del documento utilizada.
Visible: si la ventana que abre el documento es visible
Ejemplo:
Doc_Handle:=Word_Ole.Documents.open(Nombre de archivo:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=Falso);
4. Programa Delphi para guardar documentos de Word
Formato: WordDocuments.SaveAs(Nombre de archivo, Formato de archivo, Comentarios de bloqueo, Contraseña,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
IncrustarTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
Guardar como letra AOCEL)
Nombre de archivo: nombre del archivo. El valor predeterminado es la carpeta actual y el nombre del archivo.
FileFormat El formato en el que se guarda el documento.
LockComments Si es Verdadero, sólo se permiten comentarios en este documento.
Contraseña Contraseña al abrir el documento.
AddToRecentFiles Si es Verdadero, agrega el documento a la lista de documentos usados recientemente en el menú Archivo.
WritePassword Guarda la contraseña necesaria para realizar cambios en el documento.
ReadOnlyRecommended Si es Verdadero, Word recomendará el modo de solo lectura cada vez que se abra el documento.
EmbedTrueTypeFonts Si es Verdadero, guarde el documento con fuentes TrueType.
SaveNativePictureFormat Si es Verdadero, los gráficos importados desde otras plataformas del sistema (como Macintosh) solo guardan sus versiones de Windows.
SaveFormsData Si es Verdadero, los datos ingresados por el usuario en el formulario se guardan como un registro de datos.
SaveAsAOCELetter Si el documento contiene un archivo adjunto, cuando esta propiedad sea True, guarde el documento como una carta AOCEL (y guarde el correo electrónico).
Ejemplo:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=Falso);
5. Lea archivos de la base de datos al disco duro local y lea archivos del disco duro local a la base de datos.
Utilice el campo binario Imagen para guardar en la base de datos y utilice el método Stream.
Cree una secuencia de archivos:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite o fmCreate);
Word_FileStream.Posición:=0;
Campo de imagen guardado en la base de datos:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
Leer archivos de la base de datos al disco duro local:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
Libere la secuencia de archivos:
Word_FileStream.Gratis;
6. Definición de mensaje global
Debido a que los programas Word y Delphi son dos programas, es problemático comunicarse entre sí, por lo que se utiliza el método de mensaje global. Los mensajes globales deben registrarse primero y Windows devuelve el número de mensaje inactivo del sistema. Cuando los mensajes registrados son iguales, el sistema Windows devuelve el mismo valor, asegurando así que este número de mensaje se utilice para la comunicación entre dos programas.
Cómo definir un mensaje:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);
Cómo enviar un mensaje:
SendMessage (identificador de otra parte, mensaje, el mensaje viene con variables cortas, el mensaje viene con variables largas)
7. Cómo recibe mensajes el programa Delphi
Hay dos tipos de mensajes recibidos por Delphi. Uno es sobrecargar un mensaje específico y el otro es sobrecargar la función WndProc y seleccionar el mensaje correspondiente para procesar.
El método 1 solo puede procesar un mensaje a la vez, mientras que el método 2 puede procesar varios mensajes al mismo tiempo.
Para el método dos, la declaración es la siguiente:
procedimiento WndProc(var Mensaje: Tmessage);anular
Cabe señalar que al usarlo, debe heredar la función WndProc (Mensaje) después de procesar su propio mensaje; de lo contrario, el sistema fallará.
8. Generación dinámica de cuadro de diálogo combinado y evento de cambio en Word
Cree el módulo de clase Combohander y defina eventos internamente
Público WithEvents ComboBoxEvent como Office.CommandBarComboBox
Módulo que define eventos generados por el control Combo
Dim ctlComboBoxHandler como nuevo ComboBoxHandler
Generar cuadro de diálogo combinado
Establecer Cbo_ChooseDoc = CommandBars("Menú agregado").Controls.Add(Type:=msoControlComboBox, Temporal:=True)
Establezca el identificador del archivo para generar el evento Combo_Change
Establecer ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
Después de generar el evento, seleccione el evento Cambiar de ComboBoxEvent en el módulo de clase Combohander para escribir el código del evento.
Sub ComboBoxEvent_Change (ByVal Ctrl como Office.CommandBarComboBox)
9. Algunos eventos de Word
Los eventos de Word manejados en código VBA son: Document_Close
Lo que debe procesarse en el evento Aplicación es: DocumentBeforeClose, DocumentChange.
Document_Close: evento genera un evento cuando se cierra el documento
DocumentBeforeClose: antes de cerrar el documento, Word determina si el documento se guarda, proporciona las indicaciones correspondientes y realiza el procesamiento correspondiente.
DocumentChange: el cambio de documento se genera cuando el documento se cambia entre el documento modificado por uno mismo y el documento modificado por otros. Se encarga principalmente de configurar los permisos del documento, etc.