यह आइटमों की एक जोड़ी जोड़ता है: TStringList.Strings
सूची में एक प्रविष्टि, और TStringList.Objects
सूची में TObject
से मेल खाता है।
यह आपको उदाहरण के लिए, स्ट्रिंग्स की एक सूची संग्रहीत करने की अनुमति देता है जो आइटम के लिए नाम प्रदान करते हैं, और एक ऑब्जेक्ट जो मेल खाने वाला आइटम है।
type
TPerson=class
FFirstName, FLastName: string;
FDOB: TDateTime;
FID: Integer;
private
function GetDOBAsString: string;
function GetFullName: string;
published
property FirstName: string read FFirstName write FFirstName;
property LastName: string read FLastName write FLastName;
property DOB: TDateTime read FDOB write FDOB;
property DOBString: string read GetDOBAsString;
property FullName: string read GetFullName;
property ID: Integer read FID write FID;
end;
implementation
{TPerson}
function TPerson.GetDOBAsString: string;
begin
Result := 'Unknown';
if FDOB <> 0 then
Result := DateToStr(FDOB);
end;
function TPerson.GetFullName: string;
begin
Result := FFirstName + ' ' + FLastName; // Or FLastName + ', ' + FFirstName
end;
var
PersonList: TStringList;
Person: TPerson;
i: Integer;
begin
PersonList := TStringList.Create;
try
for i := 0 to 9 do
begin
Person := TPerson.Create;
Person.FirstName := 'John';
Person.LastName := Format('Smith-%d', [i]); // Obviously, 'Smith-1' isn't a common last name.
Person.DOB := Date() - RandRange(1500, 3000); // Make up a date of birth
Person.ID := i;
PersonList.AddObject(Person.LastName, Person);
end;
// Find 'Smith-06'
i := PersonList.IndexOf('Smith-06');
if i > -1 then
begin
Person := TPerson(PersonList[i]);
ShowMessage(Format('Full Name: %s, ID: %d, DOB: %s',
[Person.FullName, Person.ID, Person.DOBString]));
end;
finally
for i := 0 to PersonList.Count - 1 do
PersonList.Objects[i].Free;
PersonList.Free;
end;
यह स्पष्ट रूप से एक प्रदूषित उदाहरण है, क्योंकि ऐसा कुछ नहीं है जिसे आप वास्तव में उपयोगी पाते हैं। यह अवधारणा को प्रदर्शित करता है, यद्यपि।
एक और आसान उपयोग स्ट्रिंग के साथ एक पूर्णांक मूल्य को संग्रहीत करने के लिए है (उदाहरण के लिए, TComboBox
या TListBox
में आइटमों की एक सूची दिखा रहा है और डेटाबेस क्वेरी में उपयोग के लिए संबंधित आईडी)। इस मामले में, आपको केवल Objects
सरणी में पूर्णांक टाइप करना होगा (या कुछ और जो आकारऑफ (सूचक) है)।
// Assuming LBox is a TListBox on a form:
while not QryItems.Eof do
begin
LBox.Items.AddObject(QryItem.Fields[0].AsString, TObject(QryItem.Fields[1[.AsInteger));
QryItems.Next;
end;
// User makes selection from LBox
i := LBox.ItemIndex;
if i > -1 then
begin
ID := Integer(LBox.Items.Objects[i]);
QryDetails.ParamByName('ItemID').AsInteger := ID;
// Open query and get info.
end;
एक वास्तविक TObject
के अलावा अन्य चीजों के भंडारण के मामले में, आप सामग्री को मुक्त करने की जरूरत नहीं है। चूंकि वे वास्तविक वस्तुएं नहीं हैं, इसलिए TStringList
को छोड़कर मुक्त करने के लिए कुछ भी नहीं है।
यह वास्तव में प्राचीन पूर्व-जेनेरिक डेल्फी का अवशेष है। इस तरह के कच्चे टाइपलेस तंत्र का उपयोग करने के लिए आजकल यह समझ में नहीं आता है। सामान्य 'TList' इस तकनीक को पीछे छोड़ देता है। –
@ डेविड हेफरन प्राचीन है, लेकिन उपयोगकर्ताओं के लिए उपयोगी है जो डेल्फी (> = 200 9) के नए संस्करणों तक पहुंच के बिना उपयोगी है। इसके अलावा ओपी डेल्फी संस्करण निर्दिष्ट नहीं करता है जो उपयोग कर रहा है। – RRUZ
@RRUZ बिल्कुल।इसे प्री-जेनरिक का प्रयोग करें, लेकिन इससे आगे बढ़ने के बाद कृपया इसे रोक दें। –