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