SWT with OLE Object
OLE Object คืออะไร?
OLE Object คือ object ชนิดหนึ่ง ที่สนับสนุน OLE protocol สำหรับ object เพื่อใช้เชื่อมต่อ หรือ ฝังตัว เช่น เราสามารถเชื่อมต่อหรือฝัง Excel speedsheet ลงใน field, form หรือ report จะเห็นได้ว่า OLE Object ที่เชื่อมต่อนั้นแสดงข้อมูลใน form หรือ report แต่ ข้อมูลนั้นยังคงเป็นของแฟ้มต้นฉบับเดิม
OLE Object ที่ SWT สามารถใช้งาน แบ่งออกเป็น 2 อย่างคือ
1. OLE Document – เช่น Word, Excel และ PowerPoint
2. ActiveX Control – เช่น Internet Explorer มี ActiveX Control คือ COM objects
เราสามารถจะฝัง โปรแกรมเหล่านี้ ลงใน SWT Application ที่ทำงานบน M$ Windows platform
การฝัง OLE Object ใน SWT Application
เราสามารถฝัง OLE Object ใน SWT widgets และ สามารถเรียกมันขึ้นมาทำงาน
ให้ผู้่ใช้สามารถจัดการแก้ไขโดย Application นั้นได้ เช่น ผู้สามารถเปิด file.doc โดย M$ Word และจัดการแก้ไข เมื่อแก้ไข เสร็จเรียบร้อย เราสามารถตรวจสอบได้ว่า file มีการแก้ไขหรือเปล่า และยังสามารถบันทึก file นั้นได้ จากนั้นก็ปิดโปรแกรม
ขั้นตอนการทำงาน
*
สร้าง Display เพื่อ จัดการ การติดต่อกับ SWT
*
สร้าง Shell เป็น Window
*
กำหนด Layout
*
SWT Application จะต้องมี menu bar และ menu bar ที่สร้างนี้จะเป็น menu bar ของ application ที่จะฝัง OLE Document ไว้ เราสามารถสร้าง menu bar ได้เองตามใจชอบ
*
สร้าง OleFrame ที่คอยจัดการ ขนาด, เมนู และ หน้าต่าง
*
สร้าง OleClientSite หรือ OleControlSite
OleClientSite ใช้สำหรับ OLE Document การฝัง OLE Document มีค่าเทียบเท่ากับ การฝังทั้ง Application ลงไป นอกจากนี้ OLE Document ยังมี tool bar และ menu bar ของมันเอง เพื่อใช้งานต่าง ๆ
OleControlSite ใช้สำหรับ ActiveX Control จะให้บริการเฉพาะ content part เท่านั้น ส่วน ลักษณะการทำงานอื่น ๆ เราจะต้องจัดการเองผ่าน API ของ ActiveX Control
เราสามารถ ตรวจสอบได้ว่า COM Object สนับสนุน OLE Document หรือไม่ โดยดูจาก IOleDocument Interface ถ้าเป็น ActiveX ก็ดูจาก IOleControl Interface ถ้าต้องการรายละเอียดของ Interface เหล่านี้ สามารถดูได้จาก type library
* สั่ง Activate OLE Object
* สั่งเปิด Shell และรอปิด เมื่อสิ้นสุดการทำงาน เป็นอันเสร็จพิธี
ตัวอย่างการ embedding OLE Object
สร้าง OleClientSite โดยระบุ Program ID ซึ่งดูได้จาก Registry
ถ้าเป็นพวก OLE Document
Word -> Word.Document
Excel -> Excel.Chart
PowerPoint -> PowerPoint.Slide
เช่น clientsite = new OleClientSite(frame, SWT.NONE, “PowerPoint.Slide”);
ถ้าเป็น พวก ActiveX Control
M$ Explorer -> Shell.Explorer
MediaPlayer -> MediaPlayer.MediaPlayer.1
เช่น controlSite = new OleControlSite(frame, SWT.NONE,”Shell.Explorer”);
การกำหนด Constructor ข้างต้น เป็นการทำงานในลักษณะของ การสร้างเอกสารใหม่ หากเรา ต้องการเปิด file ที่มีอยู่แล้ว ก็สามารถทำได้ ดังนี้
เช่น
File file = new File(C:\\OleDocumentation.doc);
OleClientSite clientSite = new OleClientSite(frame, SWT.NONE, file);
OleClientSite มันจะค้นหาเองว่า ProgramID เป็นอะไร
การสั่ง Activate OLE Object
โดยใช้ method doVerb() เพื่อทำให้ OLE Document หรือ ActiveX Control มองเห็นใน
Appication ของเรา (แต่ยังไม่แสดง ให้เห็นบนจอ เพราะมันต้องอยู่ใน shell ) เพื่อให้ Application เราแสดงผลขึ้นมา จึงต้องเรียก shell.open
OLE.OLEIVERB_SHOW ใช้บอก object ให้แสดงผลและ เราต้องสั่ง shell.layout() ก่อนที่ จะทำ clientsite.doVerb เสมอ
ตัวอย่าง Source code
..:: Word.java ::..
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.ole.win32.*;
public class Word {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
OleFrame frame = new OleFrame(shell, SWT.NONE);
OleClientSite clientsite;
try {
clientsite = new OleClientSite(frame, SWT.NONE, “Word.Document”);
shell.layout();
clientsite.doVerb(OLE.OLEIVERB_SHOW);
} catch (SWTException ex) {
System.out.println(“Failed to create <> : ” + ex.getMessage());
return;
}
shell.open();
while (shell != null && !shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
ที่มา