ระบบอัตโนมัติเป็นวิธีการควบคุมแอปพลิเคชันหนึ่งโดยอัตโนมัติจากภายในแอปพลิเคชันอื่น เช่นโค้ดด้านล่าง
ขั้นตอน CreateNewWord;
var
WordObj: ตัวแปร;
เริ่ม
WordObj := CreateOleObject('Word.Basic'); {ฟังก์ชันนี้ถูกประกาศในหน่วย ComObj}
WordObj.AppShow;
WordObj.FileNew;
จบ;
รหัสนี้จะเปิด WORD และสร้างเอกสารใหม่โดยอัตโนมัติ (แน่นอนว่ามีการติดตั้ง WORD บนเครื่องของคุณ) สิ่งนี้ดูน่าสนใจมากและเป็นฟังก์ชันที่มีประโยชน์มาก ดังนั้นโปรแกรมของเราจะมีฟังก์ชันอัตโนมัติที่คล้ายกับ WORD ได้อย่างไร อนุญาตให้โปรแกรมที่พัฒนาเป็นภาษาอื่นเพื่อทำให้โปรแกรมของเราเป็นแบบอัตโนมัติหรือไม่ การปรับใช้กับ DELPHI นั้นง่ายมาก
บทความนี้จะอธิบายทีละขั้นตอนวิธีพัฒนาเซิร์ฟเวอร์อัตโนมัติอย่างง่ายพร้อมตัวอย่าง
สร้างแอปพลิเคชันธรรมดาใหม่และบันทึกโครงการเป็น AutoSrv.bpr วางตัวควบคุมการแก้ไขบนแบบฟอร์มหลักและบันทึกเป็น MainForm.pas ที่นี่เราวางแผนที่จะเพิ่มชื่อหน้าต่าง สีของแบบฟอร์ม และเพื่อควบคุมข้อความของ แก้ไขการควบคุม (แน่นอนว่าใช้ฟังก์ชันน้อยมาก แต่ก็เพียงพอที่จะอธิบายวิธีพัฒนาโปรแกรมเซิร์ฟเวอร์อัตโนมัติ) เพิ่มโค้ดต่อไปนี้ลงในหน้าต่างหลัก: (หมายเหตุ: โปรดเพิ่มการประกาศฟังก์ชันและขั้นตอนเหล่านี้ใน TForm1 ด้วยตัวเอง พื้นที่สาธารณะ)
ฟังก์ชั่น TForm1.GetCaption: สตริง;
เริ่ม
ผลลัพธ์ := Self.Caption;
จบ;
ขั้นตอน TForm1.SetCaption (ACaption: string);
เริ่ม
Self.Caption := ACaption;
จบ;
ขั้นตอน TForm1.SetColor (AColor: TColor);
เริ่ม
Self.Color := AColor;
จบ;
ขั้นตอน TForm1.SetEditText (AText: string);
เริ่ม
Self.Edit1.Text := AText;
จบ;
จากนั้นมาเพิ่มฟังก์ชันการทำงานอัตโนมัติให้กับโปรแกรมนี้ คลิกปุ่ม New Items คลิกแท็บ ActiveX ในหน้าต่าง New Items ที่ป็อปอัป เลือก Automation Object คลิกปุ่ม OK และป้อนชื่อ CoClass ในป๊อปอัป Automation Object Wizard MyAutoSrv, Delphi จะสร้างไฟล์ AutoSrv_TLB.pas (คลาสไลบรารี) และหน่วยที่ใช้คลาสอินเทอร์เฟซไลบรารีคลาสโดยอัตโนมัติ และบันทึกหน่วยใหม่นี้เป็น AutoSrvClass.pas
ตอนนี้โปรแกรมนี้ได้กลายเป็นเซิร์ฟเวอร์อัตโนมัติแล้ว มาเพิ่มฟังก์ชันอินเทอร์เฟซอัตโนมัติกัน:
(1) คลิกเมนู View->Type Libray เลือกอินเทอร์เฟซ IMyAutoSrv ใน Type Library Editor คลิก New Property เลือกคุณสมบัติเป็น Read|Write ตั้งชื่อเป็น Caption และตั้งค่า Type เป็น BSTR
(2) คลิก New Method ตั้งชื่อเป็น SetColor คลิกแท็บพารามิเตอร์ทางด้านขวา คลิก ADD เพื่อเพิ่มพารามิเตอร์ให้กับฟังก์ชันอินเทอร์เฟซที่เพิ่มใหม่ ตั้งชื่อพารามิเตอร์เป็น AColor และตั้งค่าพารามิเตอร์ Type เป็น OLE_COLOR
(3) คลิก New Method อีกครั้ง ตั้งชื่อเป็น SetEditText เพิ่มพารามิเตอร์โดยใช้วิธีการข้างต้น ตั้งชื่อพารามิเตอร์เป็น AText และตั้งค่าพารามิเตอร์ Type เป็น BSTR
สุดท้าย เพิ่มโค้ดการใช้งานของฟังก์ชันอินเทอร์เฟซ และมันก็โอเค:
เพิ่ม MainForm ในส่วนการใช้งานของ AutoSrvClass.pas และเปลี่ยนรหัสเป็นรหัสต่อไปนี้
หน่วย AutoSrvClass;
{$WARN SYMBOL_PLATFORM ปิด}
อินเตอร์เฟซ
การใช้งาน
ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm;
พิมพ์
TMyAutoSrv = คลาส (TAutoObject, IMyAutoSrv)
ได้รับการคุ้มครอง
ฟังก์ชั่น Get_Caption: WideString; safecall;
ขั้นตอน Set_Caption (ค่า const: WideString safecall;
ขั้นตอน SetColor (AColor: OLE_COLOR);
ขั้นตอน SetEditText (const AText: WideString);
จบ;
การดำเนินการ
ใช้ ComServ;
ฟังก์ชั่น TMyAutoSrv.Get_Caption: WideString;
เริ่ม
ผลลัพธ์ := Form1.GetCaption;
จบ;
ขั้นตอน TMyAutoSrv.Set_Caption (ค่า const: WideString);
เริ่ม
Form1.SetCaption(ค่า);
จบ;
ขั้นตอน TMyAutoSrv.SetColor (AColor: OLE_COLOR);
เริ่ม
Form1.SetColor(AColor);
จบ;
ขั้นตอน TMyAutoSrv.SetEditText (const AText: WideString);
เริ่ม
Form1.SetEditText(AText);
จบ;
การเริ่มต้น
TAutoObjectFactory.Create (ComServer, TMyAutoSrv, Class_MyAutoSrv,
ciMultiInstance, tmApartment);
จบ.
เรียกใช้โปรแกรมนี้หนึ่งครั้งและมันจะลงทะเบียนเป็นเซิร์ฟเวอร์อัตโนมัติโดยอัตโนมัติ คุณสามารถค้นหาข้อมูลการลงทะเบียนที่เกี่ยวข้องได้ภายใต้คีย์หลัก HKEY_CLASSES_ROOT ในรีจิสทรี
ข้อมูลข้างต้นสาธิตวิธีการพัฒนาเซิร์ฟเวอร์อัตโนมัติ ซึ่งเราจะเรียกที่นี่
สร้างโปรแกรมใหม่ เพิ่มปุ่ม และประกาศตัวแปร Variant ในพื้นที่ VAR: AutoSrv: Variant
จากนั้นเพิ่มรหัสต่อไปนี้ใน Button1
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv'); {สตริงนี้เป็นชื่อโปรเจ็กต์ของเซิร์ฟเวอร์อัตโนมัติบวกกับชื่อ CoClass}
Self.Caption := AutoSrv.Caption;
AutoSrv.Caption := 'ฮ่าๆ';
AutoSrv.SetColor(CLRed);
AutoSrv.SetEditText('ฮ่าฮ่า');
จบ;
ฟังก์ชัน CreateOleObject จะส่งคืนอินเทอร์เฟซประเภท IDispatch ซึ่งเป็นอินเทอร์เฟซ IDispatch ที่อนุญาตให้โปรแกรมของเราทำการเชื่อมต่อล่าช้าไปยังอินเทอร์เฟซเซิร์ฟเวอร์อัตโนมัติ ตัวอย่างเช่น ถ้าเราเพิ่ม AutoSrv.Hello ด้านบน โปรแกรมยังสามารถคอมไพล์และ ผ่าน แต่จะมีข้อผิดพลาดเกิดขึ้นระหว่างการดำเนินการ ประสิทธิภาพการดำเนินการของการใช้ Variant จะช้ากว่าการใช้การประกาศอินเทอร์เฟซโดยตรง
รันแล้วคลิกปุ่มจะเห็นว่าโหลดโปรแกรมบริการอัตโนมัติแล้วและสีแบบฟอร์มและสตริงใน EDIT1 ก็ถูกกำหนดตามโค้ดของเรา 555 ง่ายมากเหรอ?