2012-02-01 8 views
7

मैं डेल्फी XE में निम्नलिखित है:TFormatSettings का उपयोग कैसे करें। प्लेटफ़ॉर्म के लिए विशिष्ट होने के बिना बनाएं?

fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT); 

लेकिन मैं हमेशा संकलन पर एक चेतावनी मिलती है:

W1002 Symbol 'Create' is specific to a platform 

क्या यह करने के लिए सही तरीका है, ताकि मैं एक चेतावनी नहीं मिलता है ?

उत्तर

12

आपके पास दो विकल्प

1) जो एक TLocaleID

class function Create(const LocaleName: string): TFormatSettings; overload; static; 

2) के बजाय एक स्ट्रिंग का उपयोग करता अधिभार संस्करण का उपयोग करें चेतावनी अक्षम है स्थानीय स्तर पर

{$WARN SYMBOL_PLATFORM OFF} 
    fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT); 
{$WARN SYMBOL_PLATFORM ON} 
+5

विकल्प 3. वैश्विक स्तर पर चेतावनी को अक्षम करें। यदि आप विंडोज के अलावा प्लेटफ़ॉर्म के लिए कभी भी निर्माण नहीं करते हैं, तो इसे सक्षम करने में बहुत कुछ नहीं है। –

+0

यदि मैं स्ट्रिंग संस्करण का उपयोग करना चुनता हूं, तो स्ट्रिंग क्या है जो LOCALE_USER_DEFAULT के समतुल्य है? – croceldon

+0

पैरामीटर के बिना एक खाली स्ट्रिंग या कन्स्ट्रक्टर का उपयोग करने का प्रयास करें, यह [GetThreadLocale] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127%28v=vs.85%29 पर कॉल करेगा। एएसपीएक्स) आंतरिक रूप से कार्य करते हैं। बस 'SetThreadLocale' पर कॉल से सावधान रहें क्योंकि इस फ़ंक्शन का परिणाम बदल सकता है। – RRUZ

2

TFormatSettings.Create के विभिन्न ओवरलोड हैं। एलसीआईडी ​​वाला एक विंडोज के लिए विशिष्ट है। बिना किसी पैरामीटर के एक और एक स्ट्रिंग के रूप में लोकेल नाम लेना अधिक पोर्टेबल है।

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

2

मेरे कोड है निम्नानुसार लिखा गया है:

{$IFDEF VER220} 
    FormatSettings := TFormatSettings.Create(GetThreadLocale); 
{$ELSE} 
    GetLocaleFormatSettings(GetThreadLocale, FormatSettings); 
{$ENDIF} 

शायद आप उचित भविष्य के संस्करणों के लिए IFDEF को समायोजित करना चाहते हैं, लेकिन यह विचार देता है।

+0

यह स्निपेट वास्तव में प्लेटफार्म के लिए अधिक विशिष्टता से है जो संकलक शिकायत करता है। – OnTheFly

+0

@ user539484 शायद, लेकिन आईआईआरसी मुझे सलाह से इसे अनुशंसित तरीके से मिला। – mj2008

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

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