2016-09-28 9 views
7

मेरे वर्ड ऐड-इन में, मेरे पास एक शब्द Document ऑब्जेक्ट है जिसमें एक विशेष Section है। इस Section में, मैं एक Shape संलग्न:एक आकार बनाना सबसे अधिक

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape; 

मेरे मुद्दा यह है कि कुछ वर्ड दस्तावेज़ टेम्पलेट्स छवियों या अन्य चीजें मेरे आकार के शीर्ष पर दिखाई देते हैं कि है। मूल रूप से, मैंने सोचा था कि जेड ऑर्डर को ठीक करने के लिए यह पर्याप्त होगा:

shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

ऐसा नहीं हुआ। तो मेरा सवाल यह है कि, मैं अपने Shape के ज़ेड ऑर्डर को पूरी तरह से कैसे सेट कर सकता हूं, या दूसरे शब्दों में, मुझे Shape बनाने के लिए सेट करने के लिए और क्या करना होगा, जैसे कि यह शीर्ष-सबसे चीज है जो आप देखते हैं दस्तावेज़ (अर्थात्, यह अन्य सभी चीजों के ऊपर दिखाई देता है)?

उत्तर

8

मैं अंत में पता लगा कि क्यों इन तरीकों से काम नहीं कर रहे थे:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText); 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

समस्या यह है कि मैं एक HeaderFooter अनुभाग के भीतर मेरी Shape वस्तु जोड़ा गया था, लेकिन आकार है कि यह के शीर्ष पर प्रदर्शित किया गया था के भीतर परिभाषित किया गया था Document। जेड-ऑर्डरिंग आपके ऑब्जेक्ट में उसी अनुभाग के भीतर अन्य आकृतियों के सापेक्ष है (चाहे आपका ऑब्जेक्ट वास्तविक दस्तावेज़, हेडर, पाद लेख, आदि में है)।

इस कोड के बजाय एक विशेष खंड के आकार को जोड़ने के लिए:

var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape; 
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText); 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

मैं अपने दस्तावेजों में यह सीधे जोड़ने और फिर इसे करने के लिए Z- क्रम लागू करने के लिए इस कोड का इस्तेमाल किया है, और यह वास्तव में काम किया।

var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape; 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

Writing Word Macros, Second Edition राज्यों यह पूरी तरह से स्पष्ट रूप से:

ZOrder विधि अन्य करने के लिए एक आकार वस्तु रिश्तेदार के ज़ेड-ऑर्डर सेट यह अन्य वस्तुओं जो मेरे टेम्पलेट का एक हिस्सा थे की सब से ऊपर दिखाई दिया ऑब्जेक्ट्स। ध्यान दें कि विधि पूर्ण z-order सेट नहीं करती है।

इस प्रकार पूर्ण जेड इस तरह जहां Shape वास्तव में इस मामले में रहता है के रूप में अन्य कारकों पर निर्भर करता है।

4

इसे मैन्युअल रूप से वर्ड में करना, मैं "टेक्स्ट के सामने आगे बढ़ना" विकल्प चुनता हूं। आप की कोशिश करनी चाहिए:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);

इस अकेले क्योंकि अन्य वस्तुओं के काम नहीं करता है, एक के बाद एक प्रयोग करके देखें:

shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText); 
shape.ZOrder(MsoZOrderCmd.msoBringToFront); 

ऐसा करने के लिए कारण यह है कि एमएस वर्ड के इलाज के लिए लगता है विभिन्न Z-Orders होने के रूप में पाठ और अन्य वस्तुओं।

+0

मैंने कोशिश की, और यह काम नहीं करता है। – Alexandru

+0

मैं यह भी कहूंगा, यहां तक ​​कि निम्नानुसार कैननिकल किताबों में भी, लेखक स्पष्ट रूप से बताता है कि * ZOrder विधि अन्य ऑब्जेक्ट्स के सापेक्ष एक आकार ऑब्जेक्ट के z-order को सेट करता है। ध्यान दें कि विधि पूर्ण z-order सेट नहीं करती है। *: Https://www.safaribooksonline.com/library/view/writing-word-macros/9781565927254/apbs02.html आपका उत्तर काम नहीं करता है, और न ही यह है कैनोलिक जवाब। – Alexandru

+0

@Alexandru शायद आपका लिंक वास्तव में आपके प्रश्न का उत्तर देता है, क्योंकि जेड-ऑर्डर ज़ेड-ऑर्डर का हिस्सा बनने के लिए कई ऑब्जेक्ट्स के बिना व्यर्थ है। जब तक आपका आकार ज़ेड-ऑर्डर कमांड प्राप्त करने वाला अंतिम नहीं है, तब तक इसे ओवरराइड करने के लिए इंटरऑप में कोई भी तरीका नहीं बनाया गया है। इसमें कोई संदेह नहीं है कि यह डिजाइन द्वारा है। शुभकामनाएं एक कैनोलिक उत्तर ढूंढ रही हैं, क्योंकि आपके स्वयं के लिंक आप जो चाहते हैं उससे अलग कुछ दिखाते हैं। – vbnet3d

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