2012-03-29 10 views
10

DXE2 का उपयोग करके, मैंने एक फॉर्म जनरेटर लिखा है जो .pas और .dfm फ़ाइलों दोनों बनाता है। मैं एक दिनचर्या पर काम कर रहा हूं जो मुझे dfm में विभिन्न गुणों को संशोधित करने की अनुमति देगा, जैसे Font.Height और TabOrder।मैं अपने डीएफएम अकेले छोड़ने के लिए डेल्फी कैसे प्राप्त करूं?

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

उदाहरण के लिए, मूल फ़ॉन्ट। हाइट है -11। मैंने डीएफएम में पढ़ा है, इसे -17 में बदल दिया है, और इसे सेव किया है। नोटपैड में, यह -17 दिखाता है। जब मैं इसे डेल्फी में खोलता हूं, तो यह 21 के रूप में दिखाई देता है!

किसी भी विचार/सुझाव/सुझावों की बहुत सराहना की जाएगी!

उत्तर

14

मेरा अनुमान है कि आपकी मशीन पर PixelsPerInch और .dfm फ़ाइल में संग्रहीत मान के बीच कोई मेल नहीं है। जब डेल्फी .dfm फ़ाइल को पढ़ता है तो यह .dfm फ़ाइल PixelsPerInch और आपकी मशीन के वर्तमान PixelsPerInch के अनुपात के अनुसार किसी भी आयाम को स्केल करेगा।

PixelsPerInch के विशिष्ट मूल्य 96 डीपीआई और 120 डीपीआई हैं। ध्यान दें कि 17*120/96 = 21

अब TabOrder के लिए, आईडीई हमेशा लगातार मानों में फॉर्म ऑर्डर लिख देगा। इसलिए, यदि आपके पास आपकी .dfm फ़ाइल में कोई मूल्य गुम है तो आईडीई TabOrder मानों का एक अलग संस्करण लिख देगा।

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

यह वास्तव में .dfm फ़ाइलों को संभालने के तरीके का एक अपरिहार्य परिणाम है। आईडीई कभी भी .dfm फ़ाइलों को उसी तरीके से संपादित नहीं करता है जो आपके .pas फ़ाइलों के साथ करता है। इसके बजाय यह .dfm फ़ाइल को पढ़ता है, फ़ॉर्म पर परिभाषित घटकों को बनाता है, और उनके गुणों को असाइन करता है। जब .dfm फ़ाइल को फिर से सहेजने की आवश्यकता होती है, तो घटकों को स्वयं को स्ट्रीम करने के लिए कहा जाता है। इसलिए सेटिंग रखने वाले अंतर्निहित मॉडल को TComponent उदाहरण (उदाहरण के लिए अक्सर एक फॉर्म) है जो .dfm फ़ाइल के बजाय IDE के स्वामित्व में है।

+0

ARRRGGG !!! तो, मूल रूप से, अगर मैं अपने स्वयं के रूपों को रोल करना जारी रखूंगा, तो मुझे पूरी तरह से आईडीई छोड़ना चाहिए? – skippix

+2

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

+1

@WarrenP हाँ, मैं सभी को .dfm नरक के बारे में पता है। और मैं हमेशा प्रतिबद्ध होने से पहले समीक्षा करता हूं। मेरे लिए मुझे लगता है कि मेरे कस्टम घटक कभी-कभी फ्रेम के अंदर होस्ट किए जाने पर इसकी गुण खो देते हैं, यानी .dfm फ़ाइल में विरासत वाले कीवर्ड। –

3

मैं क्या करता हूं आईडीईई को यह बदलने देता है कि वह क्या परिवर्तन चाहता है, और टोर्टोइस {एचजी, एसवीएन, आदि} + केडीआईएफएफ 3 का उपयोग करने के लिए (इसकी विलय सुविधा का उपयोग करके) का उपयोग करें और केवल मेरे द्वारा किए गए परिवर्तनों को ही करें, जो उनको उलट दें आईडीई ने बनाया है कि मैं नहीं रखना चाहता हूं।

कदम:

  1. अपने संस्करण नियंत्रण प्रणाली के संवाद के लिए प्रतिबद्ध करने के लिए जाओ।

  2. सूची में प्रत्येक डीएफएम के लिए, राइट क्लिक करें और "व्यू डिफ" या "विजुअल डिफ" या जो भी आपके संस्करण नियंत्रण ऐप में व्यू-अंतर कमांड कहा जाता है।

  3. आपका diff टूल आ जाएगा। मैं KDIFF3 का उपयोग करता हूं, लेकिन कुछ लोग BeyondCompare का उपयोग करते हैं। मैं "मर्ज -> वर्तमान फ़ाइल मर्ज करें" पर क्लिक करता हूं और फिर मैं उन सभी परिवर्तनों को वापस कर देता हूं जो मैं नहीं चाहता हूं।

  4. विलय के परिणाम सहेजें। इसे प्रतिबद्ध करो

मेरा विश्वास करो, डीएफएम की पागलपन ऐसा कुछ है जिसे आप आश्चर्यचकित करेंगे। हर बार जब आप एक डीएफएम खोलते हैं और इसे बदलते हैं, तो इसमें प्रत्येक टीआईमेजलिस्ट को संशोधित किया जाएगा, जिससे आपके संस्करण नियंत्रण प्रणाली में प्रतिबद्धता हो सकती है, और यदि आपके पास आपकी टीम पर 1 से अधिक डेवलपर हैं, तो आप केवल गारंटी के बारे में हैं " संघर्ष विलय करें "। "डीएफएम स्वच्छता" का अभ्यास शुरू करें और आप बाद में धन्यवाद देंगे। जब आप इस तरह मैन्युअल विलय करते हैं, तो आप मूल रूप से डेल्टा के प्रत्येक "हंक" को रखने या वापस करने का निर्णय लेते हैं जो आपके संस्करण नियंत्रण प्रणाली में किया जाएगा। "संघर्ष" के रूप में नीचे दिखाया गया है वास्तव में "ए या बी पसंद" है। ए चुनने के लिए Ctrl + 1 दबाएं, बी चुनने के लिए Ctrl + 2 दबाएं, और जारी रखें। आप जल्दी से आकस्मिक परिवर्तनों की एक बड़ी संख्या में जा सकते हैं, केवल उन्हीं को बनाए रखें जिन्हें आप बनाना चाहते हैं, और फिर अपना डीएफएम प्रतिबद्ध करें।

enter image description here

+3

कौन अपनी छवियों को .dfm फ़ाइलों में रखता है? संसाधन जाने का एकमात्र तरीका है। –

+2

संसाधनों से लोड होने वाली छविसूची एक बहुत अच्छा विचार है। मैं ऐसे कारणों से उन लोगों का उपयोग करने के लिए संक्रमण कर रहा हूं। लेकिन यह आपके डिजाइनटाइम मजे को मारता है, है ना? आप यूआई को डिज़ाइन और लेआउट कैसे करेंगे और एक छवि को दृश्य रूप से चुनते हैं जब यह अभी तक डिज़ाइनटाइम पर लोड नहीं होता है? साथ ही, डीएफएम में हार्ड-कोडित एसक्यूएल के साथ TQuery प्रकार के घटक वास्तव में ईविल हैं और आग के साथ मारे जाना चाहिए, जब तक कि यह दिन 0 न हो और आप केवल प्रोटोटाइप कर रहे हों। –

+0

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

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

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