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)

buchstabieren

Das 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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top