2016-11-27 11 views
10

को प्रभावित किए बिना squiggly अंडरलाइन मैं एक वास्तविक समय भाषा विश्लेषण उपकरण पर काम कर रहा हूं जिसे Word 2016 में लेखक से ध्यान आकर्षित करने के लिए शब्दों को हाइलाइट करने की आवश्यकता है। VETO एड-इन का उपयोग करके .NET4.6.1 में लिखा गया है सी # के साथ। व्याकरण/वर्तनी जांच के बारे में सोचें, जो आपको यह दिखाने के लिए एक शब्द के नीचे एक squiggly लाइन जोड़ता है कि शब्द व्याकरण या वर्तनी त्रुटियों है। मैं अपने कुछ परिभाषित नियमों के लिए एक समान सुविधा जोड़ रहा हूं।वीएसटीओ वर्ड 2016: पूर्ववत

मैंने स्क्विग्ली लाइन जोड़ने पर चारों ओर खोज की, और Font.Underline और Font.UnderlineColor पर ठोकर खाई। मैंने इसे एक शब्द की सीमा पर सेट किया है, और ऐसा प्रतीत होता है कि दृश्य खींचने के बाद मुझे ध्यान आकर्षित किया गया था। हालांकि, एक समस्या है। प्रत्येक अंडरलाइन जो मैं रंग जोड़ता हूं या रेखांकित करता हूं, वह पूर्ववत स्टैक में एक पूर्ववत क्रिया जोड़ता है।

मैं यह नहीं करना चाहता हूं, या मैं स्टैक से कोड में किए गए क्रिया को पॉप करने का एक तरीका चाहता हूं। इसका उद्देश्य यह है कि उपयोगकर्ता टेक्स्ट को हटाने के लिए CTRL + Z का उपयोग करने में सक्षम होना है, और मेरी भाषा एलीसिस परिणाम को प्रभावित नहीं करता है।

मैं यह करने के बारे में कैसे जाउंगा?

उत्तर

4

मैं इस सवाल है, जो बिल्कुल वही बात पूछ रहा है पर ठोकर खाई: Prevent actions to be added to the word undo redo OR Remove actions from the undo redo CommandBarComboBox

@Manu के रूप में कहा कि एक ही सवाल भी अधिक से पूछा गया था MSDN पर जहां उत्तर था:

UndoClear विधि सूची खाली कर देगा। यह सबसे अच्छा है जो आप कर सकते हैं।

वहाँ भी यहाँ Word VSTO override CTRL+Z/CTRL+Y पर एक समान प्रश्न जो Microsoft.Office.Interop.Word.UndoRecord मार्ग या AddIns में MessageHooks पता चलता है।


और अधिक शोध करने के बाद मैं इस सूत्र के अंत में एक बहुत अच्छा विचार देखा: MSDN Draw my own squigglies on Word document जहां आप अपने कार्यों का ट्रैक रखने और फिर पूर्ववत में उन्हें अतीत को छोड़ और संचालन फिर से करें।

यहां "लेनदेन पूर्ववत/फिर से" Can I create an undo transaction in Word or Excel? (VSTO) करने के लिए कोड का एक उत्कृष्ट उदाहरण है।

मुझे नहीं लगता कि अधिलेखन कि निर्मित पद आदेशों अकेले VSTO का उपयोग कर सकता है, हालांकि

: आप इस एक ही विधि VSTO में एक बड़ी समस्या के अलावा के रूप में अपने जवाब में डिर्क वोलमर द्वारा नोट कर सकते हैं,

मैं VSTO में कुछ बिल्ट-इन आदेशों कुंजीपटल hooking घटनाओं का उपयोग कर आदेशों रोकना ओवरराइट है How to perform .Onkey Event in an Excel Add-In created with Visual Studio 2010? हालांकि मुझे यकीन है कि आप रिबन बटन आदेशों रोकना पुन: कर सकते हैं अगर नहीं हूँ। अधिक विशेष रूप से, पूर्ववत और रेडो रिबन यूआई में निर्मित गैलरी हैं और आप अंतर्निहित रिबन गैलरी के साथ कुछ भी नहीं कर सकते हैं। और 2010 की तरह संस्करणों में पूर्ववत करें/फिर बटन शीर्षक पट्टी में कर रहे हैं - और आप add/edit buttons on the title bar using VSTO नहीं कर सकते हैं:

enter image description here

तो अगर आप बटन आदेशों को फँसाने के साथ संबंध रहे हैं (हर कोई मुझे पता है Ctrl + Z का उपयोग करता है & वाई), आप, EditUndo और EditRedo घटनाओं के लिए पहुँच प्राप्त करने जैसे VBA कोड इंजेक्षन सकता है:

VB._VBComponent vbModule = VBProj.VBE.ActiveVBProject.VBComponents.Add(VB.vbext_ComponentType.vbext_ct_StdModule); 
String functionText = "Public Sub EditUndo() \n"; 
functionText += "MsgBox \"Undo Happened\"\n"; 
functionText += "End Sub"; 
vbModule.CodeModule.AddFromString(functionText); 

इस दृष्टिकोण के साथ मुख्य समस्या ट्रस्ट प्रदान किए जाने की जरूरत है।


यह एक ही गुणवत्ता आश्वासन Can I create an undo transaction in Word or Excel? (VSTO) में एक और जवाब माइक रेगन जो 3 महीने एक प्रकार की कटार के बाद जवाब कर रहा है। उन्होंने एक छिपे हुए दस्तावेज़ का उपयोग किया और इसे वास्तविक दस्तावेज में रखा जब किसी भी प्रकार की वीएसटीओ क्रियाओं को एक पूर्ववत करने के लिए आवश्यक था।

अभी भी पूर्ववत इतिहास में दर्ज की गई कार्रवाई को रोकने की समस्या का समाधान नहीं करता है।


मैं 0 करने के लिए UndoHistory को सीमित करने और वापस इसे रीसेट से 100 (जबकि एक कार्रवाई जोड़ने इतिहास अक्षम करने के लिए) के लिए एक रजिस्ट्री कुंजी की कोशिश किया था, लेकिन वह अपने ही एक्सेल के लिए https://support.microsoft.com/en-gb/kb/211922

प्रकट होता है

शायद पूर्ववत/फिर से इतिहास को अक्षम करने के लिए एक अनियंत्रित reg कुंजी हो सकता है लेकिन यह केवल स्टार्टअप पर Word द्वारा पढ़ा जाएगा। मैंने सोचा कि एक पूर्व युक्त UndoHistory कुंजी प्रत्येक Undo/Redo से पहले पढ़ा जाएगा, लेकिन इस दृष्टिकोण के साथ कोई भाग्य नहीं है।


यह हल करने के लिए बड़ा सीमाओं देखते हैं एक आसान समस्या नहीं है, तो यह आसान हो सकता है:

क) स्वीकार करते हैं कि अपनी वर्तनी/व्याकरण चेकर ऐड-इन पूर्ववत करें/फिर सूची में शामिल है (हार)।

बी) लाइन/टेक्स्ट स्क्रीन पर कहां काम करें और समस्या को हाइलाइट करने वाले एक पारदर्शी टूलटिप दिखाएं। Detecting text changes in Word 2016 from VSTO add-in या एक बहुत सरल दृष्टिकोण इस Microsoft ईमेल थ्रेड से XY पदों का पता लगाने के: https://groups.google.com/forum/#!topic/microsoft.public.word.vba.general/pKq4PsqD3cM

//position dialog relative to word insertion point (caret) 
int left = 0; 
int top = 0; 
int width = 0; 
int height = 0; 
MSWord.Range r = Globals.ThisDocument.Application.Selection.Range; 
MSWord.Window w = Globals.ThisDocument.ActiveWindow; 

w.GetPoint(out left, out top, out width, out height, r); 

frmPopUp newForm = new frmPopUp(); 
newForm.SetDesktopLocation(left + width + 2, top - newForm.Height + height); 

यह एक बहुत कठिन की तुलना में यह लगता है और आदर्श से कम है, यहाँ इस पद्धति पर आपका मार्गदर्शन करने के दो महान जवाब हैं है सी) केवल ट्रांजैक्शनल अंडो/रेडो के के साथ कुंजीपटल द्वारा ईवेंट को पूर्ववत करें/फिर से करें और उपयोगकर्ताओं को बटन का उपयोग करके परमाणु पूर्ववत/रेडो का उपयोग करने दें। पूर्ववत/फिर से बटन को हटाने के लिए यह बहुत ही कठिन होगा और इससे का ढेर होगा मेरा पूर्ववत बटन कहां चला गया है? समर्थन मामलों। तो ऐसा मत करें, अगर आप उत्सुक हैं, तो त्वरित पहुँच टूलबार अनुकूलन ".qat" फ़ाइलों से किया जा सकता है। रेफरी: https://support.microsoft.com/en-us/kb/926805

डी) माउस हुक का उपयोग करें और पता लगाएं कि पूर्ववत/रेडो बटन कब क्लिक किए जाते हैं। माउस को हुक करने के लिए कोड यहां दिया गया है, ध्यान दें कि यह कॉर्पोरेट एंटी-वायरस उत्पादों के साथ अच्छा नहीं खेलेंगे और मैं इसकी अनुशंसा नहीं करता: https://blogs.msdn.microsoft.com/andreww/2009/02/24/message-hooks-in-add-ins/ या https://github.com/gmamaladze/globalmousekeyhook

ई) जैसे Excel CustomTaskPane with WebBrowser control - keyboard/focus issues सिर्फ मेरी टिप्पणी BUG: Cant choose dates on a DatePicker that fall outside a floating VSTO Add-In कि संदेश कार्यालय में पंप संदर्भित कभी कभी अजीब व्यवहार प्रदर्शन के अनुसार सावधान रहना, कच्चे खिड़कियों संदेशों को बीच में रोकने की कोशिश करें।

2

दुर्भाग्यवश, ऐसा लगता है कि इस समस्या का कोई आसान समाधान नहीं है। मैंने जो देखा है, उसके पास आपके पास दो विकल्प हैं:

  1. आप Document.UndoClear का उपयोग कर पूरे पूर्ववत स्टैक को साफ़ कर सकते हैं। हालांकि, यह बहुत उपयोगकर्ता के अनुकूल नहीं होगा, क्योंकि सभी पिछली कार्रवाइयां अब पूर्ववत सूची में नहीं हैं।
  2. UndoRecord कक्षा के साथ काम करें। StartCustomRecord और EndCustomRecord पर आपकी कॉल के बीच, आपके कोड में सभी कार्रवाइयां केवल पूर्ववत स्टैक में एक आइटम उत्पन्न करेंगी। CTRL + Z अभी भी आपकी भाषा विश्लेषण को प्रभावित करेगा, लेकिन पूरे पूर्ववत स्टैक पहले के रूप में प्रदूषित नहीं होगा।

मुझे पता है कि यह नहीं है कि आप क्या चाहते हैं, but even Microsoft MVPs don't have a better solution

+0

धन्यवाद! यह वर्तमान स्थिति में काफी सुधार करता है। –

0

हो सकता है कि आप के बजाय SmartTags उपयोग करने पर विचार करना चाहिए ...

+0

क्या स्मार्टटैग टेक्स्ट के रंग को बदल सकते हैं और/या नीचे squiggles प्रस्तुत कर सकते हैं? –

+1

मुझे ऐसा नहीं लगता ... हालांकि, मुझे यकीन नहीं है कि दस्तावेज़ टेक्स्ट शैली को बदलना प्रश्न में वर्णित परिदृश्य में करना सही है - इसलिए सुझाव। –

+1

'एक्सेल 2010 और वर्ड 2010 में स्मार्ट टैग को बहिष्कृत किया गया है। हालांकि आप अभी भी एक्सेल 2010 और वर्ड 2010 के लिए प्रोजेक्ट्स में संबंधित एपीआई का उपयोग कर सकते हैं, लेकिन ये एप्लिकेशन स्वचालित रूप से शर्तों को पहचान नहीं पाते हैं, और मान्यता प्राप्त शर्तों को अब रेखांकित नहीं किया जाता है। उपयोगकर्ताओं को पाठ को राइट-क्लिक करके और संदर्भ मेनू पर अतिरिक्त कार्रवाइयों पर क्लिक करके टेक्स्ट से जुड़े कस्टम कार्यों को पहचानना और देखना चाहिए। 'Https://msdn.microsoft.com/en-us/library/ms178786(v=vs। 100) .aspx – Chris

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