وفي التطبيقات العملية، وجد المؤلف أن محتوى التقرير نادرًا ما يتغير، ولكن تنسيق الخط والتخطيط الخاص به غالبًا ما يتغيران، وفي بعض الأحيان لا يرغب المستخدمون في تعديل المحتوى الفعلي لقاعدة البيانات ولكنهم يريدون تغيير محتوى التقرير لاحتياجات معينة. إذا كنت تستخدم ReportSmith، فيمكنك حل المشكلة الأولى، لكن لا يمكنك فعل أي شيء حيال الأخيرة، وواجهته باللغة الإنجليزية، وهو أمر غير مناسب للمستخدمين. إذا كنت تستخدم مكون تقرير TQReport في الإصدار 3.0، فلا يمكن حل أي منهما في الوقت الفعلي، ويجب تعديل التعليمات البرمجية الأصلية وإعادة ترجمتها قبل استخدامها. يمكن أن يؤدي استخدام Word وExcel إلى التغلب تمامًا على أوجه القصور المذكورة أعلاه. التنفيذ المحدد هو كما يلي (مع أخذ تطبيق Word كمثال):
استخدم Word أولاً لتحرير تنسيق التقرير، وتخطيط التنسيق، واستبدال عناصر البيانات التي سيتم إخراجها بحقول النموذج، وتسميتها. هنا نفترض مؤقتًا أن هناك حقلي نموذج Item1 وItem2 (كلاهما من النوع النصي)، احفظ هذا المستند كملف قالب example.dot، ثم تابع كما يلي:
1) قم بتشغيل Delphi3، وأضف مكون TDdeClientCov في مكون النظام الذي تم تعيينه إلى Form1، وقم بتسميته DdeExample، وقم بتعيين ConnectMode الخاص به على ddeManual (الوضع اليدوي)؛ قم بتعيين DdeService على '(WinWord)'؛ قم بتعيين Serviceapplication على 'WinWord' '.
2) اكتب عملية مخصصة لتنشيط Word، كما يلي:
PROcedure Tform1.WordActive(Cmds: TStrings);
فار
مسار الكلمة: سلسلة؛
يبدأ
إذا (ليس DdeExample.OpenLink) ثم {تحديد ما إذا كان مرتبطًا ديناميكيًا}
يبدأ
إذا (FindWindow('OpusApp', nil)=0) ثم
يبدأ
WordPath := 'C:msofficewinword';
إذا (WordPath = ') إذن
ShowMessage('الكلمة الصينية غير مثبتة أو لم يتم تعيين المسار، يرجى تثبيت النسخة الصينية من Word وتعيينها.')
آخر تبدأ
DdeExample.ServiceApplication := WordPath+'Winword.exe';
إذا (DdeExample.OpenLink) ثم {إذا تم ربط أمر الماكرو ديناميكيًا}
DdeExample.ExecuteMacroLines(Cmds,False)
آخر
ShowMessage('غير قادر على بدء النسخة الصينية من Word!');
DdeExample.ServiceApplication := 'WinWord.exe';
نهاية؛
نهاية
آخر يبدأ {إذا تم ربط أمر الماكرو ديناميكيًا}
DdeExample.ExecuteMacroLines(Cmds,False);
نهاية؛
نهاية
آخر
DdeExample.ExecuteMacroLines(Cmds,false);
نهاية؛
أضف ما يلي إلى منطقة الإعلان الخاص:
الإجراء ActiveWord(Cmds: TStrings);
3) أضف زر Button1 إلى Form1 واكتب الكود التالي في حدث onclick الخاص به:
الإجراء TForm1.Button1Click(Sender: TObject);
فار
كمدس:TSTringList؛{إنشاء كمدس}
TempItem1,TempItem2:String;
يبدأ
cmds:=TSTringList.Create;
cmds.Clear;
TempItem1:='عنصر البيانات الأول';
TempItem2:='عنصر البيانات الثاني';
مع كمدس القيام به
يبدأ
واضح؛
Add('[FileNew.Template ="Example.Dot″]');{فتح ملف القالب example.Dot}
إضافة('[AppMaximize]');{تكبير المستند}
Add('[SetFormResult"Item1",″'+TempItem1+''"]');{تمرير البيانات TempItem1 إلى حقل النموذج Item1}
Add('[SetFormResult "Item2"،'+TempItem2+'"]);{تمرير البيانات TempItem2 إلى حقل النموذج Item2}
نهاية؛
WordActive(DdeExample,Cmds);{استدعاء العملية المخصصة}
كمدس.مجاني؛{إصدار كمدس}
نهاية؛
قم بتشغيل هذا البرنامج، انقر فوق Button1، يمكنك العثور على أن Word قد بدأ، ويظهر عنصرا بيانات على الشاشة: عنصر البيانات الأول؛ وأخيرا، يمكنك تعديل تنسيق وبيانات هذا التقرير حسب الرغبة، لأن هذا التقرير لا علاقة له بالتطبيق المحدد.
في هذا المثال، يتم استخدام Word6 الصيني أو Word7 الصيني. نظرًا لأن أوامر الماكرو الخاصة بـ Word97 قد تم تغييرها إلى عبارات Visual Basic، إذا كنت تريد استخدام Word97 لتنفيذها، فيرجى تغيير أوامر الماكرو إلى الرموز المقابلة.
هذا مثال بسيط يمكنك استخدام وظيفة تسجيل الماكرو في Word لتسجيل المزيد من وحدات الماكرو (مثل إنشاء الجداول تلقائيًا، وملء النص، وتغيير الخطوط وأوامر الماكرو الأخرى)، وربطها بجداول مختلفة في قاعدة البيانات، وإضافتها. إلى Cmds بدوره، يمكنك تحقيق وظائف أكثر تعقيدًا تحتاجها.