مشكلة التركيز فيستا عند استدعاء Microsoft Word Spell Check من أشكال Oracle

StackOverflow https://stackoverflow.com/questions/1243708

سؤال

اصحاب،

في اختبار تطبيق Oracle Forms على Vista، وجدت "تحديا" مثيرا للاهتمام.

يمكن للتطبيق استدعاء المدقق الإملائي Microsoft Word لإجراء فحص موجود في حقل. عند الاحتجاج، يظهر المستخدم نافذة مربع حوار حوار مربع حوار Microsoft Word الإملائي. الكلمة نفسها مفهون للمستخدم.

يتم استدعاء المدقق الإملائي من النماذج باستخدام التشغيل الأتمتة ويستند الطريقة المستخدمة على Metalink ملاحظة: 295449.1 كيفية دمج مدقق MS Word الإملائي مع النماذج باستخدام Webutil.

هذا عمل جيدا عند الاحتجاج باستخدام نظام التشغيل Windows XP و Office 2003.

ومع ذلك، عند تشغيل هذه الوظيفة نفسها (غير متوقعة) على نظام التشغيل Vista، تظهر نافذة حوار مربع حوار Microsoft Word Spell of Checker خلف نافذة المتصفح حتى يبدو أن أي شيء قد حدث ولا يعمل الوظيفة (لا يوجد مؤشر على نظام التشغيل Vista شريط المهام الذي تم استدعاء المدقق الإملائي)

المشكلة تحدث على نظام التشغيل Vista مع Office 2007 و Office 2003. أستطيع أن أرى أن المشكلة ناتجة عن نظام التشغيل Vista لأنه إذا كنت تستخدم نفس عنوان URL المستخدم لإطلاق تطبيق النماذج على WindowsXP، تظهر نافذة مربع حوار Microsoft Word Spell Checker كما هو متوقع، والتي في الامام.

في Vista، حاولت تحديد وضع التوافق للمكتب إلى Windows XP SP2 ولكن المشكلة تظل.

لقد حاولت أيضا إعداد تنشيط صراحة (كما ترون من نموذج التعليمات البرمجية أدناه) ولكن دون نجاح.

هل تم تشغيل أي شخص آخر بهذا؟ أي مساعدة أو مؤشرات إلى حيث شهد آخرون هذه المشكلة قد تلقوا بامتنان!

تفاصيل البيئة الخاصة بي هي:

تفاصيل البيئة

أشكال أوراكل: 10.1.2.3 Jre: Sun Jre 1.6.0_14 قاعدة البيانات: 10.2.0.3 فيستا: طبعة الأعمال مع حزمة الخدمة 1 المكتب: 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 Access) لسوء الحظ، لا يمكنني رؤية الإجابة (إذا كان هناك واحد!)

تحرير: 12/08/2009.

جميع الرابط إلى دول الصرف الخبراء هو أن هذه مشكلة فيستا - مثلما لم أكن أعرف ذلك!

هل كانت مفيدة؟

المحلول

يبدو أن هذا لا يمكن حله باستخدام الأتمتة OLE وحدها، هذا مسلك ملاحظات هناك مشكلة في طريقة التنشيط داخل OLE Automation و Vista.

الطريق حوله هو استدعاء واجهة برمجة تطبيقات Windows لمعالجة النوافذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top