2011-08-30 12 views
11

डेल्फी 7 का उपयोग करना:पूर्णांक के साथ TStringList's AddObject का उपयोग करना?

  • कैसे मैं एक stringlist आइटम की वस्तु हिस्से को एक पूर्णांक जोड़ सकते हैं, AddObject का उपयोग कर?
  • मैं ऑब्जेक्ट स्ट्रिंगलिस्ट आइटम की संपत्ति से पूर्णांक को वापस कैसे प्राप्त कर सकता हूं?
  • मैं ऑब्जेक्ट्स को कैसे मुक्त कर सकता हूं और को कब पूरा कर सकता हूं?

उत्तर

38

प्रश्न:How can i add an integer to the object portion of a stringlist item, using AddObject?

एक:How can a retrieve the integer back from a object property of stringlist item?

एक:: कास्ट करने के लिए बस TObject

List.AddObject('A string',TObject(1)); 

क्यू को पूर्णांक मान डाली वस्तु मूल्य पूर्णांक

AValue := Integer(List.Objects[i]); 

प्रश्न:How do i free all objects and list when done?

एक: क्योंकि आप स्मृति बताए नहीं कर रहे हैं आप, वस्तु सूची मुक्त जरूरत नहीं है। इसलिए की Free प्रक्रिया को कॉल करें।

, मैं सिर्फ एक जवाब लिख रहा था यह नमूना अनुप्रयोग

{$APPTYPE CONSOLE} 

uses 
    Classes, 
    SysUtils; 


Var 
    List : TStringList; 
    i : Integer; 
begin 
    try 
    List:=TStringList.Create; 
    try 
     //assign the string and some integer values 
     List.AddObject('A string',TObject(1)); 
     List.AddObject('Another string',TObject(100)); 
     List.AddObject('And another string',TObject(300)); 

     //Get the integer values back 

     for i:=0 to List.Count - 1 do 
     Writeln(Integer(List.Objects[i])); 

    finally 
     //Free the list 
     List.free; 
    end; 
    except 
    on E:Exception do 
     Writeln(E.Classname, ': ', E.Message); 
    end; 

    Readln; 
end. 
+1

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

+0

@RRUZ - +1 वाह! मुझे लगता है कि आपने अभी मेरे लिए एक बड़ा मुद्दा हल किया है कि मैं समझने की कोशिश कर रहा हूं। मैं डेटाबेस लुकअप मानों के लिए आईडी/वैल्यू जोड़े का उपयोग करना चाहता हूं। इसलिए यदि मैं उपर्युक्त रूप से समझता हूं तो मैं ड्रॉप डाउन में सूची.Strings [i] (मान भाग) प्रदर्शित कर सकता हूं और डेटाबेस में विदेशीकी आईडी के रूप में संबंधित इंटीजर (List.Objects [i]) का उपयोग कर सकता हूं। –

+0

@IElite, मैंने फ़्लोटिंग पॉइंट मानों की एक सूची को स्टोर करने के लिए एक समान चाल का उपयोग किया है जहां परिशुद्धता और गतिशील रेंज महत्वपूर्ण नहीं है (डेल्फी 'एकल' प्रकार 4 बाइट्स है और पॉइंटर को टाइपकास्ट किया जा सकता है)। यदि कोई तार नहीं है और पूर्णांक/फ्लोट्स आप स्टोर करना चाहते हैं तो आप एक टीएलिस्ट का भी उपयोग कर सकते हैं। – rossmcm