Vista Fokus Problem beim Aufruf von Microsoft Word Rechtschreibprüfung von Oracle Forms
-
12-09-2019 - |
Frage
Freunde,
unsere Oracle Forms-Anwendung auf Vista Beim Testen habe ich eine interessante „Herausforderung“ gefunden.
Die Anwendung kann die Microsoft Word-Rechtschreibprüfung aufrufen, um eine Rechtschreibprüfung auf einem Feld durchzuführen. Wenn es aufgerufen wird, wird der Benutzer die Standard-Microsoft Word gezeigt checker Dialogfenster buchstabieren. Wort selbst ist invisble an den Benutzer.
Die Rechtschreibprüfung von Forms aufgerufen wird mithilfe der Automatisierung und das Verfahren verwendet wird, auf dem metalink Hinweis basiert. 295.449,1 Wie die MS Word Checker Integrieren Mit WebUtil Mit Forms Spell
Das hat gut funktioniert, wenn Windows XP und Office 2003 aufgerufen werden.
Allerdings, wenn dieses gleiche (unverändert) Funktionalität auf Vista ausgeführt wird, werden die Microsoft Word Rechtschreibprüfung Dialogfenster hinter dem Browserfenster so den Benutzer scheint es, dass nichts passiert ist und die Funktion funktioniert nicht (Es gibt keinen Hinweis darauf, auf der Vista-Taskleiste, die checker aufgerufen wurde)
buchstabierenDas Problem auf Vista tritt mit Office 2007 und Office 2003. Ich kann sehen, dass das Problem von Vista verursacht wird, denn wenn ich die gleiche URL verwenden, verwendet, um die Forms-Anwendung auf Windows XP zu starten, Zauber die Microsoft Word Checker Dialogfenster erscheinen als erwartet, die vor ist.
Innerhalb Vista Ich habe versucht, den Kompatibilitätsmodus für Office auf Windows XP SP2 Einstellung aber das Problem bleibt.
Ich habe auch versucht explizit Telle (wie Sie aus dem Beispielcode unten sehen können), aber ohne Erfolg.
Hat jemand sonst laufen, um das? Jede Hilfe oder Hinweise auf, wo andere haben dieses Problem aufgetreten wäre dankbar empfangen werden!
Meine Umwelt-Details sind:
Umwelt Details
Oracle Forms: 10.1.2.3 JRE: Sun JRE 1.6.0_14 Datenbank: 10.2.0.3 Vista: Business Edition mit Service Pack 1 Büro: 2003 oder 2007
Der Code (die in einer Client-Seite gehen muss Oracle) verwendet, um die Rechtschreibprüfung aufzurufen ist:
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: 10.08.2009
Dieser Link http://www.experts-exchange.com /Microsoft/Development/MS_Access/Q_23085081.html das gleiche Problem Details (aber dieses Mal anstelle von oracle Forms Kontrolle Wort, es ist ms access) Leider kann ich die Antwort nicht sehen (wenn es einen gibt, das ist!)
EDIT: 12.08.2009
Alle Links zum Experten-Austausch Staaten sind, dass dies ein Vista Problem ist - wie ich das nicht wusste
Lösung
Sieht aus wie dies kann nicht allein mit der Automation \ OLE gelöst werden, diese Thread es stellt fest, ein Problem mit der Activate-Methode in OLE \ Automation und Vista ist.
Die Art und Weise um sie herum ist die Windows-API aufrufen, um die Fenster zu manipulieren.