2010-12-10 6 views
7

क्या डेल्फी 5 में लिखे गए ActiveX डीएल से एमडीआई बाल विंडो बनाने और डेल्फी एक्सई विंडोज क्लाइंट एप्लिकेशन से बनाए गए एमडीआई पैरेंट विंडो में एम्बेड करने का कोई तरीका है? यदि नहीं, तो व्यवहार की नकल करने का कोई तरीका है?मैं डेल्फी 5 ActiveX डीएलएल से एमडीआई बाल विंडो कैसे बना सकता हूं, और इसे डेल्फी एक्सई एमडीआई माता-पिता में एम्बेड कर सकता हूं?

पृष्ठभूमि

वहाँ डेल्फी 5. में पूरी तरह से लिखा एक आवेदन आवेदन का मुख्य रूप एक एमडीआई माता पिता खिड़की है। आवेदन में अन्य सभी रूप एमडीआई बाल रूप हैं, और उनमें से प्रत्येक एक ActiveX लाइब्रेरी से बनाया गया है। अभिभावक एप्लिकेशन ActiveX बनाता है, जिसके बाद ActiveX इंटरफ़ेस की विधि कॉल होती है। इस विधि से एक फॉर्म बनाया गया है और यह फॉर्म स्टाइल fsMDIChild पर सेट है। इस बिंदु पर फॉर्म एमडीआई माता-पिता का एक एमडीआई बच्चा है। यह काम करता है क्योंकि रनटाइम पैकेजों का उपयोग कर एप्लिकेशन और ActiveX लाइब्रेरी दोनों संकलित किए जाते हैं। नतीजतन, सभी रूपों में टीएप्लिकेशंस का एक ही उदाहरण साझा किया जाता है।

समस्या

आवेदन बहुत बड़ा है, और डेल्फी 2010 या डेल्फी XE के लिए चले जाना चाहिए। यह शानदार होगा अगर आवेदन को पहले माइग्रेट करके व्यवस्थित रूप से माइग्रेट किया जा सकता है, और फिर एक समय में ActiveX लाइब्रेरी माइग्रेट कर रहा है (उनमें से लगभग 50 हैं)।

समस्या यह है कि अगर सांत्वना आवेदन XE में संकलित किया गया है, यह अब एक ही TApplication उदाहरण का उपयोग करेंगे के रूप में उन पुस्तकालयों अभी भी डेल्फी में संकलित है 5.

यहां तक ​​कि अगर ActiveX पुस्तकालय में रूपों नहीं किया जा सकता सच एमडीआई बाल खिड़कियां, ऐसा लगता है कि मैं ActiveX से बनाए गए फॉर्म के हैंडल को वापस करने में सक्षम होना चाहिए और इसे मुख्य रूप से पकड़ सकता हूं और फॉर्म को एक एमडीआई बच्चा बना सकता हूं। मैं घटनाओं को संभालने के लिए अपनी खुद की परत बना सकता था।

कोई विचार?


अद्यतन: वर्तमान में इस एप्लिकेशन के साथ लिया जा रहा दृष्टिकोण यह है कि इसे एमडीआई से एसडीआई इंटरफेस में माइग्रेट किया जा रहा है। डेल्फी XE एप्लिकेशन से डेल्फी 5 ActiveX DLL से TForms को तुरंत चालू करना पूरी तरह से संभव है, जब तक कि प्रत्येक डीएलएल का पहला रूप अपने डेटा (लोडिंग, सेविंग, अतिरिक्त फॉर्म प्रदर्शित करना आदि) का ख्याल रख सके। समस्या मूल एमडीआई डिजाइन रखने में थी। यदि एसडीआई डिज़ाइन स्वीकार्य साबित होता है, तो एमडीआई समाधान की कोई आवश्यकता नहीं होगी। फिर भी, अगर कोई जानता है कि एमडीआई समाधान कैसे पूरा किया जाए, तो मैं जानना चाहता हूं।

+0

आप शायद एमडीआई बच्चे रूपों XE ऐप्लिकेशन में बनाए गए में एक्टिवेक्स पुस्तकालय से रूपों एम्बेड कर सकता है ... (फिर से parenting XE instantiated रूपों में एक्टिवेक्स रूपों - और परिवर्तन नहीं है Activex रूपों 'फॉर्म शैली) –

उत्तर

4

मूल रूप से, मैंने कहा कि आप ऐसा नहीं कर सकते हैं। मैंने कुछ और शोध किया और पाया कि यह करना संभव है। हालांकि आपको बहुत सावधान रहना होगा।

यहाँ कुछ स्रोत मैं हाल ही में विचार का परीक्षण करने के लिए बनाया गया है: http://cc.embarcadero.com/item/28168

कोड spawns विंडोज कैलक्यूलेटर और नोटपैड ऐप्लिकेशन खोलें, फिर MDIize एमडीआई फार्म में बाहरी खिड़कियां।

ऐप शुरू करने के बाद नोटपैड लॉन्च करें पर क्लिक करें, और देखें कि क्या होता है।

आपको आगे काम को संशोधित करने में सक्षम होना चाहिए ताकि आप जो भी चाहते हैं उसे हासिल कर सकें।

ध्यान दें कि आपको यह सुनिश्चित करने की आवश्यकता है कि ActiveX DLL में आपका एमडीआई चाइल्ड पूरी तरह आत्मनिर्भर है।

+0

वीसीएल विंडोज एपीआई के शीर्ष पर एक ढांचा है। डेल्फी स्वयं विंडोज़ विंडोज़ हैं, मुझे संदेह है कि यह संभव है, कुछ प्रयासों के साथ, न केवल एक मनमानी खिड़की में डेल्फी टीएफओआर प्रदर्शित करने के लिए, बल्कि विंडोज़ संदेश कतार का उपयोग करके मुख्य विंडो और इसकी एम्बेडेड विंडो के बीच संवाद करने के लिए। यही है जिसकी मेरे द्वारा तलाश की जा रही है। –

+0

हां, मुझे पता है कि वीसीएल एक ढांचा है, मैं लगभग 3 वर्षों के लिए एपीएसी समर्थन था ... मैं बस इतना कह रहा हूं कि आप वीसीएल का उपयोग नहीं कर सकते हैं, जैसा कि आप वर्तमान में करना चाहते हैं। – chuacw

+0

@chuacw: ची वी! बहुत समय पहले :-) यहां आपका स्वागत है। –

0

यहां तक ​​कि अगर ActiveX पुस्तकालय में रूपों सच एमडीआई बच्चे खिड़कियां नहीं किया जा सकता, ऐसा लगता है जैसे मैं रूप कि और ActiveX से बनाई गई है यह हड़पने से की संभाल वापस जाने के लिए सक्षम होना चाहिए मुख्य रूप और फॉर्म एक एमडीआई बच्चा प्रतीत होता है। मैं हैंडलिंग घटनाओं के लिए अपनी परत बना सकता हूं।

मैं कुछ इस तरह (मार्जन की टिप्पणी से प्रेरित) की कोशिश करेंगे:

  • फ्रेमलेस का एक सेट: डेल्फी 5 एमडीआई खिड़कियों में
    , रूपों में से प्रत्येक के लिए दो परतों में विभाजित विंडो TForms/सामग्री (शायद एक ActiveX रूपों के रूप में इस का पर्दाफाश)
  • प्रत्येक फ्रेमलेस सामग्री के लिए होने TFrames, एक एमडीआई बच्चे कि डेल्फी XE में एमडीआई

संभालती मेजबान:

  • डेल्फी 5 फ्रेमलेस TForms/TFrames से प्रत्येक के लिए संभाल प्राप्त
  • एम्बेड कि एक एमडीआई बच्चे के रूप में संभाल

यह शायद मतलब है कि आप डेल्फी 5 का हिस्सा नकल करने के लिए है डेल्फी एक्सई में एमडीआई हैंडलिंग।

--jeroen

+0

जेरोइन। कूदने के लिए धन्यवाद! मैंने मारजन के सुझाव पर विचार किया, लेकिन यह जटिलता के एक अतिरिक्त स्तर की तरह लग रहा था। मैंने कल्पना की कि एक्सई मुख्य रूप डेल्फी 5 रूप के हैंडल को पकड़ने में सक्षम होना चाहिए। प्रोजेक्ट कि ची वी वे स्थित है, वही है जो मुझे संदेह था। और वह एमडीआई बच्चे के बारे में सही है जो आत्मनिर्भर होने की आवश्यकता है। मैं यह भी कल्पना करता हूं कि एमडीआई माता-पिता एमडीआई बच्चे को संदेश भी भेज सकता है। मैं इस विशेष प्रश्न के लिए अपना जवाब स्वीकार करने जा रहा हूं। –

+0

@ कैरी: आपका स्वागत है। Chuacw के लिए +1। –

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