ใช้ Delphi4.0 เพื่อควบคุม Word97 โดยตรง
เลขที่: QA003053
วันที่สร้าง: 15 มิถุนายน 2543 วันที่แก้ไขครั้งล่าสุด: 15 มิถุนายน 2543
หมวดหมู่:
บทความ :
สรุป: เพื่อนที่เคยเล่น PowerBuilder ต้องรู้ว่าเทคโนโลยีที่สำคัญที่สุดใน PB คือเทคโนโลยี DataWindow มันสะดวกมากที่จะใช้ในการออกแบบแบบฟอร์ม ประมวลผลการป้อนข้อมูล และการออกแบบรายงาน อย่างไรก็ตาม ฟังก์ชันสนับสนุนรายงานของ Delphi นั้นน้อยกว่าฟังก์ชัน PB มาก Delphi เวอร์ชันมืออาชีพมี QuickReport มาให้ด้วย แต่เป็นชุดของส่วนประกอบรายงานที่ได้รับอนุญาตจาก QSD AS (บริษัทในนอร์เวย์) แน่นอนว่า เรายังใช้เครื่องมือการรายงานภายนอก เช่น ReportSmith หรือ Cristal Report ได้ด้วย อย่างไรก็ตาม การควบคุมค่อนข้างซับซ้อนและขาดการผสานรวมระหว่างการควบคุมกับ Delphi
ตอนที่เราพัฒนา "ระบบจัดการเอกสารอย่างเป็นทางการ" เวอร์ชันออนไลน์ เราได้ลองใช้วิธีต่างๆ ในการพิมพ์เอกสารราชการ ข้อกำหนดของเราคือการพิมพ์เอกสารราชการธรรมดาในรูปแบบเอกสารราชการ และผู้ใช้สามารถควบคุมการเรียงพิมพ์แบบง่ายๆ ได้ Xiaohui ลองใช้ QuickReport เป็นครั้งแรก แต่ผลที่ได้กลับไม่เป็นที่น่าพอใจนัก โดยเฉพาะอย่างยิ่งในแง่ของการรองรับรูปแบบภาษาจีนบางรูปแบบ ต่อมา Xiaohui หมกมุ่นอยู่กับมันมากจนเขาเพียงแต่เขียนโปรแกรมการพิมพ์ด้วยมือโดยไม่ต้องพึ่งเครื่องมือออกแบบ ซึ่งน่าเสียดาย ทักษะของเสี่ยวฮุยยังไม่ดีพอ และเขาไม่สามารถเล่นต่อได้เมื่อเขียนได้ครึ่งทาง ดังนั้นเขาจึงต้องหาวิธีอื่น บังเอิญมีสำเนาของ "China Computer News" มาให้ในวันนั้น และมีบทความเกี่ยวกับวิธีใช้ Excel ใน VB Xiaohui คิดว่า: ทำไมไม่ใช้ Delphi เพื่อส่งข้อมูลไปยัง Word และปล่อยให้ Word ดำเนินการแก้ไขและเรียงพิมพ์ให้เสร็จสิ้น พูดตรงๆ ก็คือใช้เทคโนโลยีอัตโนมัติ OLE
เสี่ยวฮุยลองดูแล้วผลลัพธ์ก็ออกมาดี ——แม้ว่าสำหรับโปรแกรมเมอร์แล้ว โปรแกรมที่เขาเขียนจะต้องเชื่อมต่อกับแอปพลิเคชันของคนอื่นจึงจะเข้าใจหน้าที่ของตัวเองได้อย่างเต็มที่ มันเหมือนกับการเอาเป็ดเข้าไปในฝูงไก่ และยังมีบางสิ่งอยู่ในใจของเขาเสมอ อย่างไรก็ตาม เนื่องจากงานการพัฒนาที่ตึงเครียด ผู้กำกับจึงมากระตุ้นเขาทุก ๆ สามหรือสี่ครั้ง แม้ว่ามันจะดูไร้สาระไปหน่อย แต่เสี่ยวฮุยก็ไม่สนใจน้อยลง เอาล่ะ โดยไม่ต้องกังวลใจอีกต่อไป เรามาดูกันว่าเสี่ยวฮุ่ยประสบความสำเร็จได้อย่างไร——
ลิงค์: http://www.xiaohui.com
ผู้ดำเนินรายการ: เนื่องจากลิงก์เดิมหมดอายุแล้ว เราจัดเตรียมข้อความต้นฉบับไว้ที่นี่:
1. คำนำ
เพื่อนที่เคยเล่น PowerBuilder ต้องรู้ว่าเทคโนโลยีที่สำคัญที่สุดใน PB คือเทคโนโลยี DataWindow มันสะดวกมากที่จะใช้ในการออกแบบแบบฟอร์ม ประมวลผลการป้อนข้อมูล และการออกแบบรายงาน อย่างไรก็ตาม ฟังก์ชันสนับสนุนรายงานของ Delphi นั้นน้อยกว่าฟังก์ชัน PB มาก Delphi เวอร์ชันมืออาชีพมี QuickReport มาให้ด้วย แต่เป็นชุดของส่วนประกอบรายงานที่ได้รับอนุญาตจาก QSD AS (บริษัทในนอร์เวย์) แน่นอนว่า เรายังใช้เครื่องมือการรายงานภายนอก เช่น ReportSmith หรือ Cristal Report ได้ด้วย อย่างไรก็ตาม การควบคุมค่อนข้างซับซ้อนและขาดการผสานรวมระหว่างการควบคุมกับ Delphi
ตอนที่เราพัฒนา "ระบบจัดการเอกสารอย่างเป็นทางการ" เวอร์ชันออนไลน์ เราได้ลองใช้วิธีต่างๆ ในการพิมพ์เอกสารราชการ ข้อกำหนดของเราคือการพิมพ์เอกสารราชการธรรมดาในรูปแบบเอกสารราชการ และผู้ใช้สามารถควบคุมการเรียงพิมพ์แบบง่ายๆ ได้ Xiaohui ลองใช้ QuickReport เป็นครั้งแรก แต่ผลที่ได้กลับไม่เป็นที่น่าพอใจนัก โดยเฉพาะอย่างยิ่งในแง่ของการรองรับรูปแบบภาษาจีนบางรูปแบบ ต่อมา Xiaohui หมกมุ่นอยู่กับมันมากจนเขาเพียงแต่เขียนโปรแกรมการพิมพ์ด้วยมือโดยไม่ต้องพึ่งเครื่องมือออกแบบ ซึ่งน่าเสียดาย ทักษะของเสี่ยวฮุยยังไม่ดีพอ และเขาไม่สามารถเล่นต่อได้เมื่อเขียนได้ครึ่งทาง ดังนั้นเขาจึงต้องหาวิธีอื่น บังเอิญมีสำเนาของ "China Computer News" มาให้ในวันนั้น และมีบทความเกี่ยวกับวิธีใช้ Excel ใน VB Xiaohui คิดว่า: ทำไมไม่ใช้ Delphi เพื่อส่งข้อมูลไปยัง Word และปล่อยให้ Word ดำเนินการแก้ไขและเรียงพิมพ์ให้เสร็จสิ้น พูดตรงๆ ก็คือใช้เทคโนโลยีอัตโนมัติ OLE
เสี่ยวฮุยลองดูแล้วผลลัพธ์ก็ออกมาดี ——แม้ว่าสำหรับโปรแกรมเมอร์แล้ว โปรแกรมที่เขาเขียนจะต้องเชื่อมต่อกับแอปพลิเคชันของคนอื่นจึงจะเข้าใจหน้าที่ของตัวเองได้อย่างเต็มที่ มันเหมือนกับการเอาเป็ดเข้าไปในฝูงไก่ และยังมีบางสิ่งอยู่ในใจของเขาเสมอ อย่างไรก็ตาม เนื่องจากงานการพัฒนาที่ตึงเครียด ผู้กำกับจึงมากระตุ้นเขาทุก ๆ สามหรือสี่ครั้ง แม้ว่ามันจะดูไร้สาระไปหน่อย แต่เสี่ยวฮุยก็ไม่สนใจน้อยลง เอาล่ะ โดยไม่ต้องกังวลใจอีกต่อไป เรามาดูกันว่าเสี่ยวฮุ่ยประสบความสำเร็จได้อย่างไร——
2. การออกแบบแบบฟอร์ม
พูดตรงๆ มันง่ายมากจริงๆ Xiaohui สร้างโปรแกรมตัวอย่างง่ายๆ ที่นี่:
1. ตั้งค่า Font.name ของ Form1 เป็น 'Songti' และ Font.size เป็น 12
2. วางตัวควบคุม tLable ห้าตัว label1-labe5 ตามลำดับบนแบบฟอร์ม คุณสมบัติคำอธิบายภาพคือ 'หมายเลขเอกสาร' 'ชื่อเรื่อง' 'หน่วยรับ' 'ข้อความ' และ 'หน่วยการส่ง'
3. วางตัวควบคุมการแก้ไขห้ารายการ: tEdit, tEdit, tEdit, tMemo และ tEdit ตามลำดับบนแบบฟอร์ม คุณลักษณะชื่อของพวกเขาคือ: ED_WenHao, ED_BiaoTi, ED_ShouWenDanWei, ED_ZhenWen และ ED_FaWenDanWei ตามลำดับ
4. วางตัวควบคุม tButton สองตัวตามลำดับบนแบบฟอร์ม คุณลักษณะชื่อคือ Btn_PRintToWord และ btn_Quit และแอตทริบิวต์คำอธิบายภาพคือ 'พิมพ์' และ 'ออก' ตามลำดับ
สำหรับรูปแบบการออกแบบแบบฟอร์ม โปรดดูรูปภาพที่แนบมาท้ายบทความนี้
3. การออกแบบโค้ด
ส่วนโปรแกรมมีดังนี้:
หน่วย หน่วยที่ 1;
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, กล่องโต้ตอบ,
StdCtrls,OleCtnrs,ComObj;
พิมพ์
TForm1 = คลาส (TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ED_WenHao: Tแก้ไข;
ED_BiaoTi: TEdit;
ED_ShouWenDanWei: Tแก้ไข;
ED_ZhenWen: TMemo;
ED_FaWenDanWei: Tแก้ไข;
Btn_PrintToWord: TButton;
Btn_Quit: TButton;
ขั้นตอน Btn_PrintToWordClick (ผู้ส่ง: TObject);
ขั้นตอน Btn_QuitClick (ผู้ส่ง: TObject);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
จบ;
var
แบบฟอร์ม 1: TForm1;
การดำเนินการ
{$R *.DFM}
//Start: ข้อมูลจะถูกส่งไปยังเหตุการณ์คำ
ขั้นตอน TForm1.Btn_PrintToWordClick (ผู้ส่ง: TObject);
วีเออาร์
VarWord: Variant;// ใช้เมื่อสร้าง WORD
เริ่ม
พยายาม
// 1. สร้าง OleObject และเชื่อมต่อ word97
VarWord:=CreateOleObject('word.basic');
// 2. สร้างไฟล์ใหม่สำหรับ Word97
VarWord.FileNew;
// 3. ตั้งค่าสถานะพื้นฐานของ Word97
VarWord.ViewZoom75; // ตั้งค่าอัตราส่วนการแสดงผลเป็น 75%
VarWord.ViewPage; //เปลี่ยนเป็นโหมดแสดงเพจ
// 4. ส่งข้อมูลการควบคุมข้อมูลปัจจุบันไปที่ Word97
// 4.1 ส่งข้อมูลหมายเลขเอกสาร
VarWord.CenterPara; //อยู่กึ่งกลาง
Varword.font('宋体'); //ตั้งค่าแบบอักษร
VarWord.FontSize(14); //กำหนดขนาดตัวอักษร
varword.insert(#13+#13+ ED_WenHao.Text+#13+#13+#13);
// 4.2 ส่งข้อมูลส่วนหัว
VarWord.font('HeiBi');
VarWord.ขนาดตัวอักษร(16);
VarWord.insert( ED_BiaoTi.text+#13);
// 4.3 ส่งข้อมูลหน่วยรับ
VarWord.LeftPara; //จัดชิดซ้าย
VarWord.Font('宋体');
VarWord.fontSize(14);
VarWord.Insert(#13+ ED_ShouWenDanWei.Text+':'+#13);
// 4.5 ส่งข้อมูลข้อความ
VarWord.fontSize(14);
VarWord.Insert( ED_ZhenWen.ข้อความ+#13);
// 4.6 ส่งข้อมูลหน่วยการส่งข้อมูล
VarWord.RightPara; //การจัดตำแหน่งที่ถูกต้อง
VarWord.fontSize(14);
VarWord.Insert( ED_FaWenDanWei.Text+#13);
// 5 การตั้งค่าสุดท้าย
VarWord.StartOfdocument; //ไปที่จุดเริ่มต้นของเอกสาร
VarWord.AppMaxiMize; //ตั้งค่าหน้าต่างให้ขยายใหญ่สุด
VarWord.AppShow; //แสดงแอปพลิเคชัน
ยกเว้น
showmessage('ไม่สามารถเรียกใช้ Microsoft Word!');
สิ้นสุด; //สิ้นสุดความพยายาม
จบ;
//end: ข้อมูลที่ส่งไปยังเหตุการณ์คำ
//Start: เหตุการณ์การปิดหน้าต่าง
ขั้นตอน TForm1.Btn_QuitClick (ผู้ส่ง: TObject);
เริ่ม
ปิด;
จบ;
//End: เหตุการณ์การปิดหน้าต่าง
จบ.
// นี่คือจุดสิ้นสุดของโปรแกรมหลัก
4. หมายเหตุ
1. คำอธิบาย
1. เนื่องจากเป็นเพียงตัวอย่างสาธิต จึงไม่ได้เชื่อมต่อกับฐานข้อมูลเบื้องหลัง ในการใช้งานจริง ตัวควบคุม tEdit และ tMemo ที่เกี่ยวข้องสามารถแทนที่ด้วยตัวควบคุม tDBEdit และ tDBMemo และสามารถเพิ่ม tTable, tDataSource และตัวควบคุมอื่นๆ เพื่อเชื่อมต่อได้ ไปยังฐานข้อมูล
2. คู่มือนี้ไม่ได้พิจารณาวิธีการพิมพ์เป็นชุด
3. โปรแกรมนี้ผ่านภายใต้ Pwin97, Delphi 4.0 Professional Edition และ Chinese Word97
4. เนื่องจากมี Word เวอร์ชันที่แตกต่างกัน Microsoft จึงแปลงอินเทอร์เฟซอัตโนมัติของ OLE เป็นภาษาต่างประเทศแต่ละภาษา หากคุณใช้ Word เวอร์ชันอื่น โปรแกรมนี้อาจทำงานไม่ถูกต้อง
5. คุณสามารถรับคำสั่งไดรเวอร์ที่เกี่ยวข้องผ่านคำสั่งมาโครที่สรุปไว้ในวิธีใช้ word97 หรือคุณสามารถคลิกเมนู [เครื่องมือ] ใต้ Word97 - คลิก [ปรับแต่ง] - คลิกปุ่ม [คีย์บอร์ด] เพื่อดูคำสั่ง Word ที่แสดงในหมวดหมู่ใน เวิร์ด97.
2. ข้อดีและข้อเสีย
1. ด้วยเทคโนโลยีอัตโนมัติของ OLE งานเรียงพิมพ์และการพิมพ์ของเอกสารทางการจะถูกส่งไปยัง Word ซึ่งทำให้การควบคุมสะดวกยิ่งขึ้นสำหรับผู้ใช้ปลายทาง
2. ใน Word97 หากข้อมูลถูกแก้ไขจะไม่สามารถส่งกลับไปยังโปรแกรมหลักที่เรียกใช้และสะท้อนให้เห็นในฐานข้อมูลได้ นั่นคือความไม่สะดวกของมัน
3. ตัวอย่างนี้เป็นเพียงแอปพลิเคชันภายใต้สถานการณ์พิเศษ หากคุณต้องการพิมพ์ป้ายข้อมูลจำนวนมากและสร้างตาราง Xiaohui คิดว่าการใช้รายงานมีความยืดหยุ่นมากกว่า
แหล่งที่มาของบทความ: การเดินทางของ Xiaohui ในฐานะโปรแกรมเมอร์