2009-12-03 10 views
6

मैं बहुत आभारी होंगे में आपकी सलाह और मदद:SWT: कैसे "प्रस्तुत करना" के लिए पृष्ठभूमि में एक विजेट/एक offscreenbuffer

मैं कैसे पृष्ठभूमि में एक SWT विजेट/घटक प्रदान कर सकते हैं (? Offscreenbuffer) और खोल/विजेट के ही स्क्रीनशॉट ले रहा है :

क्या मैं वर्तमान में है::

Display display = new Display(); 
Shell shell = new Shell(display); 
// ... 
MyWidgetComponent mwc = new MyWidgetComponent(shell, SWT.BORDER); 
shell.open(); 
Image screenshot = new Image(shell.getDisplay(), shell.getBounds()); 
GC.copyArea(screenshot, 0, 0); 
//... 

समस्या "पेंट" पिक्सल है कि विजेट/घटक द्वारा तैयार किये गए थे हार्डडिस्क पर उन्हें बचाने के लिए मिलता है काम करता है, लेकिन यह एक नया विंडो खुल जाएगा टास्कबार में डब्ल्यू। ऐसा कुछ है जो मैं नहीं चाहता।

जो मैं प्राप्त करना चाहता हूं वह है: मैं इस एप्लिकेशन को "सर्वर एप्लिकेशन" के रूप में पृष्ठभूमि में पूरी तरह से चलाने के लिए चाहता हूं (उदाहरण के लिए एम्बेड करें और इसे सर्वलेट में कॉल करें)। तो MyWidgetComponent को पिक्सेल द्वारा पूरी तरह से ऑफस्क्रीनबफर में पिक्सेल द्वारा प्रस्तुत किया जाना चाहिए और बाद में मैं पिक्सेल को पुनर्प्राप्त कर सकता हूं और उन्हें हार्डडिस्क में सहेज सकता हूं या सीधे प्रस्तुत किए गए विजेट को सर्वलेट-अनुरोध के परिणामस्वरूप एक छवि के रूप में वापस कर सकता हूं। (मैं किसी सर्वर वातावरण में किसी भी विंडो को पॉप अप नहीं करना चाहता, अगर यह एक विंडोज सर्वर हो सकता है ...)।

मैं इसे कैसे प्राप्त कर सकता हूं। मैंने बहुत कुछ खोजा लेकिन कुछ भी उपयोगी पाया।

बहुत बहुत धन्यवाद !! जनवरी

उत्तर

2

मैं सीधे अपने सवाल का जवाब नहीं कर सकते हैं, लेकिन मैं एक ऐसी ही समस्या यह है कि मैं के साथ संघर्ष में चलाने की है: एक Shell या Widget के एक स्क्रीनशॉट लेने जबकि यह देखने से बाधित है।

उदाहरण के लिए, विंडो A पर विचार करें जो विंडो B ओवरलैप करता है। एक स्क्रीनशॉट अपने कोड का उपयोग B से बना है:

Image screenshot = new Image(shellB.getDisplay(), shellB.getBounds()); 
GC.copyArea(screenshot, 0, 0); 

मेरे निष्कर्षों से पता चला कि यह विंडोज विस्टा, विंडोज 7 और मैक ओएस एक्स के तहत किया जा सकता है (हालांकि मैं बाद के बारे में अनिश्चित हूँ)। हालांकि, विंडोज एक्सपी के तहत, केन्या के साथ गनोम और लिनक्स के साथ लिनक्स, स्क्रीनशॉट में एक सफेद क्षेत्र है जहां ओवरलैपिंग विंडो दृश्य को बाधित करती है।

मुझे इसके लिए कोई समाधान नहीं मिला है, और मुझे संदेह है कि न केवल यह व्यवहार मंच निर्भर है, बल्कि SWT में काफी छोटी है।

मुझे यह सुनना अच्छा लगेगा कि मैं निशान से बाहर हूं, यद्यपि!

+0

हैलो पॉल, आपके उत्तर के लिए बहुत बहुत धन्यवाद !! आपका जवाब पढ़ने के लिए बहुत दिलचस्प है। मैंने एक समान अनुभव किया (जो विशेषज्ञों के लिए स्पष्ट हो सकता है, लेकिन मुझे नहीं) जो "सर्वरसाइड" को और भी समस्याग्रस्त बनाता है: ऊपर वर्णित अनुसार, एक विंडो हमेशा पॉप अप हो जाएगी, लेकिन न केवल यह विंडो पॉप अप करती है "दृश्यमान/अधिकतम" होने के लिए और "न्यूनतम" (ताकि केवल एक ट्रे/टास्कबार आइकन प्रदर्शित हो) की अनुमति नहीं है, जैसा कि कम से कम राज्य में मुझे एक "सफेद स्क्रीन" भी डूब जाती है। तो इसका मतलब यह है कि विंडो को पूरी तरह से प्रदर्शित किया जाना चाहिए जो सर्वरसाइड वातावरण में और भी बदतर है। – jan

+0

ऐसा लगता है कि अंतिम शब्द है, जहां तक ​​एसडब्ल्यूटी का संबंध है। ध्यान दें कि आप विंडोज एपीआई एक्सेस करके या मैक देशी विधियों को कॉल करके जेएनआई/जेएनए का उपयोग करके इस बारे में प्राप्त कर सकते हैं। बहुत ग्लैमरस नहीं है, लेकिन यह सिर्फ काम पूरा हो सकता है। –

+0

यह एसडब्ल्यूटी के खिलाफ उठाए गए बग होना चाहिए। मैं बस इसमें 5 घंटे बिताता हूं, और एक ही समस्या थी। – Phil

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