Technologie de fusion entre Delphi et Word
1. Signification du code VBA
Microsoft Word est un environnement intégré et un système de traitement de texte de Microsoft Corporation aux États-Unis. Cependant, il ne s'agit en aucun cas d'un simple système de traitement de texte. Il intègre Microsoft Visual Basic et peut étendre les fonctions de Word via la programmation.
Le code de Microsoft Visual Basic dans Word est la macro de Word. En écrivant des macros Word, vous pouvez réaliser l'automatisation de certains traitements de documents, tels que la sauvegarde et l'enregistrement automatiques de documents, etc., qui peuvent étendre les fonctions des documents Word. Par conséquent, vous pouvez utiliser pleinement les fonctionnalités de Word, même en intégrant Word à son propre logiciel.
Les macros de Word présentent certains avantages, car elles peuvent nous aider à automatiser des documents, mais les macros de Word ne sont pas purement bénéfiques. Parfois, elles peuvent endommager nos documents, nos systèmes informatiques et même nos réseaux, à commencer par le virus de macro Taiwan NO1. Le virus de macro Melissa actuel a disparu. une simple invite au début pour épuiser les ressources du système pour envoyer des e-mails aléatoires, envoyer des informations personnelles au réseau et même au Autoexec.bat (fichier batch automatique) sur le disque dur. Ajoutez Deltree C : -y, détruit tout le système Windows.
2. Technologie Com intégrée dans Word
On peut dire que Word est le logiciel avec le meilleur support pour la technologie COM. Cela semble un peu trop extrême de dire cela, mais la puissante technologie d'interface de programmation fournie par Word peut nous permettre de contrôler n'importe quelle partie de Word à travers des programmes. Qu'il s'agisse d'ouvrir, d'enregistrer, d'imprimer ou de dessiner automatiquement des tableaux dans des documents.
Grâce à un logiciel de programmation, vous pouvez manipuler le mot de manière flexible. Ici, nous prenons uniquement Borland Delphi comme exemple pour décrire en détail :
1. Comment appeler des logiciels/fichiers Word dans Delphi
Il existe trois manières d'appeler le logiciel Word dans Word :
. Intégration de Word via le contrôle TOleContainer de Delphi
a. Utilisez le contrôle Serveurs fourni par Delphi pour appeler Word et utiliser les propriétés de Word.
b. Grâce à la vraie technologie Com, importez toutes les bibliothèques de classes du fichier MSWORD9.OLB dans le répertoire des logiciels Office dans Delphi et utilisez la technologie Com pour programmer.
c. Utilisez CreateOleObject pour démarrer Word, puis contrôlez Word en mode Ole.
2. Jugement de la difficulté de plusieurs méthodes
a. Intégrer Word via le contrôle Delphi TOleContainer
Il s'agit de l'intégration Ole la plus simple, qui peut appeler directement le document Word. Il vous suffit d'utiliser ToleContainer.Run pour démarrer directement le document Word. Et le document Word démarré de cette manière est intégré au programme Delphi (du point de vue de l'interface), mais il présente un inconvénient insurmontable, c'est-à-dire que le document Word ne peut pas être contrôlé via Delphi et que l'objectif de manipulation flexible de Word ne peut pas être atteint.
b. Utilisez le contrôle Serveurs fourni par Delphi pour appeler Word et utiliser les propriétés de Word.
Utilisez le contrôle des serveurs de Delphi pour contrôler Word. Delphi peut implémenter des invites de code lors de la programmation. De manière générale, il peut mieux réaliser le contrôle de Word par Delphi (comme VBA écrit par vous-même). ). Et si la fonction est à l'origine facultative dans le code VBA, les paramètres doivent être ajoutés lors de l'appel de Delphi, sinon même la compilation ne passera pas. Les programmes Word et Delphi lancés de cette manière appartiennent respectivement à deux formes. Cette méthode ne peut être utilisée qu'à titre de référence.
c. Utilisez la vraie technologie Com pour importer toutes les bibliothèques de classes du fichier MSWORD9.OLB dans le répertoire des logiciels Office dans Delphi, utilisez la technologie Com pour programmer, utilisez la vraie technologie Com pour importer la bibliothèque de classes de fichiers MsWord9.OLD, puis utilisez Com. technologie à l’utilisation du programme. Dans l'ensemble, cela ressemble à l'utilisation du contrôle Serveurs de Delphi. Il est légèrement plus gênant que le contrôle Serveurs. Les avantages et les inconvénients sont les mêmes que ceux du contrôle Serveurs.
d. Utilisez CreateOleObject pour démarrer Word, puis contrôlez Word en mode Ole.
Cette méthode consiste à utiliser la méthode CreateOleObjects pour appeler Word, qui est en fait Ole, mais cette méthode peut véritablement contrôler entièrement le fichier Word et utiliser toutes les propriétés de Word, y compris le code de macro VBA écrit par vous-même.
Par rapport au contrôle des serveurs et à la technologie COM, cette méthode peut véritablement utiliser diverses propriétés de Word. C'est fondamentalement la même chose que d'écrire votre propre code dans VBA, et il n'est pas nécessaire d'utiliser le code par défaut. Les programmes Word et Delphi lancés de cette manière appartiennent respectivement à deux formes. L'inconvénient est qu'il n'y a pas d'invite de code Delphi lors de l'utilisation de cette méthode.Toute gestion des exceptions doit être écrite par vous-même, et il peut y avoir des connaissances plus exploratoires lors de l'écriture.
3. Éditeur de macros Word
Word peut véritablement modifier le code VBA et écrire des formulaires et des fonctions.
Comment accéder à l'éditeur de macros Word : Outils->Macros->Visual Basic Editor pour accéder à l'interface de l'éditeur Visual Basic. L'interface de l'éditeur Visual Basic de Word est fondamentalement la même que celle du véritable éditeur Visual Basic et ne sera pas décrite en détail ici. Dans le code VBA, vous pouvez ajouter des formulaires utilisateur, des modules et des modules de classe. Les concepts de formulaires utilisateur, de modules et de modules de classe sont exactement les mêmes que ceux de Visual Basic. Les commentaires sont également exactement les mêmes que dans Visual Basic.
Vous pouvez placer le curseur sur n'importe quel sous-programme du formulaire ou du module et appuyer directement sur "F5" pour exécuter le sous-programme en cours.
4. Présentation des macros Word
Word combine entièrement l'édition de documents et VB pour véritablement automatiser les documents. La programmation avec Word est similaire à l'utilisation de Visual Basic. La différence est que dans Word, vous pouvez exécuter directement un certain sous-programme et voir directement les résultats. Les macros de Word peuvent uniquement être interprétées et exécutées, tandis que Visual Basic peut désormais être écrit dans de vrais programmes. Du point de vue de la protection des codes, le nombre de codes VBA dans Word doit être réduit autant que possible, notamment les codes clés.
Les macros VBA peuvent être divisées en quatre types :
1. Macro du même nom que la commande
Comme FileSave, FileOpen, si le code VBA contient des fonctions du même nom que Word, ces codes VBA seront exécutés directement, en ignorant les commandes de Word lui-même.
2. Macros spécifiques dans Word
Ces macros incluent AutoExec (démarrage de Word ou chargement de modèles globaux), AutoNew (chaque fois qu'un nouveau document est créé), AutoOpen (chaque fois qu'un document existant est ouvert), AutoClose (chaque fois qu'un document est fermé), AutoExit (quitte Word ou déchargement des modèles globaux) heure).
Si le code VBA contient des fonctions portant ces noms, le code correspondant sera automatiquement exécuté si les conditions correspondantes sont remplies.
3. Macro VBA pour les événements correspondants
Ces macros sont des macros déclenchées par des événements. Par exemple, Document_Close déclenche un événement lorsque le document est fermé, Document_New se déclenche lorsqu'un nouveau document est créé et Document_Open se déclenche lorsque le document est ouvert.
4. Macro indépendante
Le code VBA que vous écrivez vous-même, c'est-à-dire le code VBA qui ne rentre pas dans les situations ci-dessus, peut être appelé par d'autres codes VBA et, plus important encore, peut être appelé par d'autres programmes.
De cette façon, nous pouvons supprimer les macros exécutées automatiquement par Word et appeler directement les macros correspondantes via Delphi pour atteindre l'objectif.
[b]5. Description détaillée des macros de commandes Word[/b]
Word lui-même contient de nombreuses fonctions de commande, mais ni l'aide en ligne de Word ni l'aide de MSDN ne fournissent d'introduction à cet aspect, vous ne pouvez donc l'explorer qu'à travers vos propres expériences. Les fonctions initialement explorées sont les suivantes :
Commentaires d'explication du nom de la macro
FichierNouveau Nouveau
FileNewDefault crée un nouveau document vierge
FileSaveAs Enregistrer sous
FichierOuvrir ouvert
FichierFermerFermer
Impression FilePRint
Aperçu avant impression de FilePrintPreview
OutilsPersonnaliser Personnalisation dans la barre d'outils
Options de l'outil OutilsOptions
OutilsRévisions Mettre en surbrillance les révisions
ToolsReviewRevisions Accepter ou rejeter les révisions
ToolsRevisionMarksAccept Accepter les révisions
ToolsRevisionMarksReject Rejeter la révision
OutilsRevisionMarksToggle Révisions
OutilsMacro macro
ToolsRecordMacroToggle Enregistrer une nouvelle macro
VoirSécurité Sécurité
ViewVBCode Afficher l'environnement de l'éditeur VB
Modèles et modules complémentaires FileTemplates
ToolsProtectUnprotectDocument Déprotège le document
InsertHyperlink Insérer un lien hypertexte
ModifierHyperlien Modifier le lien hypertexte
SupprimerHyperlink Supprimer le lien hypertexte
EditLinks Afficher et supprimer des liens
EditPasteAsHyperlink Coller le lien hypertexte
StyleFormatStyle
EditBookMark signet
Certains codes utilisés dans OleWord
1. Le programme Delphi démarre Word
Utilisez la méthode CreateOleObjects pour démarrer Word et appeler le code VBA. Le processus d'implémentation spécifique est le suivant :
Utilisez d'abord GetActiveOleObject('Word.application') pour déterminer s'il existe un programme Word dans la mémoire actuelle. S'il existe, connectez-vous directement. S'il n'y a pas de programme Word, utilisez CreateOleObject('Word.Application') pour démarrer Word.
2. Programme Delphi pour créer un nouveau document Word
Format : WordDocuments.Add (Modèle, NouveauModèle, Type de document, Visible)
Modèle : Le nom du modèle à utiliser,
NewTemplate : le type de nouveau document, True représente un modèle, False représente un document
DocumentType : type de document, la valeur par défaut est un document vierge
Visible : indique si la fenêtre récupérée est visible
Exemple : Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. Le programme Delphi ouvre le document Word
Format : WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
Modèle de mot de passe, Revent, WritePasswordDocument, WritePassWordTemplate,
Format,Encodage,Visible)
FileName : nom du document (y compris le chemin)
Confirmconversions : s'il faut afficher la boîte de dialogue de conversion de fichier
ReadOnly : s'il faut ouvrir le document en mode lecture seule
AddToRecentFiles : s'il faut ajouter des fichiers à la liste des fichiers récemment utilisés en bas du menu Fichier
PassWordDocument : Le mot de passe requis pour ouvrir ce document
PasswordTemplate : le mot de passe requis pour ouvrir ce modèle
Rétablir : si le document est déjà là, s'il faut le rouvrir
WritePasswordDocument : mot de passe requis pour enregistrer les modifications apportées au document
WritePasswordTemplate : enregistre le mot de passe requis pour apporter des modifications au modèle.
Format : Le convertisseur de fichiers nécessaire pour ouvrir le document
Encodage : La page de code du document utilisée
Visible : indique si la fenêtre qui ouvre le document est visible
Exemple:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);
4. Programme Delphi pour enregistrer un document Word
Format : WordDocuments.SaveAs (FileName, FileFormat, LockComments, Mot de passe,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
Enregistrer sous AOCELetre)
Nom de fichier : nom du fichier. La valeur par défaut est le dossier et le nom de fichier actuels.
FileFormat Le format dans lequel le document est enregistré.
LockComments Si True, seuls les commentaires sont autorisés sur ce document.
Mot de passe Mot de passe lors de l'ouverture du document.
AddToRecentFiles Si True, ajoute le document à la liste des documents récemment utilisés dans le menu Fichier.
WritePassword Enregistre le mot de passe requis pour apporter des modifications au document.
ReadOnlyRecommended Si True, Word recommandera le mode lecture seule à chaque ouverture du document.
EmbedTrueTypeFonts Si True, enregistrez le document avec les polices TrueType.
SaveNativePictureFormat Si True, les graphiques importés depuis d'autres plates-formes système (telles que Macintosh) voient uniquement leurs versions Windows enregistrées.
SaveFormsData Si True, les données saisies par l'utilisateur dans le formulaire sont enregistrées en tant qu'enregistrement de données.
SaveAsAOCELetter Si le document contient une pièce jointe, lorsque cette propriété est True, enregistrez le document sous forme de lettre AOCEL (et enregistrez l'e-mail).
Exemple:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);
5. Lisez les fichiers de la base de données sur le disque dur local et lisez les fichiers du disque dur local vers la base de données.
Utilisez le champ Image binaire pour enregistrer dans la base de données et utilisez la méthode Stream.
Créez un flux de fichiers :
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite ou fmCreate);
Word_FileStream.Position:=0;
Champ d'image enregistré dans la base de données :
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
Lire les fichiers de la base de données sur le disque dur local :
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
Libérez le flux de fichiers :
Word_FileStream.Free ;
6. Définition du message global
Étant donné que les programmes Word et Delphi sont deux logiciels, il est difficile de communiquer entre eux, c'est pourquoi la méthode du message global est utilisée. Les messages globaux doivent être enregistrés en premier et Windows renvoie le numéro de message inactif du système. Lorsque les messages enregistrés sont identiques, le système Windows renvoie la même valeur, garantissant ainsi que ce numéro de message est utilisé pour communiquer entre deux programmes.
Comment définir un message :
szMessageString : pchar = 'XIDIAN_11_Stone' ;
FMyJoinMessage := RegisterWindowMessage(szMessageString);
Comment envoyer un message :
SendMessage (descripteur tiers, message, message livré avec des variables courtes, message livré avec des variables longues)
7. Comment le programme Delphi reçoit les messages
Il existe deux types de messages reçus par Delphi. L'un consiste à surcharger un message spécifique et l'autre à surcharger la fonction WndProc et à sélectionner le message correspondant à traiter.
La méthode 1 ne peut traiter qu'un seul message à la fois, tandis que la méthode 2 peut traiter plusieurs messages en même temps.
Pour la deuxième méthode, l’énoncé est le suivant :
procédure WndProc(var Message : Tmessage);remplacer
Il faut noter que lors de son utilisation, vous devez hériter de la fonction WndProc(Message) après avoir traité votre propre message, sinon le système plantera !
8. Génération dynamique de la boîte de dialogue Combo et de l'événement Change dans Word
Créer le module de classe Combohander et définir les événements en interne
Public WithEvents ComboBoxEvent en tant que Office.CommandBarComboBox
Module qui définit les événements générés par le contrôle Combo
Dim ctlComboBoxHandler en tant que nouveau ComboBoxHandler
Boîte de dialogue Générer une combinaison
Définissez Cbo_ChooseDoc = CommandBars("Added Menu").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
Définir le handle de fichier pour générer l'événement Combo_Change
Définir ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
Une fois l'événement généré, sélectionnez l'événement Change de ComboBoxEvent dans le module de classe Combohander pour écrire le code de l'événement
Sub ComboBoxEvent_Change (ByVal Ctrl comme Office.CommandBarComboBox)
9. Quelques événements Word
Les événements Word gérés dans le code VBA sont : Document_Close
Ce qui doit être traité dans l'événement Application est : DocumentBeforeClose, DocumentChange.
Document_Close : event génère un événement lorsque le document est fermé
DocumentBeforeClose : avant la fermeture du document, Word détermine si le document est enregistré, affiche les invites correspondantes et effectue le traitement correspondant.
DocumentChange : les événements de commutation de document sont générés lorsque le document est basculé entre le document modifié par soi-même et le document modifié par d'autres. Il gère principalement la définition des autorisations du document, etc.