swt java 内嵌ActiveX控件
2018-01-06 20:56
281 查看
这里用的是SWT/JFace开发application中SWT自带的org.eclipse.swt.ole.win32 包可以支持内嵌OLE和ActiveX。
具体用法如下:
1、不带参数的方法调用
2、带参数的方法调用
调用OLE Exemple:Java程序内嵌Word应用程序
SWT调用ActiveX简单总结
具体用法如下:
//创建一个OleFrame做为OLE(或ActiveX)的框架 OleFrame oleFrame = new OleFrame(this, SWT.NONE); //创建ActiveX的容器,其中的classID是ActiveX的classid,在注册表中可以找到 OleControlSite oleControl = new OleControlSite(oleFrame, SWT.NONE, “classID”); //OleAutomation类用来执行ActiveX中的方法 OleAutomation oleAutomation = new OleAutomation(oleControl); //将ActiveX显示在application中 oleControl.doVerb(OLE.OLEIVERB_SHOW); 调用AcitveX中方法的具体过程:
1、不带参数的方法调用
//获取Method Name的ID,Method Name为ActiveX中具体的方法名 int[] regspid = oleAutomation.getIDsOfNames(new String[] { "Method Name" }); int dispIdMember = regspid[0]; //方法调用 oleAutomation.invoke(dispIdMember);
2、带参数的方法调用
//获取Method Name的ID,Method Name为ActiveX中具体的方法名 int[] regspid = oleAutomation.getIDsOfNames(new String[] { "Method Name" }); int dispIdMember = regspid[0]; //设置方法的具体参数。Variant数组的长度为Method Name方法参数的个数 //假设有四个参数 Variant[] rgvarg = new Variant[4]; rgvarg[0] = new Variant(fileID); rgvarg[1] = new Variant(itdsURL); rgvarg[2] = new Variant(idType); rgvarg[3] = new Variant(reportURL); //方法调用 oleAutomation.invoke(dispIdMember, rgvarg);
调用OLE Exemple:Java程序内嵌Word应用程序
package test.swt; import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleClientSite; import org.eclipse.swt.ole.win32.OleFrame; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Composite; public class ActiveXTest { private Shell sShell = null; private Button button = null; private OleClientSite clientSite; public static void main(String[] args) { Display display = Display.getDefault(); ActiveXTest thisClass = new ActiveXTest(); thisClass.createSShell(); thisClass.sShell.open(); while (!thisClass.sShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } /** * This method initializes sShell */ private void createSShell() { GridData gridData = new GridData(); gridData.horizontalSpan = 2; GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; sShell = new Shell(); sShell.setText("Shell"); sShell.setLayout(gridLayout); sShell.setSize(new Point(800, 600)); OleFrame frame = new OleFrame(sShell, SWT.NONE); button = new Button(sShell, SWT.NONE); button.setLayoutData(gridData); button.setText("Save"); button.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { clientSite.save(new File("d:/test.docx"),true); } }); frame.setSize(800,600); clientSite = new OleClientSite(frame, SWT.NONE,"Word.Document.8"); clientSite.setSize(400,400); clientSite.doVerb(OLE.OLEIVERB_SHOW); } }
SWT调用ActiveX简单总结
public class SWT_ActivexUtil { private OleFrame _frame; private OleControlSite _site; private OleAutomation _auto; SWT_ActivexUtil(String activexId, OleControlSite site){ if(site == null){ Shell shell = new Shell(); _frame = new OleFrame(shell, SWT.NONE); _site = new OleControlSite(_frame, SWT.NONE, activexId); _auto = new OleAutomation(_site); }else{ _site = site; _auto = new OleAutomation(site);; } } public int getID(String name){ try { int[] ids = _auto.getIDsOfNames(new String[]{name}); if(ids.length>=0) return ids[0]; } catch (RuntimeException e) { e.printStackTrace(); } return -1; } public Variant[] createVariants(String[] paras){ Variant[] vr = new Variant[paras.length]; for(int i=0;i<paras.length;i++){ vr[i] = new Variant(paras[i]); } return vr; } public Variant getProperty(String prop){ int propId = getID(prop); Variant v = null; try { v = _auto.getProperty(propId); } catch (Exception e) { e.printStackTrace(); } return v; } public void setProperty(String name, String... params){ int propId = getID(name); if(propId < 0) return; if(params.length==1) _auto.setProperty(propId, new Variant(params[0])); else{ Variant[] vs = new Variant[params.length]; int i=0; for(String param:params){ vs[i] = new Variant(param); i++; } _auto.setProperty(propId, vs); } } public void setProperty(String name, Variant... params){ int propId = getID(name); if(propId < 0) return; _auto.setProperty(propId, params); } public Variant execute(String methodName, Variant... params){ int mid = getID(methodName); if(mid<0) return null; Variant rtnv; if(params == null) rtnv = _auto.invoke(mid); else rtnv = _auto.invoke(mid, params); return rtnv; } public Variant execute(String methodName){ int mid = getID(methodName); if(mid<0) return null; Variant rtnv = _auto.invoke(mid); return rtnv; } public void addEventListener(int eventID, OleListener listener){ _site.addEventListener(eventID, listener); } public void removeEventListener(int eventID, OleListener listener){ _site.removeEventListener(eventID, listener); } }
相关文章推荐
- swt java 内嵌activeX控件
- swt java 内嵌ActiveX控件
- java application中内嵌ActiveX控件
- java SWT:限制数值输入的Text文本框通用组件
- SWT = 本地化的Java?
- java学习第一天--窗体程序开发之swt学习
- Java秘史:隐藏在SWT/Swing背后的故事
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
- Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bi
- 使用 Java Web Start 部署 SWT 应用程序
- java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons解决方法
- 在Mac下运行swt出错:java.lang.UnsatisfiedLinkError: no swt-carbon-3346 or swt-carbon in swt.library.path, java.library.path or the jar file
- Java SWT实现MSN风格的下拉框
- java swt 之 图片控件
- 编写Java GUI的好工具WindowBuilder Pro[包含Swt-Designer和Swing-Designer]
- java SWT嵌入IE,SafeArray
- JAVA Swt初识
- Java 内嵌的Derby数据库基本使用
- Loonframwork到SWT的移植测试(JAVA GAME TEST SOURCE)
- java SWT:最有效的layout方法Control.requestLayout()