Fusionstechnologie zwischen Delphi und Word
1. Bedeutung des VBA-Codes
Microsoft Word ist eine integrierte Umgebung und ein Textverarbeitungssystem der Microsoft Corporation in den USA. Es ist jedoch keineswegs nur ein Textverarbeitungssystem. Es integriert Microsoft Visual Basic und kann die Funktionen von Word durch Programmierung erweitern.
Der Code von Microsoft Visual Basic in Word ist das Makro von Word. Durch das Schreiben von Word-Makros können Sie die Automatisierung einiger Dokumentverarbeitungen realisieren, z. B. das automatische Sichern und Speichern von Dokumenten usw., wodurch die Funktionen von Word-Dokumenten erweitert werden können. Daher können Sie die Funktionen von Word voll ausnutzen und Word sogar zu einem Teil Ihrer eigenen Software machen.
Die Makros von Word haben einige Vorteile, da sie uns bei der Automatisierung von Dokumenten helfen können, aber manchmal können sie unseren Dokumenten, Computersystemen und sogar Netzwerken schaden, beginnend mit dem Taiwan NO1-Makrovirus. Der aktuelle Melissa-Makrovirus ist verschwunden Eine einfache Eingabeaufforderung am Anfang erschöpft die Systemressourcen für das Senden zufälliger E-Mails, das Senden persönlicher Informationen an das Netzwerk und sogar an die Autoexec.bat (automatische Batchdatei) auf der Festplatte. Fügen Sie Deltree C hinzu: -y, zerstört das gesamte Windows-System.
2. In Word eingebettete Com-Technologie
Man kann sagen, dass Word die Software mit der besten Unterstützung für die COM-Technologie ist. Das scheint etwas zu extrem zu sein, aber die leistungsstarke Programmierschnittstellentechnologie von Word kann es uns ermöglichen, jeden Teil von Word über Programme zu steuern. Ob Öffnen, Speichern, Drucken oder automatisches Einzeichnen von Tabellen in Dokumenten.
Durch Programmiersoftware können Sie Wörter flexibel manipulieren. Hier nehmen wir nur Borland Delphi als Beispiel, um es im Detail zu beschreiben:
1. So rufen Sie Word-Software/-Dateien in Delphi auf
Es gibt drei Möglichkeiten, Word-Software in Word aufzurufen:
. Einbetten von Word über das Delphi-Steuerelement TOleContainer
a. Verwenden Sie das von Delphi bereitgestellte Server-Steuerelement, um Word aufzurufen und die Eigenschaften von Word zu verwenden
b. Importieren Sie mithilfe der echten Com-Technologie alle Klassenbibliotheken in der Datei MSWORD9.OLB im Office-Softwareverzeichnis in Delphi und verwenden Sie die Com-Technologie zum Programmieren
c. Verwenden Sie CreateOleObject, um Word zu starten, und steuern Sie Word dann im Ole-Modus.
2. Beurteilung der Schwierigkeit mehrerer Methoden
a. Einbetten von Word über das Delphi-Steuerelement TOleContainer
Dies ist die einfachste Ole-Einbettung, die das Word-Dokument direkt aufrufen kann. Sie müssen nur ToleContainer.Run verwenden, um das Word-Dokument direkt zu starten. Und das auf diese Weise gestartete Word-Dokument ist in das Delphi-Programm integriert (aus Sicht der Schnittstelle), weist jedoch einen unüberwindbaren Nachteil auf, nämlich dass das Word-Dokument nicht über Delphi gesteuert werden kann und der Zweck, Word flexibel zu manipulieren, nicht möglich ist erreicht werden.
b. Verwenden Sie das von Delphi bereitgestellte Server-Steuerelement, um Word aufzurufen und die Eigenschaften von Word zu verwenden
Verwenden Sie die Serversteuerung von Delphi, um Word zu steuern. Im Allgemeinen kann es die Steuerung von Word durch Delphi besser realisieren (z. B. von Ihnen selbst geschriebenes VBA). ). Makrocode). Und wenn die Funktion im VBA-Code ursprünglich optional ist, müssen die Parameter beim Aufruf von Delphi hinzugefügt werden, sonst schlägt auch die Kompilierung fehl. Die so gestarteten Word- und Delphi-Programme gehören jeweils zu zwei Formen. Diese Methode kann nur als Referenz verwendet werden.
c. Verwenden Sie die echte Com-Technologie, um alle Klassenbibliotheken in der Datei MSWORD9.OLB im Office-Softwareverzeichnis in Delphi zu importieren, verwenden Sie die Com-Technologie zum Programmieren, verwenden Sie die echte Com-Technologie, um die Dateiklassenbibliothek MsWord9.OLD zu importieren, und verwenden Sie dann Com Technologie zur Programmnutzung. Im Großen und Ganzen ähnelt es der Verwendung der Server-Steuerung. Es ist etwas problematischer als die Server-Steuerung. Die Vor- und Nachteile sind die gleichen wie bei der Server-Steuerung.
d. Verwenden Sie CreateOleObject, um Word zu starten, und steuern Sie Word dann im Ole-Modus.
Diese Methode besteht darin, die CreateOleObjects-Methode zum Aufrufen von Word zu verwenden, bei dem es sich eigentlich um Ole handelt. Diese Methode kann jedoch die Word-Datei wirklich vollständig steuern und alle Eigenschaften von Word verwenden, einschließlich des von Ihnen selbst geschriebenen VBA-Makrocodes.
Im Vergleich zur Serversteuerung und COM-Technologie kann diese Methode tatsächlich verschiedene Eigenschaften von Word nutzen. Sie ist im Grunde dasselbe wie das Schreiben Ihres eigenen Codes in VBA, und es besteht keine Notwendigkeit, den Standardcode zu verwenden. Die so gestarteten Word- und Delphi-Programme gehören jeweils zu zwei Formen. Der Nachteil besteht darin, dass bei Verwendung dieser Methode keine Delphi-Code-Eingabeaufforderung vorhanden ist. Die gesamte Ausnahmebehandlung muss von Ihnen selbst geschrieben werden, und beim Schreiben sind möglicherweise mehr explorative Kenntnisse erforderlich.
3. Word-Makro-Editor
Word kann VBA-Code wirklich bearbeiten und Formulare und Funktionen schreiben.
So rufen Sie den Word-Makro-Editor auf: Extras->Makros->Visual Basic-Editor, um die Visual Basic-Editor-Oberfläche aufzurufen. Die Benutzeroberfläche des Visual Basic-Editors von Word ist im Grunde dieselbe wie die des echten Visual Basic-Editors, daher werde ich hier nicht auf Details eingehen. Im VBA-Code können Sie Benutzerformulare, Module und Klassenmodule hinzufügen. Die Konzepte von Benutzerformularen, Modulen und Klassenmodulen sind genau die gleichen wie in Visual Basic. Auch Kommentare sind genau die gleichen wie in Visual Basic.
Sie können den Cursor auf ein beliebiges Unterprogramm des Formulars oder Moduls setzen und direkt „F5“ drücken, um das aktuelle Unterprogramm auszuführen.
4. Übersicht über Word-Makros
Word kombiniert Dokumentbearbeitung und VB vollständig, um Dokumente wirklich zu automatisieren. Die Programmierung mit Word ähnelt der Verwendung mit Visual Basic. Der Unterschied besteht darin, dass Sie in Word eine bestimmte Unterroutine direkt ausführen und die Ergebnisse direkt sehen können, während Visual Basic jetzt in echte Programme geschrieben werden kann. Aus Sicht des Codeschutzes sollte die Anzahl der VBA-Codes in Word, insbesondere der Schlüsselcodes, so weit wie möglich reduziert werden.
VBA-Makros können in vier Typen unterteilt werden:
1. Makro mit demselben Namen wie der Befehl
Wenn der VBA-Code beispielsweise Funktionen mit demselben Namen wie Word enthält, z. B. FileSave, FileOpen, werden diese VBA-Codes direkt ausgeführt, wobei die Befehle von Word selbst ignoriert werden.
2. Spezifische Makros in Word
Zu diesen Makros gehören AutoExec (Starten von Word oder Laden globaler Vorlagen), AutoNew (jedes Mal, wenn ein neues Dokument erstellt wird), AutoOpen (jedes Mal, wenn ein vorhandenes Dokument geöffnet wird), AutoClose (jedes Mal, wenn ein Dokument geschlossen wird), AutoExit (Beenden von Word oder Entladen globaler Vorlagen) Stunde).
Wenn der VBA-Code Funktionen mit diesen Namen enthält, wird der entsprechende Code automatisch ausgeführt, wenn die entsprechenden Bedingungen erfüllt sind.
3. VBA-Makro für entsprechende Ereignisse
Bei diesen Makros handelt es sich um Makros, die durch Ereignisse ausgelöst werden. Document_Close löst beispielsweise ein Ereignis aus, wenn das Dokument geschlossen wird, Document_New löst ein Ereignis aus, wenn ein neues Dokument erstellt wird, und Document_Open löst ein Ereignis aus, wenn das Dokument geöffnet wird.
4. Unabhängiges Makro
Der VBA-Code, den Sie selbst schreiben, dh der VBA-Code, der nicht in die oben genannten Situationen fällt, kann von anderen VBA-Codes und, was noch wichtiger ist, von anderen Programmen aufgerufen werden.
Auf diese Weise können wir die von Word automatisch ausgeführten Makros verwerfen und die entsprechenden Makros direkt über Delphi aufrufen, um das Ziel zu erreichen.
[b]5. Detaillierte Beschreibung der Word-Befehlsmakros[/b]
Word selbst enthält viele Befehlsfunktionen, aber weder die Word-Onlinehilfe noch die MSDN-Hilfe bieten eine Einführung in diesen Aspekt, sodass Sie ihn nur durch eigene Experimente erkunden können. Die zunächst untersuchten Funktionen sind wie folgt:
Kommentare zur Erläuterung des Makronamens
DateiNeu Neu
FileNewDefault erstellt ein neues leeres Dokument
FileSaveAs Speichern unter
FileOpen öffnen
FileCloseClose
FilePRINT-Druck
FilePrintPreview-Druckvorschau
ExtrasAnpassen Anpassung in der Symbolleiste
ToolsOptions-Werkzeugoptionen
ToolsRevisionen Markieren Sie Revisionen
ToolsReviewRevisions Revisionen akzeptieren oder ablehnen
ToolsRevisionMarksAccept Überarbeitungen akzeptieren
ToolsRevisionMarksReject Revision ablehnen
ToolsRevisionMarksRevisionen umschalten
ToolsMacro-Makro
ToolsRecordMacroToggle Neues Makro aufzeichnen
ViewSecurity-Sicherheit
ViewVBCode VB-Editor-Umgebung anzeigen
FileTemplates-Vorlagen und Add-ons
ToolsProtectUnprotectDocument Hebt den Schutz des Dokuments auf
Hyperlink einfügen Hyperlink einfügen
EditHyperlink Hyperlink bearbeiten
Hyperlink löschen Hyperlink löschen
EditLinks Links anzeigen und löschen
EditPasteAsHyperlink Hyperlink einfügen
FormatStyle-Stil
EditBookMark Lesezeichen
Einige in OleWord verwendete Codes
1. Das Delphi-Programm startet Word
Verwenden Sie die CreateOleObjects-Methode, um Word zu starten und den VBA-Code aufzurufen. Der spezifische Implementierungsprozess ist:
Verwenden Sie zunächst GetActiveOleObject('Word.application'), um festzustellen, ob sich im aktuellen Speicher ein Word-Programm befindet. Wenn kein Word-Programm vorhanden ist, verwenden Sie CreateOleObject('Word.Application'), um Word zu starten.
2. Delphi-Programm zum Erstellen eines neuen Word-Dokuments
Format: WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
Vorlage: Der Name der zu verwendenden Vorlage,
NewTemplate: Der Typ des neuen Dokuments, True stellt eine Vorlage dar, False stellt ein Dokument dar
DocumentType: Dokumenttyp, Standard ist leeres Dokument
Sichtbar: Ob das gerettete Fenster sichtbar ist
Beispiel: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. Das Delphi-Programm öffnet das Word-Dokument
Format: WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
Format, Kodierung, Sichtbar)
FileName: Dokumentname (einschließlich Pfad)
Konvertierungen bestätigen: Ob das Dialogfeld zur Dateikonvertierung angezeigt werden soll
ReadOnly: Ob das Dokument im schreibgeschützten Modus geöffnet werden soll
AddToRecentFiles: Legt fest, ob Dateien zur Liste der zuletzt verwendeten Dateien am unteren Rand des Dateimenüs hinzugefügt werden sollen
PassWordDocument: Das zum Öffnen dieses Dokuments erforderliche Passwort
PasswordTemplate: Das zum Öffnen dieser Vorlage erforderliche Passwort
Zurücksetzen: Wenn das Dokument bereits vorhanden ist, ob es erneut geöffnet werden soll
WritePasswordDocument: Passwort zum Speichern von Änderungen am Dokument erforderlich
WritePasswordTemplate: Speichert das erforderliche Passwort, wenn Änderungen an der Vorlage vorgenommen werden
Format: Der Dateikonverter, der zum Öffnen des Dokuments benötigt wird
Kodierung: Die verwendete Codepage des Dokuments
Sichtbar: Ob das Fenster, das das Dokument öffnet, sichtbar ist
Beispiel:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);
4. Delphi-Programm zum Speichern von Word-Dokumenten
Format: WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
Speichern unter AOCELetter)
Dateiname: Dateiname. Standardmäßig wird der aktuelle Ordner- und Dateiname verwendet.
FileFormat Das Format, in dem das Dokument gespeichert wird.
LockComments Wenn True, sind in diesem Dokument nur Kommentare zulässig.
Passwort Passwort beim Öffnen des Dokuments.
AddToRecentFiles Wenn True, wird das Dokument zur Liste der zuletzt verwendeten Dokumente im Menü „Datei“ hinzugefügt.
WritePassword Speichert das Passwort, das zum Vornehmen von Änderungen am Dokument erforderlich ist.
ReadOnlyRecommended Wenn True, empfiehlt Word bei jedem Öffnen des Dokuments den schreibgeschützten Modus.
EmbedTrueTypeFonts Wenn True, wird das Dokument mit TrueType-Schriftarten gespeichert.
SaveNativePictureFormat Wenn True, werden von anderen Systemplattformen (z. B. Macintosh) importierte Grafiken nur in ihren Windows-Versionen gespeichert.
SaveFormsData Wenn True, werden die vom Benutzer im Formular eingegebenen Daten als Datensatz gespeichert.
SaveAsAOCELetter Wenn das Dokument einen Anhang enthält und diese Eigenschaft „True“ ist, speichern Sie das Dokument als AOCEL-Brief (und speichern Sie die E-Mail).
Beispiel:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);
5. Lesen Sie Dateien von der Datenbank auf die lokale Festplatte und lesen Sie Dateien von der lokalen Festplatte in die Datenbank.
Verwenden Sie das Binärfeld „Bild“, um in der Datenbank zu speichern, und verwenden Sie die Stream-Methode.
Erstellen Sie einen Dateistream:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite oder fmCreate);
Word_FileStream.Position:=0;
Bildfeld in Datenbank gespeichert:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
Dateien von der Datenbank auf die lokale Festplatte lesen:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
Geben Sie den Dateistream frei:
Word_FileStream.Free;
6. Definition der globalen Nachricht
Da es sich bei Word- und Delphi-Programmen um zwei Softwareprogramme handelt, ist die Kommunikation untereinander problematisch. Daher wird die globale Nachrichtenmethode verwendet. Globale Nachrichten müssen zuerst registriert werden, und Windows gibt die Leerlaufnachrichtennummer des Systems zurück. Wenn die registrierten Nachrichten identisch sind, gibt das Windows-System denselben Wert zurück und stellt so sicher, dass diese Nachrichtennummer für die Kommunikation zwischen zwei Programmen verwendet wird.
So definieren Sie eine Nachricht:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);
So senden Sie eine Nachricht:
SendMessage (Handle der anderen Partei, Nachricht, Nachricht kommt mit kurzen Variablen, Nachricht kommt mit langen Variablen)
7. Wie das Delphi-Programm Nachrichten empfängt
Es gibt zwei Arten von Nachrichten, die Delphi empfängt. Die eine besteht darin, eine bestimmte Nachricht zu überladen, und die andere darin, die WndProc-Funktion zu überladen und die entsprechende Nachricht zur Verarbeitung auszuwählen.
Methode eins kann jeweils nur eine Nachricht verarbeiten, während Methode zwei mehrere Nachrichten gleichzeitig verarbeiten kann.
Für Methode zwei lautet die Aussage wie folgt:
procedure WndProc(var Message: Tmessage);override
Es ist zu beachten, dass Sie bei der Verwendung die Funktion WndProc (Message) erben müssen, nachdem Sie Ihre eigene Nachricht verarbeitet haben, da sonst das System abstürzt!
8. Dynamische Generierung eines Kombinationsdialogfelds und eines Änderungsereignisses in Word
Erstellen Sie das Klassenmodul Combohander und definieren Sie Ereignisse intern
Öffentlich WithEvents ComboBoxEvent As Office.CommandBarComboBox
Definieren Sie das Modul, das Ereignisse für das Combo-Steuerelement generiert
Dimmen Sie ctlComboBoxHandler als neuen ComboBoxHandler
Dialogfeld „Kombination generieren“.
Setze Cbo_ChooseDoc = CommandBars("Added Menu").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
Legen Sie das Dateihandle fest, um das Combo_Change-Ereignis zu generieren
Setzen Sie ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
Nachdem das Ereignis generiert wurde, wählen Sie im Klassenmodul Combohander das Change-Ereignis von ComboBoxEvent aus, um den Ereigniscode zu schreiben
Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
9. Einige Word-Ereignisse
Die im VBA-Code behandelten Word-Ereignisse sind: Document_Close
Was im Anwendungsereignis verarbeitet werden muss, sind: DocumentBeforeClose, DocumentChange.
Document_Close: Ereignis generiert ein Ereignis, wenn das Dokument geschlossen wird
DocumentBeforeClose: Bevor das Dokument geschlossen wird, ermittelt Word, ob das Dokument gespeichert ist, gibt entsprechende Eingabeaufforderungen aus und führt die entsprechende Verarbeitung durch.
DocumentChange: Dokumentwechselereignisse werden generiert, wenn das Dokument zwischen dem von Ihnen selbst geänderten Dokument und dem von anderen geänderten Dokument gewechselt wird. Es handelt sich hauptsächlich um das Festlegen von Dokumentberechtigungen usw.