从Oracle形式调用Microsoft Word中的拼写检查时,Vista的焦点问题(Vista

2019-09-22 11:45发布

朋友们,

在测试Vista上我们的Oracle表单应用程序,我发现一个有趣的“挑战”。

应用程序可以调用微软的Word拼写检查器来执行对现场拼写检查。 当被调用时,向用户显示标准的Microsoft Word拼写检查器对话框窗口。 这个词本身是隐身可用户。

拼写检查器是使用自动化形式调用和使用的方法是基于MetaLink说明:295449.1如何整合微软Word拼写检查器使用表单使用WebUtil。

这已经使用Windows XP和Office 2003调用时效果很好。

然而,当此相同(不变)功能在Vista上运行,微软Word拼写出现在浏览器窗口后面检查对话框窗口,以便用户似乎什么也没发生和功能不工作(有关于Vista的任何迹象任务栏是拼写检查器已被调用)

在Vista上出现的问题与Office 2007和Office 2003中,我可以看到这个问题是Vista中造成的,因为如果我使用用于启动的WindowsXP上的表单应用程序相同的URL,微软的Word拼写检查器出现预期的对话框窗口,在前面。

在Vista中我已经尝试设置兼容模式的Office到Windows XP SP2,但问题仍然存在。

我也试图明确设置来激活,但没有成功(你可以从下面的代码示例见)。

有没有其他人在跑这个? 任何帮助或指针在别人遇到过这个问题将受到欢迎!

我的环境细节:

环境细节

Oracle表单:10.1.2.3 JRE:孙JRE 1.6.0_14数据库:10.2.0.3 Vista的:商业版带有Service Pack 1处:2003或2007

该代码(这需要在客户端的Oracle去)用于调用拼写检查是:

PROCEDURE SPELL_CHECK (ITEM_NAME IN VARCHAR2) IS 

 MY_APPLICATION  CLIENT_OLE2.OBJ_TYPE; 
 MY_DOCUMENTS   CLIENT_OLE2.OBJ_TYPE; 
 MY_DOCUMENT   CLIENT_OLE2.OBJ_TYPE; 
 MY_SELECTION   CLIENT_OLE2.OBJ_TYPE; 
 GET_SPELL    CLIENT_OLE2.OBJ_TYPE; 
 MY_SPELL     CLIENT_OLE2.OBJ_TYPE; 
 ARGS      CLIENT_OLE2.LIST_TYPE; 
 SPELL_CHECKED  VARCHAR2(4000); 
 ORIG_TEXT    VARCHAR2(4000); 

BEGIN 
  ORIG_TEXT := ITEM_NAME; 

-- CREATE WORD.APPLICATION OBJECT 
  MY_APPLICATION := CLIENT_OLE2.CREATE_OBJ('WORD.APPLICATION');  
  --CLIENT_OLE2.SET_PROPERTY(MY_APPLICATION, 'VISIBLE', FALSE);
  CLIENT_OLE2.SET_PROPERTY(MY_APPLICATION, 'VISIBLE', TRUE);  

  --CLIENT_OLE2.INVOKE(MY_APPLICATION, 'ACTIVATE');  


-- GET HANDLE FOR DOCUMENTS COLLECTION 
  MY_DOCUMENTS := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'DOCUMENTS'); 

-- ADD A NEW DOCUMENT TO THE DOCUMENTS COLLECTION 
  MY_DOCUMENT := CLIENT_OLE2.INVOKE_OBJ(MY_DOCUMENTS, 'ADD'); 

-- GET HANDLE FOR SELECTION OBJECT 
  MY_SELECTION := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'SELECTION'); 

-- INSERT THE TEXT FIELD INTO DOCUMENT 
  CLIENT_OLE2.SET_PROPERTY(MY_SELECTION, 'TEXT', ORIG_TEXT); 

-- GET HANDLE FOR ACTIVE DOCUMENT  
  GET_SPELL := CLIENT_OLE2.GET_OBJ_PROPERTY(MY_APPLICATION, 'ACTIVEDOCUMENT'); 

-- INVOKE SPELL CHECKER 
  CLIENT_OLE2.INVOKE(GET_SPELL, 'CHECKSPELLING'); 

  CLIENT_OLE2.INVOKE(MY_APPLICATION, 'ACTIVATE');  

-- Added to handle a cancel request.  
  CLIENT_OLE2.INVOKE(MY_SELECTION,'WholeStory');   
  CLIENT_OLE2.INVOKE(MY_SELECTION,'Copy');  

-- GET CHECKED TEXT FROM DOCUMENT 
  SPELL_CHECKED := CLIENT_OLE2.GET_CHAR_PROPERTY(MY_SELECTION, 'TEXT'); 

-- REFORMAT RETURN TEXT TO DISPLAY CORRECTLY IN FORMS 
  SPELL_CHECKED := substr(replace(SPELL_CHECKED,chr(13),chr(10)), 1, length(SPELL_CHECKED)); 

-- COPY NEW TEXT IN THE FORM 
  COPY(SPELL_CHECKED,ITEM_NAME); 

-- CLOSE THE DOCUMENT WITHOUT SAVING 
  ARGS := CLIENT_OLE2.CREATE_ARGLIST;  
  CLIENT_OLE2.ADD_ARG(ARGS, 0);  
  CLIENT_OLE2.INVOKE(MY_DOCUMENT, 'CLOSE',ARGS); 
  CLIENT_OLE2.DESTROY_ARGLIST(ARGS);  

-- RELEASE THE OLE OBJECTS 
  CLIENT_OLE2.RELEASE_OBJ(MY_SELECTION); 
  CLIENT_OLE2.RELEASE_OBJ(GET_SPELL); 
  CLIENT_OLE2.RELEASE_OBJ(MY_DOCUMENT); 
  CLIENT_OLE2.RELEASE_OBJ(MY_DOCUMENTS); 
  CLIENT_OLE2.INVOKE(MY_APPLICATION, 'QUIT'); 
  CLIENT_OLE2.RELEASE_OBJ(MY_APPLICATION);     

END;

编辑:2009年10月8日

此链接http://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_23085081.html详细说明了同样的问题(不过这一次不是甲骨文形式控制字,它是毫秒的存取),不幸的是,我不能看到答案(如果有一个是!)

编辑:12/08/2009

所有链接到专家交换状态是,这是一个Vista的问题 - 就像我不知道!

Answer 1:

貌似这个不能单独使用自动化\ OLE来解决,这个线程注意到有一个与OLE \自动化和Vista中的激活方法的问题。

绕着它的方法是调用Windows API操纵窗口。



文章来源: Vista focus issue when invoking Microsoft Word spell check from Oracle Forms