2010-09-10 9 views
9

मैं केवल एक एकल .exe वितरित करना चाहता हूं, हालांकि, रनटाइम पर मैं उपयोगकर्ताओं को हार्ड डिस्क ड्राइव पर कुछ एम्बेडेड छवि संसाधन निकालने के लिए चाहता हूं।मैं रनटाइम पर किसी फ़ाइल में संसाधन कैसे निकाल सकता हूं?

क्या मैं, और यदि ऐसा है, तो कैसे?

उत्तर

12

डेल्फी के TResourceStream का उपयोग करें। यह कन्स्ट्रक्टर संसाधन को स्मृति में ढूंढ और लोड करेगा, और यह SaveToFile विधि डिस्क लेखन करेगा।

कुछ इस के लिए इसी तरह काम करना चाहिए:

var 
    ResStream: TResourceStream; 
begin 
    ResStream := TResourceStream.Create(HInstance, 'YOURRESOURCENAME', RT_RCDATA); 
    try 
    ResStream.Position := 0; 
    ResStream.SaveToFile('C:\YourDir\YourFileName.jpg'); 
    finally 
    ResStream.Free; 
    end; 
end; 

आप नाम के बजाय संसाधन आईडी का उपयोग कर सकते हैं, तो यह एक छोटे से कम स्मृति है। उस स्थिति में, आप CreateFromID के साथ बनाएँ को प्रतिस्थापित करेंगे, और स्ट्रिंग नाम की बजाय संख्यात्मक आईडी की आपूर्ति करेंगे।

+0

धन्यवाद, केन, बहुत अच्छा लगता है। बीटीडब्ल्यू, हिंदुस्तान के लिए मूल्य क्या है? – Mawg

+3

ओएस आपको जो भी मूल्य बताता है, @ लिनिक्स। 'हिंदुस्तान' एक वैश्विक चर है जो आपके प्रोग्राम के शुरू होने के बाद डेल्फी आपके लिए प्रारंभ करता है। यह * SysInit * इकाई में है। –

+0

+1 और फिर धन्यवाद! – Mawg

4

TResourceStream बनाएं। आपको वर्तमान EXE फ़ाइल के लिए मॉड्यूल इंस्टेंस हैंडल (आमतौर पर SysInit.HInstance, या जो कुछ भी आपको LoadLibrary या LoadPackage से मिलता है), संसाधन प्रकार (जैसे rt_Bitmap या rt_RCData), या तो संसाधन का नाम या संख्यात्मक आईडी की आवश्यकता होगी। फिर स्ट्रीम की SaveToFile विधि को कॉल करें।

2
try 
    if not Assigned(Bitmap) 
    then 
     Bitmap := TBitmap.Create(); 
    Bitmap.LoadFromResourceName(HInstance,SRC); 
except 
    on E:Exception do 
     ShowMessage(e.Message); 
end; 

और फिर बिटमैप को डिस्क पर सहेजें।

1

शायद यह संसाधनों के साथ काम करने की आवश्यकता होने पर भी यह आसान हो सकता है। Delphidabbler/ResourceFiles

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

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