フレンド、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の問題であるということです - 私はそれを知らなかったように!