2010-09-02 21 views
6

एक पालतू परियोजना के रूप में, मैं अपने एसडब्ल्यूटी अनुप्रयोग में एयरो ग्लास प्रभाव को एकीकृत करने की अवधारणा के साथ खेल रहा हूं। ,एयरो ग्लास प्रभाव और एसडब्ल्यूटी

final Display display = new Display(); 
final Shell shell = new Shell(display); 
shell.setLayout(new FormLayout()); 
final MARGINS margins = new MARGINS(); 
margins.cyTopHeight = -1; 

final Composite c = new Composite(shell, SWT.NORMAL); 
c.setBackground(new Color(shell.getDisplay(), new RGB(0, 0, 0))); 
final FormData fd = new FormData(); 
fd.top = new FormAttachment(0, 0); 
fd.left = new FormAttachment(0, 0); 
fd.right = new FormAttachment(100, 0); 
fd.bottom = new FormAttachment(100, 0); 
c.setLayoutData(fd); 

OS.DwmExtendFrameIntoClientArea(shell.handle, margins); 

shell.open(); 
while (!shell.isDisposed()) { 
    if (!display.readAndDispatch()) { 
     display.sleep(); 
    } 
} 

इस खूबसूरती से काम करता है जब तक आप एक नियंत्रण जोड़ना चाहते हैं: Łukasz Milewski has an excellent blog post समझा कि यह कैसे पूरा किया जा सकता है, जो काफी यह करने के लिए निर्भर करता है। इस काले पारदर्शी शेष में परिणाम:

Transparent shell with control

A follow-up post दर्शाता है कि कैसे भी ऐसा करने के लिए, है, लेकिन SWT पुस्तकालय को संशोधित करने की आवश्यकता है। (कम से कम, मुझे विश्वास है, क्योंकि निजी एसडब्ल्यूटी फ़ंक्शन @Override के साथ ओवरराइड किए गए हैं।)

मैं नियंत्रण पारदर्शी होने से कैसे बच सकता हूं? इससे भी बेहतर: मैं पारदर्शिता से कैसे लाभ उठा सकता हूं (उदा। like so पर छवियां रखकर), लेकिन इसे समझदार तरीके से उपयोग करें?

+1

क्या आप जीवित लिंक जोड़ सकते हैं? – Supuhstar

उत्तर

2

ओवरराइड विधियां "पैकेज निजी" हैं। संकलित समय त्रुटियों के बिना उन्हें ओवरराइड करने के लिए, आपको अपनी कक्षाओं को सुपर क्लास, यानी org.eclipse.swt या org.eclipse.swt.widgets पैकेज के समान पैकेज में रखना होगा। आपके द्वारा पोस्ट किए गए ब्लॉग वास्तव में अंत में इस कार्यान्वयन के विवरण का उल्लेख करते हैं, इसलिए मुझे नहीं पता, यह वास्तव में आपके प्रश्न का उत्तर देता है।

+0

मैं बस उस से ठीक पहले पढ़ा। निश्चित रूप से पर्याप्त है, जो किसी भी समस्या के बिना संकलन करने की अनुमति देता है, लेकिन अभी भी बहुत सी चीजें सही ढंग से काम नहीं कर रही हैं। एक पूरी तरह से काम करने वाला उदाहरण बहुत अच्छा होगा, क्योंकि केवल कुछ स्थिरांक और 'कॉलविंडोप्रोक()' में कुछ अतिरिक्त मामलों को सेट करके मैं वास्तव में अपारदर्शी टेक्स्ट प्रदर्शित करने के लिए 'ओपेकटेक्स्ट' प्राप्त कर सकता हूं। मैं सुबह में अपने वर्तमान कोड के साथ अपना प्रश्न अपडेट करूंगा। –

+0

क्योंकि बक्षीस की समयसीमा समाप्त हो रही है, इसलिए मैं इसे आपको पुरस्कार दूंगा। –

0

अपना नियंत्रण ग्लास क्षेत्र से बाहर रखें या नियंत्रण के लिए बल पृष्ठभूमि रंग का उपयोग करने का प्रयास करें।

+0

ग्लास क्षेत्र के बाहर मेरा नियंत्रण रखना प्रभाव के उद्देश्य को कम या ज्यादा हरा देता है। मैं "काला से परहेज" पर विचार नहीं करता, या तो एक यथार्थवादी विकल्प। मुझे पता है कि यह सही तरीके से करने का एक तरीका है (एक सहयोगी ने सी # में इसी तरह के मुद्दे को हल करने का उल्लेख किया है), इसलिए मैं बस उस पर क्रंचिंग रखूंगा। –

0

आप उस समाधान से चिंतित हैं जो आंतरिक तरीकों को ओवरराइड करता है, लेकिन आप पहले स्थान पर एक आंतरिक एसडब्ल्यूटी कक्षा का उपयोग कर रहे हैं। यह आपके ऐप पर कुछ आंख कैंडी जोड़ने के लिए एक बहुत ही हैकी नाजुक तरीके (कम से कम वर्तमान एसडब्ल्यूटी कार्यान्वयन में) जैसा लगता है ... मुझे आशा है कि आप इसे उत्पादन कोड में नहीं कर रहे हैं।

+0

इसे 'कोशिश {...} पकड़ने (थ्रो करने योग्य ई) {}' में लपेटकर निश्चित रूप से चोट नहीं पहुंचा सकता है। यह सिर्फ आंख कैंडी है, इसलिए अगर यह विफल रहता है, तो कोई बड़ी बात नहीं है, है ना? वर्तमान उत्पादन कोड में कुछ 'ओएस' संदर्भ हैं, इस तरह लागू किए गए हैं। क्या यह वास्तव में बहुत बुरा अभ्यास है? –

+0

यह निजी तरीकों को ओवरराइड करने के लिए मेरा एक * चिंता * भी नहीं है; यह और भी है कि मैं संकलन त्रुटियों के बिना इसे पूरा नहीं कर सकता। मैं क्या गलत कर रहा हूं? –

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

  • कोई संबंधित समस्या नहीं^_^