2013-07-16 10 views
6

डेल्फी में आप मॉड्यूल के संसाधन खंड की स्ट्रिंग तालिका में संग्रहीत तारों की घोषणा कर सकते हैं।डेल्फी पुनर्वितरण की स्ट्रिंग टेबल संसाधन आईडी कैसे प्राप्त करें?

resourcestring 
    rsExample = 'Example'; 

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

क्या एक स्ट्रिंग के रूप में घोषित स्ट्रिंग की आईडी पुनर्प्राप्त करने का कोई तरीका है?

कारण यह है कि मैं एक पैकेज का उपयोग करता हूं जो gnugettext की तरह काम करता है। System.pas (जैसे LoadResString) में कुछ फ़ंक्शंस झुकाए जाते हैं, इसलिए जब मैं अभिव्यक्ति में पुनर्वितरण का उपयोग करता हूं, तो इसे एक अलग स्ट्रिंग (अनुवाद) द्वारा प्रतिस्थापित किया जाएगा। बेशक, यह बहुत आसान है, लेकिन कभी-कभी मुझे पुनर्वितरण के मूल (अप्रतिबंधित) पाठ की आवश्यकता होती है।

जब मैं स्ट्रिंग के संसाधन आईडी को पुनर्प्राप्त करने में सक्षम हूं, तो मैं अनुवादित पाठ के बजाय मूल पाठ प्राप्त करने के लिए लोडस्ट्रिंग API को कॉल कर सकता हूं।

उत्तर

10

पुनर्विक्रेता की संसाधन आईडी प्राप्त करने के लिए, आप स्ट्रिंग का पता PResStringRec प्रकार पर डाल सकते हैं और फिर Identifier मान तक पहुंच सकते हैं।

इस नमूने का प्रयास करें

{$APPTYPE CONSOLE} 

{$R *.res} 

uses 
    System.SysUtils; 

resourcestring 
    rsExample = 'Example'; 
begin 
    try 
    Writeln(rsExample); 
    Writeln(PResStringRec(@rsExample)^.Identifier); 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
    readln; 
end. 
+0

आह धन्यवाद! मुझे नहीं पता था कि resourcestring वास्तव में एक TRESStringRec रिकॉर्ड के लिए एक सूचक था। मैं दस्तावेज में कहीं भी नहीं मिला। बेशक, यह मेरी गलती हो सकती है, लेकिन क्या आपको लगता है कि यह कहीं दस्तावेज है? –

+0

['TResStringRec'] (http://docwiki.embarcadero.com/Libraries/XE4/en/System.TResStringRec) दस्तावेज़ कहता है '... TResStringRec एक स्ट्रिंग संसाधन का प्रतिनिधित्व करता है। TResStringRec एक संरचना है जिसमें मॉड्यूल और एक स्ट्रिंग संसाधन के पहचानकर्ता शामिल हैं। ' – RRUZ

+0

मुझे [TResStringRec] (http://docwiki.embarcadero.com/Libraries/XE4/en/System.TResStringRec) दस्तावेज़ में 'resourcestring' के रूप में घोषित स्ट्रिंग्स का लिंक दिखाई नहीं देता है। यह कहता है कि 'रन के समय स्ट्रिंग संसाधनों को ढूंढने और लोड करने के लिए सिस्टम रूटीन द्वारा प्रकार के TRESStringRec का उपयोग किया जाता है।' शायद यह इस वाक्य में पुनर्विक्रय के बारे में बोलता है, लेकिन यह मुझे स्पष्ट नहीं था। वैसे भी, आपने मुझे सही दिशा में भेज दिया है! –

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