مشكلة التركيز فيستا عند استدعاء Microsoft Word Spell Check من أشكال Oracle
-
12-09-2019 - |
سؤال
اصحاب،
في اختبار تطبيق 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 لمعالجة النوافذ.