2

友達、

VistaでOracleFormsアプリケーションをテストしたところ、興味深い「課題」が見つかりました。

アプリケーションは、Microsoft Wordのスペルチェッカーを呼び出して、フィールドのスペルチェックを実行できます。呼び出されると、ユーザーには標準のMicrosoftWordスペルチェッカーダイアログウィンドウが表示されます。Word自体はユーザーには見えません。

スペルチェッカーは自動化を使用してフォームから呼び出され、使用される方法はメタリンクノートに基づいています。295449.1WebUtilを使用してMSWordスペルチェッカーをフォームと統合する方法。

これは、WindowsXPおよびOffice2003を使用して呼び出された場合にうまく機能しました。

ただし、これと同じ(変更されていない)機能をVistaで実行すると、Microsoft Wordのスペルチェッカーダイアログウィンドウがブラウザウィンドウの後ろに表示されるため、ユーザーには何も起こらず、機能が機能していないように見えます(Vistaには表示されません)。スペルチェッカーが呼び出されたタスクバー)

この問題は、Office2007およびOffice2003を搭載したVistaで発生します。WindowsXPでFormsアプリケーションを起動するために使用したのと同じURLを使用すると、MicrosoftWordのスペルチェッカーダイアログウィンドウが期待どおりに表示されるため、Vistaが原因であることがわかります。正面にあります。

Vista内で、Officeの互換性モードをWindows XP SP2に設定しようとしましたが、問題は解決していません。

また、ACTIVATEを明示的に設定しようとしましたが(以下のサンプルコードからわかるように)、成功しませんでした。

他の誰かがこれに遭遇しましたか?他の人がこの問題を経験した場所への助けやポインタはありがたいことに受け取られます!

私の環境の詳細は次のとおりです。

環境の詳細

Oracle Forms:10.1.2.3 JRE:Sun JRE 1.6.0_14データベース:10.2.0.3 Vista:Business Edition with Service Pack 1 Office: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;

編集:10/08/2009

このリンクhttp://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_23085081.htmlは、同じ問題の詳細を示しています(ただし、今回は、単語を制御するOracleフォームの代わりに、msアクセスです)残念ながら、答えがわかりません。 (ある場合は!)

編集:2009年12月8日

専門家交換の状態へのすべてのリンクは、これがビスタの問題であるということです-私がそれを知らなかったように!

4

1 に答える 1

2

これは Automation\OLE だけでは解決できないようです。このスレッドは、OLE\Automation と Vista 内の activate メソッドに問題があることを指摘しています。

Windows api を呼び出してウィンドウを操作する方法です。

于 2009-08-12T10:06:16.943 に答える