2010-06-01 21 views
16

के साथ गायब हो जाता है जब मैं ओलेकॉन्टेनर (इनस्थल) में एक वर्ड दस्तावेज़ संपादित कर रहा हूं और मैं दूसरे वर्ड दस्तावेज़ पर स्विच करता हूं और फिर मैं वापस स्विच करता हूं, तो मैं अब अपने दाएं बटन का उपयोग नहीं कर सकता। संदर्भ मेनू दिखाई नहीं देगा।संदर्भ मेनू शब्द स्वचालन

यह वर्ड 2000 पर होता है, शब्द 2007 पर नहीं (मुझे अन्य संस्करणों के बारे में पता नहीं है)।

मैं इस व्यवहार से कैसे छुटकारा पा सकता हूं?

पुन: पेश करने के लिए:

  • बनाएं एक नया VCL आवेदन
  • एक मेनूबार
  • जोड़ें TOleContainer, संरेखित alClient, AllowInPlace और AllowActiveDoc यह सच है जोड़ें।
  • TOleContainer के साथ, सम्मिलित करें Word 97-2003 दस्तावेज़
  • अपने eventhandler में मेनूबार करने के लिए एक MENUITEM 'बंद करें' जोड़ें, OleContainer1.DestroyObject जोड़ने के लिए, ताकि आप संपादन
  • भागो इस आवेदन, पर रोकने के लिए DoubleClick में सक्षम हैं OleContainer तो यह संपादन मोड में जाता है
  • अब Word 2000
  • अपने एप्लिकेशन पर वापस स्विच करें, contextmenu अब और काम नहीं करेगा।

संपादित करें: मैं निम्नलिखित प्रणाली (Citrix का उपयोग) पर व्यवहार ऊपर reproduced:

विंडोज सर्वर 2003 एंटरप्राइज़ संस्करण
संस्करण 5.2 (3790.srv03_sp2_rtm.070216-1710 बिल्ड: सर्विस पैक 2)

माइक्रोसॉफ्ट वर्ड 2000 (9.0.6926 एसपी -3)

मैंने एप्लिकेशन बनाने के लिए डेल्फी 7 (बिल्ड 8.1) का उपयोग किया।

+1

आप कृपया जो संस्करणों और सर्विस पैक स्तर आप OS का उपयोग कर रहे हैं (बता सकते हैं, डेल्फी, ? वर्ड) – pastacool

+0

इस त्रुटि Citrix –

+0

@Judah Himango के बाहर होती है:।। मैं एक सिस्टम Citrix की वर्ड 2000 के बाहर के साथ उपलब्ध नहीं है, तो दुर्भाग्य से मैं अपने सवाल का जवाब नहीं कर सकते हैं –

उत्तर

4

ActiveX के माध्यम से Office ऐप्स होस्ट करते समय, आपको कुछ ऑफिस ऐप्स के कुछ संस्करण हास्यास्पद रूप से विंडो सक्रियण परिवर्तनों के बारे में सूचित होने के बारे में स्पर्श करेंगे और यह विशेष रूप से उनके संदर्भ मेनू को प्रभावित कर सकता है।

असल में, यदि आप उन्हें तब भी नहीं बताते जब भी वे खो देते हैं या फोकस प्राप्त करते हैं और जब भी आपकी शीर्ष-स्तरीय विंडो फोकस हो जाती है या फोकस हो जाती है (भले ही खिड़की में उनके बच्चे का नियंत्रण फोकस न हो), फिर वे घास जा सकते हैं।

यह कुछ ऐसा है जो मैंने लंबे समय से लड़ा था और विशेष रूप से निराशाजनक है जब आप अनुप्रयोगों को यह बताना चाहते हैं कि वे आपके से बेहतर स्थिति में हैं (जैसे जब वे सीधे खो देते हैं या फोकस प्राप्त करते हैं .. या जब वे एक पॉप-अप मेनू बनाते हैं जो उनसे दूर ध्यान केंद्रित करता है और फोकस लेने वाले किसी अन्य ऐप/विंडो पर अलग-अलग संभाला जाना है, जिसे आप दिव्य के पास छोड़ चुके हैं ... उह।

वैसे भी, कार्यालय ऐप्स को IOleInPlaceActiveObject इंटरफ़ेस का खुलासा करना चाहिए और आपको यह सुनिश्चित करना चाहिए कि आप इसे सक्रियण/निष्क्रियता के बारे में बताने के लिए अपने ऑनफ्रेम विन्डोएक्टिवेट विधि को कॉल करें।

स्मृति से

, और कार्यालय की मेजबानी के लिए अपने खुद के कोड का शीघ्रता से अवलोकन, कि सबसे महत्वपूर्ण बातों में से एक है। यह अनदेखा करना भी एक आसान बात है, "नहीं, यह इससे कोई फर्क नहीं पड़ता ... खिड़की सक्रिय है या नहीं, इस बारे में कुछ भी क्यों ख्याल रखेगा?" आपको लगता है कि यह केवल कुछ मामूली कॉस्मेटिक मुद्दों (जैसे सक्रिय नहीं होने पर सक्रिय दिख सकता है) का कारण बन सकता है, लेकिन इससे पूरी चीज लॉक हो या क्रैश हो सकती है। मेरा विश्वास करो, कार्यालय ऐसी चीजों के बारे में बहुत ज्यादा परवाह करता है! मैं छाप वहाँ अभी भी है कि कार्यालय के कवर के तहत सहकारी मल्टीटास्किंग clunking के दिनों से एक बहुत पुरानी, ​​एकल पिरोया डिजाइन दूर हो जाते हैं और यह बहुत भ्रमित हो सकते हैं अपनी खिड़कियों की दो लगते हैं जब एक ही बार में सक्रिय होने के लिए।

क्षमा करें कि मैं केवल उस दिशा में इंगित करने से अधिक सलाह नहीं दे सकता ... लेखन ActiveX होस्ट एक काला कला है (सभी दस्तावेज होस्ट किए जाने की दिशा में तैयार हैं, मेजबान नहीं :() और मुझे एकमात्र तरीका मिला काम करने के लिए मेरा अपना कोड परीक्षण और त्रुटि के महीनों और बहुत सारे डीबग-आउट के माध्यम से था। दुर्भाग्य से यह एक दुःस्वप्न है।

सलाह का एक अंतिम भाग: विशेष अनुप्रयोगों के लिए हार्डकोड क्लड से डरो मत । यह आईई ही है, क्या करता है रजिस्ट्री सेटिंग्स के साथ जो क्या (मैं और कुछ और कोड में hardcoded संदेह है) के लिए आवेदन किया हो kludges नियंत्रित करने के लिए है। ActiveX इस तरह के एक खराब परिभाषित गड़बड़ है कि विभिन्न नियंत्रण अपने स्वयं के quirks और कीड़े है और यह है एक स्वच्छ, जेनेरिक होस्ट लिखना असंभव है जो उन सभी के साथ काम करता है। (ए च Ange है कि एक ठीक करता है एक और टूट जाएगा) तुम भी चीजें हैं जो केवल यदि आप एक ही आदेश आईई, करता है कि सिर्फ इसलिए कि वे केवल IE के साथ परीक्षण किया गया है में इंटरफेस की कोशिश काम मिल जाएगा।; चीजें थोड़ा अलग करें और वे अलग हो जाते हैं। :(

+1

थोड़ा देर हो चुकी है, लेकिन धन्यवाद, यह चाल है! यह Word 2007 के साथ समस्या को भी हल करता है जहां आप हमारे ऐप और वर्ड के बीच स्विच करते समय मेनू का उपयोग करने में असमर्थ थे। (मैंने तय किया कि uiActivate को कॉल करने के साथ, लेकिन यह बेहतर और तेज़ है)। पीएस: आप काले कला की बात के बारे में सही हैं, आप नहीं जानना चाहते हैं कि हम अपने ग्राहकों से कितने त्रुटि रिपोर्ट प्राप्त करते हैं जो पूरी तरह से अपरिवर्तनीय हैं। –

+0

@The_Fox, खुशी है कि यह उपयोगी था! –

0

मुझे आश्चर्य है कि क्या आप ओएलई कंटेनर वाले फॉर्म से Lost Focus टाइप इवेंट पकड़ सकते हैं, उस समय आप ओएलई कंटेनर में दस्तावेज़ को नष्ट कर सकते हैं लेकिन इसे स्मृति में रख सकते हैं। फिर, किसी भी Got Focus फॉर्म के लिए इवेंट प्रकार पर, आप यह देखने के लिए जांच सकते हैं कि आपके पास वह दस्तावेज़ है या नहीं; यदि हां, तो इसे ओएलई कंटेनर में फिर से लोड करें।

क्या यह आपके लिए काम करेगा?

0

शायद आप एप्लिकेशन को आमंत्रित करने के लिए एक घटक का उपयोग कर सकते हैं। मुझे इंटरफेस के माध्यम से शब्द का आह्वान करने और फिर मेनू पर विशेष आदेश पंजीकृत करने में कोई कस्टम कंपोनेंट बनाने में कोई समस्या नहीं थी। एक कंटेनर में आप एक विशेष मेनू नहीं डिज़ाइन कर सकते हैं फार्म पर? कुछ WordSink Evenets कि बचत और समापन में मदद मिलेगी कि शब्द कॉम वस्तुओं के साथ संयोजन के रूप में इस्तेमाल किया जा सकता हैं।

संबंधित मुद्दे