2011-08-29 18 views
17

मैं एक ऐसी परियोजना पर काम कर रहा हूं जो कई संकलित डेल्फी अनुप्रयोगों (20 से अधिक exe और dll के) से बना है और मुझे 60+ छवियां साझा करने की आवश्यकता होगी (16x16, 24x24, 32x32 , ...) उन सभी के बीच।कई अनुप्रयोगों के बीच छवियों को साझा करने का सबसे अच्छा तरीका

मैं सभी अनुप्रयोगों के बीच चित्रों को शेयर करने के दो अलग अलग तरीकों पर हालांकि है, लेकिन मुझे यकीन है कि जो है बेहतर नहीं कर रहा हूँ:


आइडिया 1:

एक संसाधन बनाएं केवल डीएलएल प्रोजेक्ट, जिसमें .res फ़ाइल के संसाधन लिंक संदर्भ शामिल हैं जिसमें मेरी सभी छवियां हैं। प्रत्येक एप्लिकेशन बदले में डीएलएल लोड करेगा और जरूरी छवियों को पढ़ेगा, जिसे इसकी आवश्यकता के आधार पर टीआईमेजलिस्ट या टीआईमेज में इसकी आवश्यकता हो सकती है।

पेशेवर: छवियों को अपने मूल स्वरूप में भंडार में रखने की अनुमति देता है।

विपक्ष: मैं डिजाइन समय पर छवियों को देखने में सक्षम नहीं हूं क्योंकि उन्हें केवल रन टाइम पर ही लोड किया जाएगा। मुझे स्थिरांक की एक ही संख्या बनाना होगा क्योंकि छवियां हैं या छवियों के समान मूल्यों के साथ एक सेट का उपयोग करें ताकि प्रत्येक छवि को संसाधन फ़ाइल पर इसके नाम से स्वतंत्र रूप से संदर्भित किया जा सके।


आइडिया 2:

एक डाटा मॉड्यूल जो एक बीपीएल के रूप में संकलित और सभी आवेदनों पर एक रन-टाइम पैकेज के रूप में शामिल किया गया है बनाएँ। मैं छवियों को कई TImageList (छवि आकार के आधार पर) में या एक TPngImageList (जो एक घटक पर कई आकारों की छवियों की अनुमति देता है) में जोड़ देगा।

पेशेवर: मैं इस डेटा मॉड्यूल को उन सभी अनुप्रयोगों में जोड़ सकता हूं जो मुझे चाहिए और डिज़ाइन-टाइम पर उन सभी छवियों को देख सकेंगे जिन्हें मुझे उपयोग करने की आवश्यकता हो सकती है।

विपक्ष: सभी छवियों को स्मृति में लोड किया जाएगा भले ही मुझे केवल एक का उपयोग करने की आवश्यकता हो। मुझे यह सुनिश्चित करने की ज़रूरत है कि छवियों का क्रम कभी भी TImageList/TPngImageList में छवियों को जोड़ने/संशोधित करते समय कभी नहीं बदला जाता है। सभी छवियों को एक .dfm में संग्रहीत किया जाएगा।


आइडिया 3: (नई)

अन्य अनुप्रयोगों जो भी संकलित exe के बीच छवियों को साझा करने की जरूरत को देखने के बाद, मैं अभी तक एक और विचार किया है। सभी साझा छवियों को एक उप-फ़ोल्डर पर सादे पीएनजी/आईसीओ फाइलों के रूप में सहेजें जहां संकलित फाइलें हैं (उदाहरण के लिए डेटा)।

पेशेवर: स्मृति में सभी छवियों को लोड करने की आवश्यकता नहीं है, मैं केवल उन लोगों को प्राप्त कर सकता हूं। यह विशेष रूप से महत्वपूर्ण हो सकता है यदि छवियों की कुल संख्या बड़ी है (एक विधि जो इस विधि का उपयोग करती है, डेटा उप-फ़ोल्डर पर 1400 छवियां होती हैं)।

विपक्ष: छवियां किसी के भी दिखाई/उपलब्ध होंगी। उपयोगकर्ता मशीन पर थोड़ा और डिस्क स्थान का उपयोग कर सकते हैं।


मैं इन दो विचारों या किसी अन्य सुझाव पर टिप्पणियों के बारे में पूछना चाहता हूं कि इसे बेहतर तरीके से कैसे पूरा किया जाए।

धन्यवाद!

+0

आइडिया 2 के संबंध में: क्या आप उन छवियों को मुक्त करने में सक्षम होंगे जिन्हें आपको रन-टाइम पर आवश्यकता नहीं होगी? – Jeff

+0

मुझे नहीं लगता कि मैं उन छवियों को आसानी से मुक्त कर सकता हूं जिन्हें मुझे रन-टाइम पर आवश्यकता नहीं है, मुख्य रूप से क्योंकि यदि मैं उन लोगों को हटा देता हूं जिन्हें मुझे TImageList से आवश्यकता नहीं है तो उसके पास किसी भी नियंत्रण में सही छविइंडेक्स नहीं होगा जो TImageList का उपयोग करता है। आपके उत्तर के लिए – smartins

उत्तर

11

मेरे पास विकल्प 1 के लिए एक मजबूत वरीयता है। इसे करने से आप छवियों को अपने मूल स्वरूप में अपने संशोधन नियंत्रण भंडार में रखने की अनुमति देते हैं। विकल्प 2 के साथ आप .dfm फ़ाइलों में छवियों को संग्रहीत करते हैं जिन्हें मुझे बेहद असंतोषजनक लगता है। नकारात्मकता यह है कि आप छवियों के डिजाइन समय को खो देते हैं। मैं व्यक्तिगत रूप से उस व्यापार को बंद करना पसंद करता हूं।

मेरे सॉफ़्टवेयर में मेरे पास एक वैश्विक छवि सूची है जो मैं संसाधनों से लोड करके रनटाइम पर पॉप्युलेट करता हूं, और निश्चित रूप से रनटाइम पर छवि इंडेक्स भी निर्दिष्ट करता हूं। यह अन्य लाभ जो लाता है वह फ़ॉन्ट स्केलिंग के लिए उपयुक्त छवि आकार चुनने की क्षमता है। अन्यथा आपको 16 पीएक्स आइकन, 20 पीएक्स आइकन, 24 पीएक्स आइकन, 32 पीएक्स आइकॉन इत्यादि के लिए अलग-अलग छवि सूचियां रखने की आवश्यकता है

+0

धन्यवाद डेविड। मैंने इस बात पर भरोसा नहीं किया कि प्रत्येक समाधान को भंडार पर कैसे संग्रहीत किया जाएगा, आप डीएफएम समस्या के बारे में एक वैध बिंदु बनाते हैं जो विचार 2 के लिए एक और विचार है। मैं इसे शामिल करने के लिए प्रश्न भी संपादित करूंगा। – smartins

7

एक और विकल्प अपने स्वयं के टीआईमेज घटक को लिखना है, अतिरिक्त गुणों के साथ।

property dllname: string read fdllname write set_dllname; 
property resname: string read fresname write set_resname; 

सेटटर प्रक्रियाओं में, फिर आप संसाधन से छवि लोड करते हैं।
इस तरह आप अभी भी डिजाइन समय में छवियों को देखने में सक्षम होंगे।

डीएफएम फ़ाइल में छवि को सहेजने के लिए तंत्र को ओवरराइड करना सुनिश्चित करें, ताकि आपका एक्सई पहले से ही डीएल में मौजूद छवियों के साथ फूला न जाए।

ऐसा करने के बारे में 100% सुनिश्चित नहीं है, लेकिन यदि आप उस मार्ग का पालन करना चाहते हैं, तो मुझे यकीन है कि किसी के पास उस प्रश्न का आसान उत्तर है।

+0

वहां गुणों के लिए 'संग्रहीत' निर्देश नहीं है जिसे आप गलत के रूप में भी निर्दिष्ट कर सकते हैं? –

+0

@ मारजन, अच्छी कॉल, देखें: http://stackoverflow.com/questions/2072096/stored-keyword-in-delphi – Johan

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

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