मैं फ्लेक्स में एक ड्रैग को "अस्वीकार्य" कैसे कर सकता हूं?

एक बार जब मैंने DragManager.acceptDrag कहा है तो ड्रैग को "अस्वीकार्य" करने का कोई तरीका है? कहें कि मेरे पास एक ऐसा दृश्य है जो ड्रैग और ड्रॉप स्वीकार कर सकता है, लेकिन केवल कुछ क्षेत्रों में। एक बार जब उपयोगकर्ता इन क्षेत्रों में से किसी एक पर ड्रैग करता है तो मैं DragManager.acceptDrag (यह) ( DragEvent.DRAG_OVER हैंडलर से) पर कॉल करता हूं, लेकिन यदि उपयोगकर्ता इस क्षेत्र से बाहर निकलता है मैं ड्रैग की स्थिति को स्वीकार नहीं करने के लिए बदलना चाहता हूं और DragManager.NONE फीडबैक दिखा सकता हूं। हालांकि, न तो DragManager.acceptDrag (null) और न ही DragManager.showFeedback (DragManager.NONE) को कोई प्रभाव नहीं दिख रहा है। एक बार जब मैंने ड्रैग स्वीकार कर लिया है तो एक फीडबैक प्रकार सेट करें, मैं इसे बदल नहीं सकता।

बस इसे स्पष्ट करने के लिए: जिन क्षेत्रों में उपयोगकर्ता ड्रॉप करने में सक्षम होना चाहिए वे घटकों या यहां तक ​​कि वस्तुओं को प्रदर्शित नहीं कर सकते हैं, वास्तव में वे केवल टेक्स्ट फ़ील्ड (चयन की तरह) के पाठ में हैं। अगर वे स्वयं के घटक होते थे तो मैं उनमें से प्रत्येक को अलग-अलग ड्रैग इवेंट स्वीकार कर इसे हल कर सकता था। मुझे लगता है कि मैं प्रॉक्सी घटकों को बना सकता हूं जो इसे अनुकरण करने के लिए पाठ पर तैरते हैं, लेकिन अगर यह आवश्यक नहीं है तो मैं नहीं चाहूंगा।


मैंने इसे अब एआईआर और ब्राउज़र दोनों में काम करने में कामयाब रहा है, लेकिन केवल पाठ की श्रेणियों के शीर्ष पर प्रॉक्सी घटकों को डालकर जहां आप चीजों को छोड़ने में सक्षम होना चाहिए। इस तरह से मुझे सही प्रतिक्रिया मिलती है और ड्रॉप ड्रैग निकास पर स्वचालित रूप से अस्वीकार्य होते हैं।

This is the oddest thing about D&D in AIR:

DragManager.doDrag(initiator, source, event, dragImage, offsetX, offsetY);

ब्राउज़र-आधारित फ्लेक्स में, ऑफसेटएक्स और ऑफसेट नकारात्मक होना चाहिए (इसलिए प्रलेखन कहता है, और यह ठीक काम करता है)। हालांकि, एआईआर में बिल्कुल वही कोड चलाते समय आपको ऑफसेट सकारात्मक बनाना होगा। वही संख्या, लेकिन सकारात्मक। वह बहुत अजीब है।


मैंने कुछ और परीक्षण किया है और क्या @maclema काम करता है, लेकिन अगर आप एआईआर में भागते हैं। ऐसा लगता है कि एआईआर में ड्रैग और ड्रॉप अलग है। यह वास्तव में, वास्तव में अजीब है क्योंकि न केवल प्रतिक्रिया सही ढंग से दिख रही है, और यह अस्वीकार्य नहीं है, लेकिन निर्देशांक भी पूरी तरह से बंद हैं। मैंने अभी एआईआर के बजाए ब्राउज़र में अपने एप्लिकेशन की कोशिश की और ड्रैगिंग और ड्रॉपिंग पूरी तरह टूट गई है।

साथ ही, dragEnter हैंडलर को छोड़कर एआईआर में ठीक काम करता है, लेकिन ब्राउज़र में चलते समय सब कुछ तोड़ देता है।

0
ro fr bn

5 उत्तर

क्या आप केवल dragEnter विधि का उपयोग कर रहे हैं? यदि आप उसी घटक पर खींचते समय ड्रैग को अस्वीकार करने का प्रयास कर रहे हैं तो आपको dragEnter और dragOver विधियों दोनों का उपयोग करने की आवश्यकता है।

इस उदाहरण को देखें:

<?xml version="1.0" encoding="utf-8"?>

    
        


    
    
    

0
जोड़ा
DRAG_ENTER हैंडलर में ड्रैग को स्वीकार करना सिर्फ चीजों को और खराब बनाता है। मैं अभी भी ड्रैग को अस्वीकार नहीं कर सकता (कॉलिंग DragManager.acceptDragDrop (null) का कोई प्रभाव नहीं है, कम से कम कोई दृश्य प्रभाव नहीं है), और एंटर पर ड्रैग को स्वीकार करने से मेरा नियंत्रण कम हो जाता है। उपयोगकर्ता को विशेष क्षेत्रों में खींचने पर दिखाने के बजाए माउस को घटक में प्रवेश करने के बजाय पॉइंटर के नीचे + दिखाया जाता है।
जोड़ा लेखक Theo, स्रोत
ठीक है, जो शुरुआतकर्ता को एक लक्ष्य भी बना देगा, + जब उपयोगकर्ता उस घटक पर ड्रैग करेगा (जो निश्चित रूप से नहीं होना चाहिए क्योंकि यह बूंदों को स्वीकार नहीं करता है)। तो यह या तो काम नहीं करता है।
जोड़ा लेखक Theo, स्रोत

ठीक है, अब मुझे समस्या दिखाई दे रही है। शून्य की बजाय, इसे ड्रैगइनिटरेटर पर सेट करने का प्रयास करें।

इसकी जांच करें।

<?xml version="1.0" encoding="utf-8"?>

    
        


    
    
    
    

0
जोड़ा

हां, एआईआर में ड्रैग और ड्रॉप अलग है। मुझे उससे नफरत है! फ्लेक्स में बनाए गए कस्टम डीएनडी के समान काम करने के तरीके को समझने के लिए यह बहुत कुछ खेलता है।

निर्देशांक के लिए, शायद स्थानीयToContent, और स्थानीय ToGlobal विधियों के साथ खेल सकते हैं। वे कुछ उपयोगी के लिए निर्देशांक का अनुवाद करने में मदद कर सकते हैं।

सौभाग्य। अगर मैं किसी और चीज के बारे में सोचता हूं तो मैं आपको बता दूंगा।

0
जोड़ा

If you don't need native drag and drop in AIR, you can get the Flex drag and drop behavior by subclassing WindowedApplication and setting the DragManager. See this post on the Adobe Jira for more info: https://bugs.adobe.com/jira/browse/SDK-13983

0
जोड़ा

आप अवधारणा को गलत समझ रहे हैं। ड्रैगओवरहैंडलर को कार्यान्वित करके और "डेटा को अस्वीकार करने" के संकेत से आपका "अस्वीकार्य" हासिल किया जाता है।

बुनियादी अवधारणा यहां दी गई है:

  1. register the dragEnterHandler or override the already registered method.

    function dragEnterHandler(event: DragEvent):void {
        if (data suites at least one location in this component)
            DragManager.acceptDragDrop(this);
    }
    

    This enables your container to receive further messages (dragOver/dragExit). But this is NOT the location to decide which kind of mouse cursor should be displayed.

    Without DragManager.acceptDragDrop(this); the other handlers aren't called.

  2. register the dragOverHandler or override the already registered method.

    function dragOverHandler(event: DragEvent):void {
        if (data suites at least no location in this component) {
            DragManager.showFeedback(DragManager.NONE);
            return;
        }
    
        ...//handle other cases and show the cursor/icon you want
    }
    

    Calling DragManager.showFeedback(DragManager.NONE); does the trick to display the "unaccept".

  3. register the dragExitHandler or override the already registered method.

    function dragOverHandler(event: DragEvent):void {
       //handle the recieved data as you like.
    }
    
0
जोड़ा