2012-02-08 10 views
5

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

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

एक अच्छा उदाहरण है, VCL TMediaPlayer का उपयोग कर पृष्ठभूमि आवेदन में सामने के अंत FMX आवेदन के साथ इस्तेमाल किया जा रहा जानकारी प्रदर्शित और आदि चलाने, रोकने, का नियंत्रण इस तरह की है कि यह अनिवार्य रूप से एक FMX हो जाता है प्रदान करने के लिए किया जा सकता है वीसीएल क्षमता के साथ यूआई।

मैं अब तक कैसे संदेशों Firemonkey साथ नियंत्रित किया जाता है (उदाहरण के लिए VCL में, वे "SendMessage" या "PostMessage" या कुछ इसी तरह के साथ किया जा चाहते हैं) पर कुछ भी खोजने में असमर्थ किया गया है, या तो स्थानीय के माध्यम से सहायता फ़ाइल, या व्यापक Googling के माध्यम से। जो कुछ भी मैंने चालू किया है, वह ईमेल से संबंधित है (संभवतः मेरे अधिकांश खोज शब्दों में "संदेश" शब्द के कारण)।

Can anyone point me in the right direction on how messages would be handled with Firemonkey/FMX?

सादर, स्कॉट प्रिचर्ड

+2

आप जानते हैं कि आप एक ही ऐप प्रक्रिया में वीसीएल और एफएमएक्स का उपयोग कर सकते हैं, है ना? खैर, यह कुछ अतिरिक्त काम करता है, लेकिन यह तकनीकी रूप से संभव है, और तीसरे पक्ष के पुस्तकालय और लेख हैं जो आपको दिखाते हैं कि यह कैसे करें। तो आपको सीधे विंडो संदेशों से निपटने की आवश्यकता नहीं होगी अगर आप अपने वीसीएल बटन की 'क्लिक()' विधि को एफएमएक्स यूआई इवेंट हैंडलर से कॉल कर सकते हैं (या बेहतर, अपने साझा कोड को अपने स्वयं के फ़ंक्शन में अलग करें जो वीसीएल दोनों एफएमएक्स कर सकते हैं आवश्यकता होने पर कॉल करें)। –

उत्तर

4

मेरे समझ के साथ कि Firemonkey पारंपरिक खिड़कियों पर आधारित नहीं है, इसलिए खिड़की संदेश भेजने नियंत्रण Firemonkey है आमतौर पर एक विकल्प नहीं है। हालांकि कुछ नियंत्रण विंडोज़ (ज्यादातर उल्लेखनीय रूप से, TCommonCustomForm) का उपयोग करते हैं, इसलिए FMX.Platform.Win इकाई में को से निकालने के लिएफ़ंक्शन का उपयोग कर सकते हैं। मुझे कोई संकेत नहीं है कि एफएमएक्स नियंत्रण में विंडो संदेशों को प्राप्त करने और कस्टम प्रक्रिया कैसे करें, यदि यह भी संभव है।

विंडोज के तहत फायरमोनकी के पास Win32 एपीआई तक पहुंच है, इसलिए आपके वीसीएल यूआई जैसे अन्य विंडो वाले नियंत्रणों में विंडो संदेशों को भेजने से आपको कुछ भी नहीं रोकना चाहिए। Win32 API कार्यों तक पहुंचने के लिए अपने uses खंड में Winapi.Windows इकाई शामिल करें, जैसा कि आप एक वीसीएल अनुप्रयोग में करेंगे।

अद्यतन: क्योंकि FireMonkey संदेश जो एक प्रपत्र की खिड़की के लिए भेजा जाता करने के लिए उपयोग का खुलासा नहीं करता, तो आप मैन्युअल आदेश से पहले FireMonkey उन्हें देखता संदेशों को प्राप्त करने में खिड़की उपवर्ग किया है। आप फॉर्म की CreateHandle() विधि को ओवरराइड कर सकते हैं, विंडो बनाने के लिए पहले inherited विधि को कॉल करें, फिर प्राप्त करने के लिए FmxHandleToHWND() का उपयोग करें जिसे आप उपclass कर सकते हैं। HWND जारी करने के लिए inherited पर कॉल करने से पहले सबक्लास को निकालने के लिए DestroyHandle() विधि को ओवरराइड करना सुनिश्चित करें।

3

वर्तमान में, फ़ायरमॉन्की में एक संदेश हैंडलर नहीं है जिसका उपयोग आप संदेशों को भेजने और पोस्ट करने के लिए कर सकते हैं।

फ़ायरमोनकी जैसे आंतरिक रूप से श्रोताओं का उपयोग करके चीजों को झुकाव की संभावना है, लेकिन इनमें से कोई भी दस्तावेज नहीं है।

तो, बजाय, यहाँ मैं क्या किया है है:

मैं अपने स्वयं के कस्टम "संदेश" श्रेणी का निर्माण। मैं कक्षा के उदाहरण बनाते हैं और उन्हें किसी भी थ्रेड से थ्रेड-सुरक्षित सूची में जोड़ता हूं। मुख्य धागे पर, मेरे पास एक टाइमर होता है जो सूची को जांचता है और "संदेश" को संसाधित करता है।