تقنية الدمج بين دلفي وورد
1. معنى كود VBA
Microsoft Word عبارة عن بيئة متكاملة ونظام معالجة نصوص تابع لشركة Microsoft Corporation في الولايات المتحدة، ومع ذلك فهو ليس مجرد نظام لمعالجة النصوص بأي حال من الأحوال، فهو يدمج Microsoft Visual Basic ويمكنه توسيع وظائف Word من خلال البرمجة.
يعد رمز Microsoft Visual Basic في Word هو الماكرو الخاص بـ Word. من خلال كتابة وحدات ماكرو Word، يمكنك تحقيق أتمتة بعض معالجة المستندات، مثل النسخ الاحتياطي التلقائي للمستندات وحفظها، وما إلى ذلك، مما يمكنه توسيع وظائف مستندات Word. لذلك، يمكنك الاستفادة الكاملة من ميزات Word حتى جعل Word جزءًا من برنامجه الخاص.
تتمتع وحدات ماكرو Word ببعض الفوائد، لأنها يمكن أن تساعدنا في أتمتة المستندات، لكن وحدات ماكرو Word ليست مفيدة تمامًا في بعض الأحيان قد تضر مستنداتنا وأنظمة الكمبيوتر وحتى الشبكات، بدءًا من فيروس الماكرو التايواني NO1، وقد انتقل فيروس ماكرو ميليسا الحالي من. مطالبة بسيطة في البداية لاستنفاد موارد النظام لإرسال رسائل بريد إلكتروني عشوائية وإرسال معلومات شخصية إلى الشبكة وحتى إلى Autoexec.bat (ملف دفعي تلقائي) على القرص الثابت. -y، يدمر نظام Windows بأكمله.
2. تقنية Com المضمنة في Word
يمكن القول أن Word هو البرنامج الذي يتمتع بأفضل دعم لتقنية COM. يبدو هذا أمرًا متطرفًا بعض الشيء، لكن تقنية واجهة البرمجة القوية التي يوفرها Word يمكن أن تمكننا من التحكم في أي جزء من Word من خلال البرامج. سواء كان ذلك بفتح الجداول أو حفظها أو طباعتها أو رسمها تلقائيًا في المستندات.
من خلال برامج البرمجة، يمكنك التعامل مع الكلمات بمرونة. هنا فقط نأخذ بورلاند دلفي كمثال لوصف بالتفصيل:
1. كيفية استدعاء برامج/ملفات Word في دلفي
هناك ثلاث طرق للاتصال ببرنامج Word في Word:
. تضمين Word من خلال التحكم في TOleContainer في دلفي
أ. استخدم تحكم الخوادم الذي توفره دلفي للاتصال بـ Word واستخدام خصائص Word
ب. من خلال تقنية Com الحقيقية، قم باستيراد كافة مكتبات الفئات الموجودة في الملف MSWORD9.OLB الموجود في دليل برامج Office إلى دلفي، واستخدم تقنية Com في البرمجة.
ج. استخدم CreateOleObject لبدء تشغيل Word، ثم التحكم في Word في وضع Ole.
2. الحكم على صعوبة عدة طرق
أ. تضمين كلمة من خلال التحكم في دلفي TOleContainer
هذا هو أبسط تضمين Ole، والذي يمكنه استدعاء مستند Word مباشرةً. ما عليك سوى استخدام ToleContainer.Run لبدء مستند Word مباشرة. ومستند Word الذي بدأ بهذه الطريقة يتكامل مع برنامج دلفي (من وجهة نظر الواجهة)، ولكن به عيب لا يمكن التغلب عليه، وهو أنه لا يمكن التحكم في مستند Word من خلال دلفي، ولا يمكن التحكم في غرض معالجة Word بشكل مرن يمكن تحقيقه.
ب. استخدم التحكم في الخوادم الذي توفره دلفي للاتصال بـ Word واستخدام خصائص Word
استخدم التحكم في خوادم دلفي للتحكم في Word. يمكن لدلفي تنفيذ مطالبات التعليمات البرمجية أثناء البرمجة، بشكل عام، يمكنها تحقيق تحكم دلفي في Word بشكل أفضل، ومع ذلك، لا تزال هناك بعض وظائف Word التي لا يمكن استدعاؤها في دلفي (مثل VBA المكتوبة بنفسك). ). وإذا كانت الوظيفة في الأصل اختيارية في كود VBA، فيجب إضافة المعلمات عند استدعاء دلفي، وإلا فلن يتم تمرير التجميع. إن برامج Word وDelphi التي بدأت بهذه الطريقة تنتمي إلى شكلين على التوالي. لا يمكن استخدام هذه الطريقة إلا كمرجع.
ج. استخدم تقنية Com الحقيقية لاستيراد كافة مكتبات الفئات في الملف MSWORD9.OLB في دليل برامج Office إلى دلفي، واستخدم تقنية Com للبرمجة، واستخدم تقنية Com الحقيقية لاستيراد مكتبة فئات الملفات MsWord9.OLD، ثم استخدم Com. التكنولوجيا لاستخدام البرنامج. بشكل عام، يشبه استخدام التحكم في الخوادم في دلفي، وهو أكثر إزعاجًا قليلاً من التحكم في الخوادم.
د. استخدم CreateOleObject لبدء تشغيل Word، ثم التحكم في Word في وضع Ole.
هذه الطريقة هي استخدام طريقة CreateOleObjects لاستدعاء Word، وهو في الواقع Ole، ولكن هذه الطريقة يمكنها التحكم بشكل كامل في ملف Word واستخدام كافة خصائص Word، بما في ذلك رمز ماكرو VBA الذي تكتبه بنفسك.
بالمقارنة مع التحكم في الخوادم وتقنية COM، يمكن لهذه الطريقة حقًا استخدام خصائص مختلفة لـ Word، وهي في الأساس نفس كتابة التعليمات البرمجية الخاصة بك في VBA، وليست هناك حاجة لاستخدام الكود الافتراضي. إن برامج Word وDelphi التي بدأت بهذه الطريقة تنتمي إلى شكلين على التوالي. العيب هو أنه لا توجد مطالبة بكود دلفي عند استخدام هذه الطريقة، كل معالجة الاستثناءات تحتاج إلى كتابتها بنفسك، وقد يكون هناك المزيد من المعرفة الاستكشافية عند الكتابة.
3. محرر ورد ماكرو
يستطيع Word تحرير التعليمات البرمجية لـ VBA وكتابة النماذج والوظائف.
كيفية الدخول إلى محرر ماكرو Word: الأدوات->وحدات الماكرو->محرر Visual Basic للدخول إلى واجهة محرر Visual Basic. واجهة محرر Visual Basic لبرنامج Word هي في الأساس نفس واجهة محرر Visual Basic الحقيقي ولن يتم وصفها بالتفصيل هنا. في التعليمات البرمجية لـ VBA، يمكنك إضافة نماذج المستخدم والوحدات النمطية والوحدات النمطية للفئة. إن مفاهيم نماذج المستخدم والوحدات النمطية والوحدات النمطية للفئة هي نفسها تمامًا تلك الموجودة في Visual Basic. التعليقات هي نفسها تمامًا كما في Visual Basic.
يمكنك وضع المؤشر على أي روتين فرعي للنموذج أو الوحدة النمطية والضغط مباشرة على "F5" لتشغيل الروتين الفرعي الحالي.
4. نظرة عامة على وحدات ماكرو Word
يجمع Word بشكل كامل بين تحرير المستندات وVB لأتمتة المستندات حقًا. تشبه البرمجة باستخدام Word استخدام Visual Basic. والفرق هو أنه في Word، يمكنك تشغيل روتين فرعي معين مباشرةً ورؤية النتائج مباشرة. لا يمكن تفسير وحدات الماكرو الخاصة بـ Word وتشغيلها إلا، بينما يمكن الآن كتابة Visual Basic في برامج حقيقية. من منظور حماية التعليمات البرمجية، يجب تقليل عدد رموز VBA في Word قدر الإمكان، وخاصة رموز المفاتيح.
يمكن تقسيم وحدات ماكرو VBA إلى أربعة أنواع:
1. ماكرو بنفس اسم الأمر
مثل FileSave وFileOpen، إذا كان كود VBA يحتوي على وظائف بنفس اسم Word، فسيتم تنفيذ رموز VBA هذه مباشرة، مع تجاهل أوامر Word نفسه.
2. وحدات ماكرو محددة في Word
تتضمن وحدات الماكرو هذه AutoExec (بدء تشغيل Word أو تحميل قوالب عمومية)، وAutoNew (في كل مرة يتم فيها إنشاء مستند جديد)، وAutoOpen (في كل مرة يتم فيها فتح مستند موجود)، وAutoClose (في كل مرة يتم فيها إغلاق مستند)، وAutoExit (الخروج من Word أو تفريغ القوالب العالمية) ساعة).
إذا كان كود VBA يحتوي على وظائف بهذه الأسماء، فسيتم تنفيذ التعليمات البرمجية المقابلة تلقائيًا إذا تم استيفاء الشروط المقابلة.
3. ماكرو VBA للأحداث المقابلة
وحدات الماكرو هذه هي وحدات ماكرو يتم تشغيلها بواسطة الأحداث. على سبيل المثال، يقوم Document_Close بتشغيل حدث عند إغلاق المستند، ويتم تشغيل Document_New عند إنشاء مستند جديد، ويتم تشغيل Document_Open عند فتح المستند.
4. ماكرو مستقل
كود VBA الذي تكتبه بنفسك، أي كود VBA الذي لا يقع في المواقف المذكورة أعلاه، يمكن استدعاؤه بواسطة أكواد VBA الأخرى، والأهم من ذلك، يمكن استدعاؤه بواسطة برامج أخرى.
بهذه الطريقة، يمكننا تجاهل وحدات الماكرو التي يتم تنفيذها تلقائيًا بواسطة Word واستدعاء وحدات الماكرو المقابلة مباشرة من خلال دلفي لتحقيق الهدف.
[b]5. وصف تفصيلي لوحدات ماكرو أوامر Word[/b]
يحتوي Word نفسه على العديد من وظائف الأوامر، ولكن لا مساعدة Word عبر الإنترنت ولا مساعدة MSDN توفر أي مقدمة لهذا الجانب، لذا لا يمكنك استكشافه إلا من خلال تجاربك الخاصة. الوظائف التي تم استكشافها في البداية هي كما يلي:
تعليقات شرح اسم الماكرو
ملف جديد جديد
يقوم FileNewDefault بإنشاء مستند فارغ جديد
حفظ باسم FileSaveAs
فتح ملف مفتوح
إغلاق الملف
طباعة FilePRint
معاينة الطباعة FilePrintPreview
الأدواتتخصيص التخصيص في شريط الأدوات
خيارات أداة ToolsOptions
ToolsRevisions تسليط الضوء على المراجعات
ToolsReviewRevisions قبول المراجعات أو رفضها
ToolsRevisionMarksAccept قبول المراجعات
ToolsRevisionMarksReject رفض المراجعة
ToolsRevisionMarksToggle المراجعات
أدوات ماكرو
ToolsRecordMacroToggle تسجيل ماكرو جديد
عرض الأمن الأمني
ViewVBCode عرض بيئة محرر VB
قوالب FileTemplates والوظائف الإضافية
ToolsProtectUnprotectDocument يقوم بإلغاء حماية المستند
إدراج ارتباط تشعبي إدراج ارتباط تشعبي
تحرير الارتباط التشعبي تحرير الارتباط التشعبي
حذف الارتباط التشعبي حذف الارتباط التشعبي
تحرير الروابط عرض وحذف الروابط
EditPasteAsHyperlink لصق الارتباط التشعبي
نمط التنسيق
تحرير الإشارة المرجعية
بعض الرموز المستخدمة في OleWord
1. يقوم برنامج دلفي بتشغيل برنامج Word
استخدم أسلوب CreateOleObjects لبدء تشغيل Word واستدعاء رمز VBA. عملية التنفيذ المحددة هي:
استخدم أولاً GetActiveOleObject('Word.application') لتحديد ما إذا كان هناك برنامج Word في الذاكرة الحالية، إذا كان موجوداً، فاتصل مباشرة إذا لم يكن هناك برنامج Word، استخدم CreateOleObject('Word.Application') لبدء تشغيل Word.
2. برنامج دلفي لإنشاء مستند Word جديد
التنسيق: WordDocuments.Add(قالب، NewTemplate، DocumentType، مرئي)
القالب: اسم القالب الذي سيتم استخدامه،
NewTemplate: نوع المستند الجديد، يمثل True قالبًا، ويمثل False مستندًا
DocumentType: نوع المستند، الافتراضي هو مستند فارغ
مرئي: ما إذا كانت النافذة التي تم إنقاذها مرئية أم لا
مثال: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. يقوم برنامج دلفي بفتح مستند Word
التنسيق: WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
قالب كلمة المرور، ريفينت، كتابة مستند كلمة المرور، قالب كتابة كلمة المرور،
تنسيق، ترميز، مرئي)
اسم الملف: اسم المستند (بما في ذلك المسار)
Confirmconversions: ما إذا كان سيتم عرض مربع حوار تحويل الملف
للقراءة فقط: ما إذا كان سيتم فتح المستند في وضع القراءة فقط
AddToRecentFiles: ما إذا كنت تريد إضافة ملفات إلى قائمة الملفات المستخدمة مؤخرًا أسفل قائمة "ملف".
PassWordDocument: كلمة المرور المطلوبة لفتح هذا المستند
قالب كلمة المرور: كلمة المرور المطلوبة لفتح هذا القالب
الرجوع: إذا كان المستند موجودًا بالفعل، ما إذا كان سيتم إعادة فتحه أم لا
WritePasswordDocument: كلمة المرور مطلوبة لحفظ التغييرات في المستند
WritePasswordTemplate: يحفظ كلمة المرور المطلوبة لإجراء تغييرات على القالب
التنسيق: محول الملفات المطلوب لفتح المستند
الترميز: صفحة رموز المستند المستخدمة
مرئي: ما إذا كانت النافذة التي تفتح المستند مرئية أم لا
مثال:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);
4. برنامج دلفي لحفظ مستند الوورد
التنسيق: WordDocuments.SaveAs(FileName، FileFormat، LockComments، كلمة المرور،
AddToRecentFiles، WritePassword، ReadOnlyRecommulated،
تضمين TrueTypeFonts، SaveNativePictureFormat، SaveFormsData،
حفظ AsAOCELetter)
اسم الملف: اسم الملف. الإعدادات الافتراضية للمجلد الحالي واسم الملف.
FileFormat التنسيق الذي يتم حفظ المستند به.
LockComments إذا كان True، فسيتم السماح بالتعليقات فقط على هذا المستند.
كلمة المرور كلمة المرور عند فتح المستند.
AddToRecentFiles إذا كان True، يضيف المستند إلى قائمة المستندات المستخدمة مؤخرًا في القائمة "ملف".
WritePassword يحفظ كلمة المرور المطلوبة لإجراء تغييرات على المستند.
ReadOnlyRecommened إذا كان True، فسيوصي Word بوضع القراءة فقط في كل مرة يتم فيها فتح المستند.
EmbedTrueTypeFonts إذا كان True، فاحفظ المستند باستخدام خطوط TrueType.
SaveNativePictureFormat إذا كان True، فسيتم حفظ الرسومات المستوردة من أنظمة أساسية أخرى للنظام (مثل Macintosh) فقط في إصدارات Windows الخاصة بها.
SaveFormsData إذا كان True، فسيتم حفظ البيانات التي أدخلها المستخدم في النموذج كسجل بيانات.
SaveAsAOCELetter إذا كانت الوثيقة تحتوي على مرفق، وعندما تكون هذه الخاصية True، فاحفظ الوثيقة كحرف AOCEL (واحفظ البريد الإلكتروني).
مثال:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);
5. قراءة الملفات من قاعدة البيانات إلى القرص الصلب المحلي وقراءة الملفات من القرص الصلب المحلي إلى قاعدة البيانات.
استخدم حقل الصورة الثنائية للحفظ في قاعدة البيانات واستخدم طريقة الدفق.
إنشاء دفق ملف:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite أو fmCreate);
Word_FileStream.Position:=0;
حقل الصورة المحفوظة في قاعدة البيانات:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
قراءة الملفات من قاعدة البيانات إلى القرص الصلب المحلي:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
حرر دفق الملف:
Word_FileStream.Free؛
6. تعريف الرسالة العالمية
نظرًا لأن برنامج Word وبرنامج Delphi عبارة عن برنامجين، فمن الصعب التواصل مع بعضهما البعض، لذلك يتم استخدام طريقة الرسالة العالمية. يجب تسجيل الرسائل العامة أولاً، ويقوم Windows بإرجاع رقم الرسالة الخاملة للنظام. وعندما تكون الرسائل المسجلة متماثلة، يقوم نظام Windows بإرجاع نفس القيمة، وبالتالي ضمان استخدام رقم الرسالة هذا للاتصال بين برنامجين.
كيفية تحديد الرسالة:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);
كيفية إرسال رسالة:
SendMessage (معرف الطرف الآخر، الرسالة، الرسالة تأتي بمتغيرات قصيرة، الرسالة تأتي بمتغيرات طويلة)
7. كيف يستقبل برنامج دلفي الرسائل
هناك نوعان من الرسائل التي تتلقاها دلفي، أحدهما هو التحميل الزائد لرسالة معينة، والآخر هو التحميل الزائد لوظيفة WndProc وتحديد الرسالة المقابلة للمعالجة.
يمكن للطريقة الأولى معالجة رسالة واحدة فقط في كل مرة، بينما يمكن للطريقة الثانية معالجة رسائل متعددة في نفس الوقت.
بالنسبة للطريقة الثانية يكون البيان كما يلي:
الإجراء WndProc(var الرسالة: Tmessage);تجاوز
تجدر الإشارة إلى أنه عند استخدامه، يجب أن ترث وظيفة WndProc(Message) بعد معالجة رسالتك الخاصة، وإلا فسوف يتعطل النظام!
8. إنشاء ديناميكي لمربع حوار التحرير والسرد وتغيير الحدث في Word
قم بإنشاء وحدة الفصل Combohander وحدد الأحداث داخليًا
عام مع الأحداث ComboBoxEvent كـ Office.CommandBarComboBox
الوحدة النمطية التي تحدد الأحداث التي تم إنشاؤها بواسطة التحكم في التحرير والسرد
تعتيم ctlComboBoxHandler باعتباره ComboBoxHandler جديد
إنشاء مربع حوار تحرير وسرد
تعيين Cbo_ChooseDoc = CommandBars("القائمة المضافة").Controls.Add(Type:=msoControlComboBox، مؤقت:=True)
قم بتعيين مؤشر الملف لإنشاء حدث Combo_Change
قم بتعيين ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
بعد إنشاء الحدث، حدد حدث التغيير الخاص بـ ComboBoxEvent في وحدة الفصل Combohander لكتابة رمز الحدث
Sub ComboBoxEvent_Change(ByVal Ctrl كـ Office.CommandBarComboBox)
9. بعض أحداث الكلمة
أحداث Word التي تتم معالجتها في التعليمات البرمجية لـ VBA هي: Document_Close
ما يجب معالجته في حدث التطبيق هو: DocumentBeforeClose وDocumentChange.
Document_Close: يقوم الحدث بإنشاء حدث عند إغلاق المستند
DocumentBeforeClose: قبل إغلاق المستند، يحدد Word ما إذا كان المستند قد تم حفظه، ويعطي المطالبات المقابلة، ويقوم بإجراء المعالجة المقابلة.
DocumentChange: يتم إنشاء الأحداث عند تبديل المستند بين المستند الذي تم تعديله بواسطة المستخدم والمستند الذي قام الآخرون بتعديله، وهو يتعامل بشكل أساسي مع تعيين أذونات المستند، وما إلى ذلك.