2009-08-07 16 views
2

フレンド、Oracle FormsからMicrosoft Wordのスペルチェックを呼び出すと、Vistaのフォーカスの問題が発生する

VistaでOracle Formsアプリケーションをテストする際に、面白い「挑戦」が見つかりました。

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

自動化を使用してフォームからスペルチェッカーが呼び出され、使用される方法はmetalinkの注記に基づいています。295449.1 WebUtilを使用してMS Wordスペルチェッカーをフォームと統合する方法。

のWindows XPとOffice 2003

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

Office 2007およびOffice 2003のVistaではこの問題が発生します。 WindowsXP上でFormsアプリケーションを起動するために使用したのと同じURLを使用すると、Microsoft Wordのスペルチェッカーダイアログウィンドウがexpとして表示されるため、Vistaによって問題が発生しますそれは正面にあります。

Vista内では、Windows XP SP2への互換性モードを設定しようとしましたが、問題は残ります。

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

他に誰かがこれを実行していますか?他の人がこの問題を経験した場所への助けや指針は、喜んで受け取ります!

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

環境詳細

Oracle Formsの:10.1.2.3 JRE:JRE 1.6.0_14日 データベース:10.2.0.3 VistaのBusiness Editionのサービスパック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; 

EDIT:2009年10月8日

がある場合残念ながら、私は(答えを見ることができないこのリンクhttp://www.experts-exchange.com/Microsoft/Development/MS_Access/Q_23085081.htmlは同じ問題を詳細に(代わりに言葉を制御するOracle Formsのこの時間は、それはMSのアクセスです)それはある)

EDIT:2009年12月8日

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

答えて

2

これはAutomation \ OLEだけでは解決できないようですが、このthreadはOLE \ AutomationとVista内のactivateメソッドに問題があります。

窓を操作するためにウィンドウAPIを呼び出す方法です。

関連する問題